Docker Compose 用一個檔案描述一個多容器技術堆疊,並用一條指令執行它。這是部署指南;如果還沒裝,先安裝 Docker。關於面向 AI 代理的技術堆疊(代理 + 向量資料庫 + Redis),請看 面向 AI 代理的 docker-compose。
1. 一個技術堆疊:應用 + 資料庫 + 反向代理
# /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: {} }
機密放在 .env 裡,絕不放進 compose 檔案:
# /opt/stack/.env (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string
一個最小的 Caddyfile 把您的網域代理到應用並自行取得 HTTPS:
app.yourdomain.com {
reverse_proxy app:8080
}
2. 啟動它
cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app
每個服務上的 restart: unless-stopped + Docker 開機自啟 = 技術堆疊在重新啟動後自行回來。
3. 日常指令
docker compose pull && docker compose up -d # update images
docker compose down # stop the stack
docker compose restart app # restart one service
大家常搞錯的部分:暴露的埠
Docker 透過 iptables 發布埠,所以帶 ports: ["5432:5432"] 的容器即便在您以為已關閉的 UFW 防火牆之後,也能從網際網路存取到。只發布公開入口(80/443 上的代理);把資料庫和快取留在 compose 網路裡或綁定到 127.0.0.1。任何對外提供 Web 流量的東西都需要 專用 IP 方案;搭配 UFW 防火牆。
關於一整個技術堆疊在一個 IP 之後,請看 自託管多個服務。大約一分鐘拿到 root,NVMe,無 KYC,用加密貨幣付款。
評論
目前還沒有評論。歡迎成為第一位。