Hướng dẫn
Triển khai web app lên VPS với Docker Compose + HTTPS
Mục tiêu
Đưa một web app nhỏ lên VPS của bạn với Docker Compose, HTTPS tự động qua Caddy, và đường rollback.
Điều kiện
- VPS đã cài Docker + Docker Compose
- Domain trỏ về IP VPS (bản ghi A)
- Source code app +
Dockerfile
Các bước
- Đưa code app lên VPS: clone repo vào
/srv/myapp(hoặc copy file), gồm cảDockerfile. Đảm bảo cổng 80/443 đã mở trên VPS (firewall + security group của cloud).git clone <your-repo-url> /srv/myapp && cd /srv/myappNếu copy file bằng tay thay vì clone, tạo thư mục trước:
mkdir -p /srv/myapp, rồi copy code +Dockerfilevào đó. - Trong
/srv/myapp, tạocompose.yml:services: web: build: . restart: unless-stopped env_file: .env expose: ["3000"] caddy: image: caddy:2 restart: unless-stopped ports: ["80:80", "443:443"] volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data volumes: caddy_data: - Caddyfile (thay
app.example.combằng domain của bạn):app.example.com { reverse_proxy web:3000 } - Tạo
.envtrên VPS với giá trị thật — không bao giờ commit nó. Dùng placeholder trong mọi tin nhắn / log bạn chia sẻ. - Triển khai:
docker compose up -d --build docker compose logs -f --tail=100
Kiểm chứng
https://your-domain(thayapp.example.combằng domain của bạn) tải được với chứng chỉ hợp lệ (Caddy tự cấp).docker compose pshiện cả 2 service đang chạy.- Rollback: downtime ngắn trong lúc container restart — chạy vào giờ ít traffic nếu có thể. Các bước: checkout commit trước đó, rồi
docker compose down && docker compose up -d --build.
Sửa lỗi
- HTTPS không cấp: bản ghi A phải trỏ về IP VPS; cổng 80/443 phải mở.
- App crash: xem
docker compose logs webvà audit env bằng env-doctor. - Trùng cổng: có thứ khác đang chiếm 80/443 — dừng nó hoặc dời Caddy.
Cập nhật lần cuối: 2026-10-16. Sửa trên GitHub · Báo lỗi
← Hướng dẫn trước · Hướng dẫn tiếp →
Vẫn kẹt? Nhờ hỗ trợ triển khai →