PHẦN 2 – Deploy Website, Cài DB, Mua Domain & Chơi Tới Cloudflare

“Một website mà không có domain riêng như đi chơi mà không mặc đồ. Ừ thì vẫn được, nhưng... hổng đẹp!”

· 3 phút đọc
PHẦN 2 – Deploy Website, Cài DB, Mua Domain & Chơi Tới Cloudflare
Photo by Igor Miske / Unsplash

🛠️ MỤC TIÊU BÀI NÀY:

  • Host website Ghost lên VPS riêng (DigitalOcean / Linode / Hetzner / Oracle Cloud v.v.)
  • Tạo MySQL DB
  • Cài Ghost bằng CLI
  • Trỏ domain, cấu hình SSL
  • Kết nối Cloudflare proxy chống DDoS, tăng tốc, bắn tỉa crawler xấu xa

☁️ BƯỚC 1: MUA VPS (VÌ MIỄN PHÍ KHÔNG BAO GIỜ LÂU BỀN)

Bạn chọn 1 trong các nhà cung cấp sau:

Nhà cung cấp Giá rẻ Free Credit
DigitalOcean 200$ / 60 ngày
Linode 100$ / 60 ngày
Hetzner ✔✔ Không
Oracle Cloud MIỄN PHÍ Nhưng... đau đầu
Khuyến nghị: xài DigitalOcean cho nhẹ đầu, xong rồi "đào tẩu" về nơi rẻ hơn sau.

📦 BƯỚC 2: SSH VÀO VPS & CÀI GHOST

🧯 SSH vào server:

ssh root@your.server.ip

🚀 Cài Node + NGINX + Ghost CLI

# Update & install packages
apt update && apt upgrade -y
apt install nginx mysql-server nodejs npm unzip curl -y

# Cài Ghost CLI
npm install -g ghost-cli
Ghost yêu cầu Node.js 18 → nếu đang 20 thì dùng n hoặc nvm để về đúng version.

🔧 BƯỚC 3: TẠO THƯ MỤC & CÀI ĐẶT GHOST

mkdir -p /var/www/ghost && cd /var/www/ghost
chown -R $USER:$USER /var/www/ghost
ghost install

CLI sẽ hỏi các thứ:

Prompt Câu trả lời
Blog URL Ví dụ: https://gagamer.dev
MySQL user/pass Mặc định là root, nhập pass bạn đặt
Setup NGINX Yes
Setup SSL (Let's Encrypt) Yes
Systemd setup Yes

Boom 💣 sau vài phút, web của bạn lên như lúa mùa mưa 🌾


🧠 BƯỚC 4: TẠO DATABASE TỰ CHỦ (OPTIONAL)

Nếu không dùng mặc định root của MySQL, bạn có thể tạo DB riêng:

mysql -u root -p
CREATE DATABASE ghost_prod;
CREATE USER 'ghost_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON ghost_prod.* TO 'ghost_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Sau đó sửa file cấu hình .ghost/config.production.json để trỏ DB custom của bạn.

🌐 BƯỚC 5: MUA DOMAIN NHƯ MUA GHỆ CHÍNH THỨC

Bạn có thể mua domain ở:

Ví dụ domain bạn là: gagamer.dev


🌍 BƯỚC 6: TRỎ DOMAIN → SERVER

Tạo A record:

Type Name Value
A @ your.server.ip
A www your.server.ip

💡 Vào trang quản lý DNS của domain (Namecheap, Cloudflare...), tạo bản ghi như trên.


🔒 BƯỚC 7: BẬT CLOUDFLARE CHO NGẦU

Cloudflare = proxy trung gian giúp:

  • Ẩn IP server thật
  • Tăng tốc, cache asset
  • Chống DDoS nhẹ nhẹ
  • Tùy chỉnh header & firewall

Các bước:

  1. Đăng ký Cloudflare → Add site → Nhập domain gagamer.dev
  2. Chọn plan Free (là đủ xài)
  3. Cloudflare sẽ cho bạn 2 bản ghi DNS (vd: abby.ns.cloudflare.com, tony.ns.cloudflare.com)
  4. Vào chỗ mua domain → đổi name server thành 2 cái trên

📛 BƯỚC 8: SETUP CLOUDFLARE CHUẨN CHỈ

Proxy ON:

Record Proxy?
@
www

SSL/TLS:

  • Full (Strict) → nếu bạn có SSL từ Let’s Encrypt (cái Ghost setup rồi)

Speed:

  • Bật Rocket Loader (JS boost)
  • Bật Brotli, Auto Minify

Page Rules (bonus):

URL: *gagamer.dev/*
Setting: Cache Level → Cache Everything

💻 BƯỚC 9: KIỂM TRA WEBSITE CHẠY OK CHƯA?

curl -I https://gagamer.dev

Check:

  • HTTP/2 200
  • server: cloudflare
  • cf-cache-status: HIT/BYPASS

Nếu không thấy cloudflare → bạn chưa bật proxy hoặc sai DNS.


🧙 BONUS: TRỎ SUBDOMAIN → APP KHÁC

Ví dụ:

  • blog.gagamer.dev → Ghost
  • app.gagamer.dev → 1 app React khác

→ Tạo thêm bản ghi A hoặc CNAME trong Cloudflare, sau đó dùng NGINX để reverse proxy hoặc cài Ghost vào folder khác /var/www/blog.


🚨 LƯU Ý XINH ĐẸP

  • Ghost auto restart bằng systemd – không cần pm2
  • ghost restart để reload nếu sửa theme/db
  • ghost update để lên version mới
  • Đừng cài Ghost vào /root – dễ lỗi permission

ĐIỂM DANH KẾT QUẢ SAU BÀI NÀY:

  • [x] Website Ghost chạy trên VPS
  • [x] Domain riêng gagamer.dev kết nối OK
  • [x] Có SSL full HTTPS
  • [x] Đã dùng Cloudflare làm proxy chống gió
  • [x] Bạn trông như dân DevOps dù chỉ mới biết cd ..