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

Yêu cầu trước khi bắt đầu

Trên VPS:

  • 1 VPS Linux (Ubuntu/Debian khuyến nghị), đã cài Docker + Docker Compose plugin (docker compose version chạy được).
  • 1 domain thật, đã trỏ DNS A record về IP VPS (bắt buộc cho bước TLS ở §4 — DNS phải propagate xong trước khi xin chứng chỉ).
  • Quyền SSH vào VPS.
  • age, Python3 và rsync (gói có rrsync) cho backup/kiểm tra/kéo backup; rclone chỉ cần nếu bật OFFSITE_REMOTE (§9).
  • Port 80 và 443 phải mở ra Internet ở CẢ 2 tầng: firewall của nhà cung cấp cloud (Security Group trên AWS, Network Security Group trên Azure, Firewall rules trên GCP…) và firewall trong hệ điều hành (ufw/iptables nếu có bật). VPS mặc định thường chỉ mở sẵn port 22 (SSH) ở tầng cloud — dễ quên mở thêm 80/443, khiến bước §4 luôn thất bại với lỗi Connection refused dù mọi thứ trong VPS đều đúng. Kiểm tra trước khi qua §4:
    Terminal window
    curl -I http://<domain-hoặc-ip> # từ máy khác, KHÔNG PHẢI từ trong VPS
  • Dung lượng đĩa: ngoài Postgres còn có volume ảnh (icon vật phẩm, avatar, ảnh gói). Ảnh đã nén WebP nên thường nhỏ, nhưng nên để trống tối thiểu vài GB và theo dõi (§10).

Không cần Git/Node.js/uv hay mã nguồn ứng dụng trên VPS — VPS chỉ docker load image đã build sẵn rồi chạy. Python3 hệ thống được dùng bởi các script backup để ghi/đọc manifest và tạo thông báo Slack.

Trên máy dev (máy build image):

  • Docker (để docker build/docker save).
  • Git (script build dùng git rev-parse --short HEAD để ghi lại đúng commit vào version.json).
  • Python3 (script build dùng để đọc/ghi version.json).

Áp dụng cho Portal v1.2.2