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,用加密货币付款。
评论
暂无评论。来做第一个吧。