# Cài Ghost blog trên VPS: Docker, MySQL, email và sao lưu

> Hướng dẫn cài Ghost blog bản 6 trên VPS bằng Docker chính thức, MySQL, HTTPS, SMTP và Mailgun cho newsletter, sao lưu, cập nhật, và cách cài bằng ZoPanel.

Source: https://zopanel.net/vi/blog/self-host-ghost  
Updated: 2026-10-21

## Ý chính

- Với blog mới, hãy cài Ghost 6; Ghost đã ghi bản 5.x hết vòng đời từ tháng 1/2026.
- Ghost chỉ hỗ trợ chính thức MySQL 8 khi chạy thật, và bộ Docker mới của Ghost gói sẵn Ghost, MySQL và Caddy để có HTTPS.
- SMTP lo email đăng nhập, lời mời và đặt lại mật khẩu, còn newsletter cần Mailgun.
- Sao lưu database MySQL cùng thư mục content; file xuất JSON của Ghost không có ảnh và theme.

**Để cài Ghost blog năm 2026, hãy cài Ghost 6 trên một VPS tối thiểu 1 GB RAM (2 GB thoải mái hơn), bằng bộ Docker Compose chính thức của Ghost (chạy Ghost, MySQL 8 và Caddy tự cấp HTTPS) hoặc bằng Ghost-CLI trên Ubuntu với nginx và MySQL.** Bạn cần thêm một tài khoản SMTP cho email đăng nhập và lời mời biên tập viên, và một tài khoản Mailgun nếu muốn gửi newsletter, vì Ghost gửi email hàng loạt qua Mailgun. Kho ứng dụng của ZoPanel cũng cài Ghost một chạm, nhưng đó là Ghost 5 chạy SQLite, hợp với blog nội bộ hay blog nhỏ hơn là một trang tin công khai mới.

Bài này gồm: Ghost 6 có gì mới, chi phí so với Ghost(Pro), cài bằng Docker chính thức, cấu hình email, cách cài bằng ZoPanel, sao lưu và cập nhật.

## Ghost là gì?

[Ghost](https://github.com/TryGhost/Ghost) là nền tảng xuất bản mã nguồn mở cho blog, tạp chí và newsletter, có trình soạn thảo nhanh, theme, đăng ký thành viên và thu phí thành viên có sẵn. Ghost là ứng dụng Node.js, phát hành theo giấy phép MIT. Tại thời điểm viết (tháng 10/2026), bản mới nhất là [v6.72.0](https://github.com/TryGhost/Ghost/releases) ngày 20/10/2026; Ghost ra bản 6.x mới gần như mỗi tuần.

Theo [tài liệu hosting của Ghost](https://docs.ghost.org/hosting), Ghost 6.0 thêm hai tính năng lớn là ActivityPub (đưa trang của bạn vào mạng xã hội phi tập trung) và thống kê truy cập, mỗi thứ là một dịch vụ mã nguồn mở riêng mà người tự host có thể tự chạy hoặc kết nối.

### Ghost 5 hay Ghost 6?

| Phiên bản | Phát hành | Hết vòng đời (theo Ghost) |
| --- | --- | --- |
| Ghost 5.x | 2022 | Tháng 1/2026 |
| Ghost 6.x | 2025 | Hiện hành, chưa định |

[Trang phiên bản lớn](https://docs.ghost.org/faq/major-versions-lts/) của Ghost ghi rằng khi một phiên bản hết vòng đời thì "nên được xem là không an toàn". Bản 5.x cuối cùng trên GitHub là v5.130.6, ngày 8/1/2026. Website mới hãy bắt đầu với Ghost 6.

## Tự host Ghost so với Ghost(Pro): chi phí

Ghost(Pro) là dịch vụ được quản lý sẵn do Ghost Foundation vận hành. Giá dưới đây lấy từ [ghost.org/pricing](https://ghost.org/pricing/) tại thời điểm viết (tháng 10/2026), tính theo tháng và thanh toán theo năm.

| | Ghost tự host | Ghost(Pro) Starter | Ghost(Pro) Publisher | Ghost(Pro) Business |
| --- | --- | --- | --- | --- |
| Giá | Phần mềm 0 $ + VPS + Mailgun | 18 $/tháng | 29 $/tháng | 199 $/tháng |
| Thành viên | Không giới hạn | 1.000 | 1.000 | Mức cao hơn, xem trang giá |
| Tài khoản biên tập | Không giới hạn | 1 | 3 | 15 |
| Theme tuỳ chỉnh | Có | Không | Có | Có |
| Cập nhật, sao lưu, gửi email | Bạn tự làm | Ghost | Ghost | Ghost |

Giá Ghost(Pro) tăng theo số thành viên, còn Ghost tự host tốn cùng một chi phí dù bạn có 100 hay 10.000 thành viên, chỉ trừ hoá đơn của dịch vụ gửi email. Ngược lại, Ghost(Pro) nuôi việc phát triển Ghost, có sẵn việc gửi newsletter và không phải bảo trì. Nếu bạn không quen vận hành server, đó là lựa chọn hợp lý.

## Cần gì để cài Ghost?

Theo tài liệu của Ghost:

- **Server tối thiểu 1 GB RAM.** Hướng dẫn Docker của Ghost lấy ví dụ một droplet 2 GB, 1 CPU.
- **Với Ghost-CLI:** Ubuntu 22.04, 24.04 hoặc 26.04, Node.js 22 LTS, MySQL 8.0 hoặc 8.4, nginx và systemd.
- **Với Docker:** Docker 20.10.13 trở lên. Ghost gọi cách cài Docker là "hoàn toàn mới" và đang ở dạng preview, nhưng cho biết họ đang chuyển sang bộ công cụ Docker Compose thay vì tiếp tục cập nhật Ghost-CLI.
- **Một tên miền** có bản ghi A trỏ về server ([trỏ tên miền về VPS](/vi/blog/point-domain-to-vps)).
- **Một dịch vụ SMTP** cho email giao dịch, và **Mailgun** cho newsletter.

## Cách 1: Cài Ghost 6 bằng bộ Docker chính thức

Đây là [cách cài Docker](https://docs.ghost.org/install/docker) của chính Ghost. Hãy dùng VPS không có web server khác trên cổng 80 và 443, vì Caddy cần hai cổng này để cấp chứng chỉ.

### Bước 1: Tải bộ cài và cấu hình

```bash
sudo git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
sudo cp .env.example .env
sudo cp caddy/Caddyfile.example caddy/Caddyfile
openssl rand -hex 32   # chạy hai lần: mỗi mật khẩu database một lần
sudo nano .env
```

Trong `.env`, đặt `DOMAIN`, `DATABASE_ROOT_PASSWORD` và `DATABASE_PASSWORD`, rồi điền khối SMTP:

```ini
mail__transport=SMTP
mail__options__host=smtp.example.com
mail__options__port=465
mail__options__secure=true
mail__options__auth__user=blog@example.com
mail__options__auth__pass=mat-khau-cua-ban
mail__from="'Blog Example' <blog@example.com>"
```

File mẫu cảnh báo rằng không được đổi thông số database sau khi database đã khởi tạo, nên hãy chọn mật khẩu mạnh ngay từ đầu. Trong `caddy/Caddyfile`, bỏ comment khối phù hợp với cách bạn dùng tên miền (ví dụ chuyển hướng `www`).

### Bước 2: Khởi động

```bash
sudo docker compose pull
sudo docker compose up -d
```

Bộ này chạy Ghost (image `ghost:6-alpine`), MySQL 8 và Caddy. Mở `https://ten-mien/ghost` ngay và tạo tài khoản chủ sở hữu: người đầu tiên vào trang này sẽ thành chủ website.

ActivityPub chạy sẵn qua dịch vụ do Ghost host, trong giới hạn 2.000 người theo dõi, 2.000 người đang theo dõi và 100 lượt tương tác mỗi ngày. Vượt mức đó, hoặc muốn giữ trên server của mình, hãy bật profile `activitypub` trong `.env`. Thống kê truy cập cần tài khoản Tinybird và profile `analytics`.

## Email: SMTP cho đăng nhập, Mailgun cho newsletter

Ghost gửi hai loại email, và đây là chỗ hay nhầm nhất:

| Loại email | Ví dụ | Gửi bằng gì |
| --- | --- | --- |
| Giao dịch | Lời mời biên tập viên, đặt lại mật khẩu, link đăng nhập và đăng ký của thành viên | Bất kỳ SMTP server nào bạn cấu hình |
| Hàng loạt | Newsletter gửi mọi thành viên | Mailgun, [tài liệu email](https://docs.ghost.org/config/#mail) của Ghost ghi là "bắt buộc cho email hàng loạt" |

Thiếu SMTP thì thành viên không đăng nhập được (đăng nhập bằng link gửi qua email) và bạn không đặt lại được mật khẩu khi quên. Thiếu Mailgun thì vẫn đăng bài được nhưng không gửi được newsletter. Nhập domain và API key của Mailgun trong phần cài đặt newsletter của Ghost Admin. Để email vào hộp thư chính, hãy cấu hình SPF, DKIM và DMARC cho tên miền gửi; xem bài [vì sao email vào spam](/vi/blog/email-going-to-spam).

## Cách 2: Cài Ghost bằng ZoPanel (một chạm)

Kho ứng dụng của ZoPanel cài Ghost trong container ([hướng dẫn đầy đủ](/vi/docs/app-ghost)). Cần nói rõ bạn nhận được gì: **Ghost 5** (`ghost:5-alpine`) với database **SQLite**. Ghost chỉ hỗ trợ chính thức MySQL 8 khi chạy thật; với SQLite, image chính thức chạy Ghost ở chế độ development. ZoPanel dùng SQLite vì container ứng dụng không kết nối được tới MySQL của chính server. Cách này chạy ổn cho một blog có lượng truy cập vừa phải, nhưng vì Ghost 5 đã hết vòng đời, chúng tôi khuyên dùng Cách 1 với Ghost 6 cho một trang công khai mới.

Nếu nó hợp với bạn (blog nội bộ, site thử nghiệm, site Ghost 5 sẵn có):

1. Trỏ bản ghi A của tên miền về server. Nếu dùng hộp thư trên cùng server, tạo nó trước ở mục **Email**.
2. Mở **Kho ứng dụng**, bấm **Cài đặt** trên thẻ **Ghost**.
3. Nhập **Tên miền** và, nếu cần, các trường **SMTP server**, **SMTP port (587 or 465)**, **SMTP user name**, **SMTP password** và **Sender address** (nhãn các trường này luôn hiển thị bằng tiếng Anh). Chúng chỉ đặt được lúc cài; muốn đổi về sau phải cài lại trên cùng tên miền, nội dung vẫn được giữ.
4. Giữ bật **SSL miễn phí (Let's Encrypt)** và bấm **Cài đặt**. Lần khởi động đầu mất một đến hai phút.

**Khoá thiết lập.** Người đầu tiên mở trang thiết lập của Ghost sẽ thành chủ sở hữu, nên ZoPanel giữ bản cài mới ở chế độ riêng tư:

1. Kiểm tra tab **SSL**: chứng chỉ phải được cấp xong, vì Ghost chỉ chạy trên `https://`.
2. Ở tab **Docker**, bấm **Mở ứng dụng (chỉ mình tôi)**.
3. Vào `https://<tên miền>/ghost`, điền tên website, họ tên, email và mật khẩu tối thiểu 10 ký tự.
4. Quay lại tab **Docker**, bấm **Đã thiết lập xong — mở công khai**.

ZoPanel chạy Ghost với giới hạn 768 MB RAM, và **Cập nhật bản mới** chỉ nằm trong dòng Ghost 5. Newsletter vẫn cần Mailgun; container gọi được API của Mailgun qua Internet.

## Sao lưu Ghost

Một bản sao lưu đầy đủ gồm **database** và **thư mục content** (ảnh, theme, file).

**Cài bằng Docker:**

```bash
cd /opt/ghost
sudo docker compose exec -T db sh -c 'mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" ghost' > /root/ghost-$(date +%F).sql
sudo tar czf /root/ghost-content-$(date +%F).tar.gz -C /opt/ghost/data ghost
```

Chép cả hai file ra ngoài server, và cất `.env` ở nơi an toàn vì nó chứa mật khẩu database và SMTP. Chức năng xuất dữ liệu của Ghost Admin (Settings, file JSON) là bản sao thứ hai hữu ích cho bài viết và cài đặt, nhưng không gồm ảnh và theme.

**ZoPanel:** dữ liệu Ghost không nằm trong bản sao lưu tài khoản. Dùng thẻ **Sao lưu** ở tab **Docker** (**Sao lưu ngay**; quản trị viên đặt được lịch hằng ngày hoặc hằng tuần). Container tạm dừng vài giây để file SQLite nhất quán. Xem thêm bài [chiến lược sao lưu website](/vi/blog/website-backup-strategy).

## Cập nhật Ghost

Với bộ Docker, lệnh cập nhật theo tài liệu của Ghost là:

```bash
cd /opt/ghost
sudo git pull && sudo docker compose pull && sudo docker compose up -d
```

Hãy sao lưu trước: Ghost chuyển đổi database khi khởi động. Bạn có thể ghim `GHOST_VERSION` trong `.env`, nhưng Ghost ghi chú rằng khi đó lệnh cập nhật sẽ không có tác dụng cho đến khi bạn đổi lại.

## Kết luận

Tự host Ghost rẻ hơn Ghost(Pro) khi danh sách thành viên lớn dần, nhưng bạn nhận thêm ba việc: vận hành MySQL, cập nhật Ghost theo nhịp hằng tuần, và cấu hình email đúng với SMTP và Mailgun. Với một trang công khai mới, hãy bắt đầu bằng Ghost 6 với bộ Docker của Ghost trên một VPS riêng. Nếu bạn muốn chạy blog cạnh các website và ứng dụng khác trên cùng server, gói Free của ZoPanel có sẵn Kho ứng dụng và hosting WordPress; tham khảo bài [cài WordPress trên VPS](/vi/blog/install-wordpress-on-vps) và xem [bảng giá](/vi/pricing).

```bash
curl -fsSL https://get.zopanel.net | sudo bash
```

## Câu hỏi thường gặp

### Tự host Ghost có miễn phí không?

Có. Ghost dùng giấy phép MIT, bản tự host không có phí giấy phép hay giới hạn thành viên. Bạn trả tiền server và dịch vụ email, ví dụ Mailgun cho newsletter.

### Ghost có gửi newsletter qua SMTP được không?

Không. Ghost dùng SMTP cho email giao dịch như link đăng nhập và lời mời, còn tài liệu của Ghost ghi Mailgun là bắt buộc cho email hàng loạt. Vì vậy newsletter trên Ghost tự host cần tài khoản Mailgun.

### Ghost cần bao nhiêu RAM?

Tài liệu Ghost yêu cầu server tối thiểu 1 GB RAM, và hướng dẫn Docker lấy ví dụ server 2 GB. Khi MySQL và Caddy chạy cùng VPS, 2 GB cho bạn nhiều khoảng dư hơn.

### Có chạy Ghost bằng SQLite thay MySQL được không?

Ghost chỉ hỗ trợ MySQL 8 khi chạy thật. SQLite khiến Ghost chạy ở chế độ development, vẫn dùng được cho blog nhỏ nhưng không phải cấu hình được hỗ trợ chính thức.

### Nên chọn Ghost hay WordPress?

Ghost tập trung vào xuất bản và newsletter thu phí, có sẵn thành viên và gói đăng ký, ít plugin phải bảo trì. WordPress có kho plugin và theme lớn hơn nhiều, hợp với shop, trang danh bạ và website phức tạp. Nếu newsletter là trọng tâm, Ghost là lựa chọn gọn hơn.
