Docker Compose mô tả một stack đa container trong một file và chạy nó bằng một lệnh. Đây là hướng dẫn triển khai; trước tiên hãy cài Docker nếu bạn chưa. Về một stack chuyên cho agent AI (agent + vector DB + Redis), xem docker-compose cho agent AI.
1. Một stack: app + cơ sở dữ liệu + reverse proxy
# /opt/stack/docker-compose.yml
services:
app:
image: your/app:latest
restart: unless-stopped
env_file: [.env]
depends_on: [db]
# no ports: — reached only through the proxy below
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes: ["pg:/var/lib/postgresql/data"] # internal only
caddy: # HTTPS automatically
image: caddy:2
restart: unless-stopped
ports: ["80:80", "443:443"] # the only public entrypoint
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
volumes: { pg: {}, caddy_data: {} }
Bí mật sống trong .env, không bao giờ trong file compose:
# /opt/stack/.env (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string
Một Caddyfile tối giản proxy tên miền của bạn tới app và tự lấy HTTPS:
app.yourdomain.com {
reverse_proxy app:8080
}
2. Đưa nó lên
cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app
restart: unless-stopped trên mỗi dịch vụ + Docker bật lúc boot = stack tự trở lại sau một reboot.
3. Lệnh hằng ngày
docker compose pull && docker compose up -d # update images
docker compose down # stop the stack
docker compose restart app # restart one service
Phần người ta hay làm sai: cổng bị phơi bày
Docker publish cổng qua iptables, nên một container với ports: ["5432:5432"] có thể truy cập được từ internet ngay cả sau một tường lửa UFW bạn tưởng đã đóng. Chỉ publish duy nhất điểm vào công khai (proxy trên 80/443); giữ cơ sở dữ liệu và cache trên mạng compose hoặc ràng buộc vào 127.0.0.1. Bất cứ thứ gì phục vụ lưu lượng web đều cần một gói IP riêng; ghép với một tường lửa UFW.
Về cả một stack sau một IP, xem tự lưu trữ nhiều dịch vụ. Root trong khoảng một phút, NVMe, không KYC, thanh toán bằng crypto.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.