指南
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。