Cài đặt blog cá nhân với Ghost
Gần đây sau nhiều năm không viết blog cá nhân. Data các blog cũ cũng đã archived, giờ quay lại viết trên site này, hy vọng nó trụ được lâu tí.
Nền tảng lần này mình dùng là Ghost thay vì Wordpress, với các tiêu chí sau:
- Nhẹ, nhanh
- Deploy đơn giản (1 file docker-compose là xong)
- Không có nhu cầu code, style
- CMS đơn giản, trực quan
Thế thôi. Cách cài đặt thì cũng khá đơn giản. Bạn cần chuẩn bị trước 1 VPS đã cài đặt docker, ở đây mình dùng Debian 12 với kernel 6, ngoài ra dùng Ubuntu 24.04 cũng tương tự. Ubuntu thì nó khá là nặng và thiên về GUI nhiều hơn, package update thường xuyên hơn Debian. Bù lại Debian nhẹ hều, file iso có 600MB.
Bắt đầu cài docker & docker compose V2
sudo snap install docker
sudo snap install docker-compose
Tạo thư mục chứa file docker-compose.yaml
mkdir /opt/docker/ghost
cd /opt/docker/ghost
Tạo file compose.yml với nội dung sau
version: '3'
services:
ghost:
image: ghost:5-alpine
restart: always
ports:
- 2368:2368
volumes:
- ./ghost_content:/var/lib/ghost/content
environment:
url: https://mrtuan.us #Thay bằng url của bạn
Mặc định Ghost chạy sẽ dùng SQLite, nếu bạn muốn dùng MySQL, tạo file compose như sau
services:
ghost:
image: ghost:5-alpine
restart: always
ports:
- 2368:2368
environment:
url: https://blog.mrtuan.us #thay domain của bạn vào đây
database__client: mysql
database__connection__host: db
database__connection__user: ghost
database__connection__password: ghost
database__connection__database: ghost_db
trusted_proxies: 0.0.0.0/0
volumes:
- ghost_content:/var/lib/ghost/content
depends_on:
- db
db:
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: abcdxyz #đặt password root cho MySQL
MYSQL_DATABASE: ghost_db
MYSQL_USER: ghost
MYSQL_PASSWORD: ghost #user, password phải giống với ghost config
volumes:
- mysql_data:/var/lib/mysql
volumes:
ghost_content:
mysql_data:
Chạy thôi
docker compose up -d
Bạn cần thêm 1 reverse proxy handle port 80 nếu muốn domain blog của bạn ra ngoài nó đẹp nữa. Cái này bạn có thể dùng Nginx hay Traefik. Cái này mình sẽ viết tiếp phần sau.