Bỏ qua để đến nội dung

Tự host bằng Docker

Xem markdown

docker-compose.yml trong repo dựng hai dịch vụ: PostgreSQL 16 (db) và ứng dụng (app, cổng 3000). Migration chạy tự động mỗi lần ứng dụng khởi động.

Ba named volume giữ dữ liệu qua các lần docker compose down:

VolumeNội dung
postgres_dataCơ sở dữ liệu
media_dataẢnh và file tải lên (/app/media), khi site chưa cấu hình Cloudflare R2
app_dataDữ liệu của ứng dụng, gồm PAYLOAD_SECRET tự sinh

docker compose down -v xoá cả ba.

Đặt trong môi trường hoặc file .env cạnh docker-compose.yml. Chạy thử trên máy bạn thì không cần đặt gì.

BiếnMặc địnhÝ nghĩa
PAYLOAD_PUBLIC_SERVER_URLhttp://localhost:3000Địa chỉ công khai của CMS như trình duyệt thấy; cũng là tiền tố URL của ảnh
PAYLOAD_SECRETtrống (tự sinh một lần)Khoá ký phiên đăng nhập. Trên máy chủ nên tự đặt, tối thiểu 32 ký tự
POSTGRES_PASSWORDkdigiMật khẩu database
APP_PORT / DB_PORT3000 / 5432Cổng ra máy chủ. Database chỉ mở trên 127.0.0.1
SEED_DEMOtrốngtrue để nạp site demo (chạy lại không tạo trùng)
SKIP_MIGRATIONStrốngtrue để bỏ bước migration tự động khi container khởi động

Danh sách đầy đủ, gồm AI SEO, reCAPTCHA cho bình luận, OpenTelemetry và importer WordPress, nằm trong file .env.example của repo và ở tài liệu cấu hình.

  1. Đặt PAYLOAD_PUBLIC_SERVER_URL thành địa chỉ https:// thật của CMS và PAYLOAD_SECRET thành chuỗi ngẫu nhiên dài (openssl rand -hex 32).
  2. Đổi POSTGRES_PASSWORD khỏi giá trị mặc định.
  3. Đặt một reverse proxy có TLS (Traefik, Caddy, nginx) phía trước cổng 3000.
  4. Giữ nguyên các volume để không mất dữ liệu khi cập nhật image.

Nếu dùng Coolify, đọc Triển khai trên Coolify.

Chỉ dựng database bằng Compose rồi chạy Next.js trên máy:

Terminal window
docker compose up db
cp .env.example .env
pnpm install
pnpm migrate
pnpm dev

GET /api/health trả 200 khi tiến trình còn phục vụ HTTP. Endpoint này không truy vấn database, nên đừng coi nó là bằng chứng schema đã sẵn sàng.