指南
Docker Compose 部署
使用隨附的 docker-compose.prod.yml 和 install.sh 進行單主機生產部署。
有一台高配伺服器,想在 10 分鐘內跑起 AskAIs 智能客服系統?這就是適合你的路徑。適用於 ~500 並發訪客以內的情境;更大規模請跳轉到 Kubernetes 指南。
前置條件
- 一台裝有 Docker 24+ 和 `docker compose` v2 的 Linux 主機
- ≥ 2 vCPU、4 GB 記憶體(建議 8 GB)
- 一個指向該主機的網域(用於透過 Caddy / Cloudflare / nginx 設定 TLS)
一行指令安裝
git clone https://github.com/singlink/singlink
cd singlink
APP_DOMAIN=chat.acme.com bash scripts/install.sh該指令稿會:
- 檢查 docker + openssl
- 產生包含高強度隨機密鑰的
.env.prod(權限 600) - 建置三個映像檔(web / ws / worker)
- 使用
docker compose -f docker-compose.prod.yml up -d啟動整個技術堆疊 - 在 web 容器內執行
prisma migrate deploy
運行的服務
- postgres —— pgvector PG16
- redis —— 發布/訂閱 + 佇列(含密碼保護)
- minio —— 用於附件的 S3 相容儲存
- web / ws / worker —— 三個應用程式行程
- nginx —— 連接埠 8080 上的反向代理,支援 WS 升級
新增 TLS
隨附的 nginx 在連接埠 8080 上終止 HTTP/1.1。請在前面放置一個終止 TLS 的代理:
Caddy(最簡單)
# /etc/caddy/Caddyfile
chat.acme.com {
reverse_proxy localhost:8080
}Cloudflare Tunnel(完全無需入站連接埠)
cloudflared tunnel create singlink
cloudflared tunnel route dns singlink chat.acme.com
cloudflared tunnel run --url http://localhost:8080 singlink日常維運(Day-2)
# Logs
docker compose -f docker-compose.prod.yml logs -f
# Restart everything
docker compose -f docker-compose.prod.yml restart
# Stop (data persists in named volumes)
docker compose -f docker-compose.prod.yml down
# Upgrade
git pull
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --build
docker compose -f docker-compose.prod.yml exec web pnpm db:deploy
# Backups (run from cron daily)
docker compose -f docker-compose.prod.yml exec -T postgres \
pg_dump -U singlink singlink | gzip > /backups/singlink-$(date +%F).sql.gz橫向擴展 worker
執行更多 AI worker 副本(Redis BullMQ 負責分配):
docker compose -f docker-compose.prod.yml up -d --scale worker=4何時升級到 Kubernetes
- 你需要高可用的 postgres / redis(託管的 RDS / ElastiCache)
- 你需要在流量尖峰下自動擴縮容
- 你要跨多個區域執行
- 單主機停機對你的 SLA 而言無法接受
那就跳轉到 Kubernetes / Helm。