- 提供 API/Web 多阶段镜像、Nginx 反代与 WS/文件路径 - docker-compose.prod 含 Postgres、MinIO、API、前端 - deploy.sh 生成密钥、构建启动、可选种子与备份脚本
4.0 KiB
4.0 KiB
生产部署(Docker / 腾讯云 CVM)
单机 Docker Compose 方案:Nginx + API + PostgreSQL + MinIO,适合腾讯云轻量/ CVM。
架构
Internet ──:80──▶ web(nginx)
├── / 前端 SPA
├── /api/* → api:8080(含 WebSocket)
├── /health → api
└── /files/* → minio:9000/kefu(图片公共读)
服务器准备(腾讯云)
- 购买 CVM / 轻量应用服务器(建议 2 核 4G 起,系统 Ubuntu 22.04)
- 安全组放行:
22、80(有证书再放443) - 安装 Docker:
# Ubuntu 示例
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker "$USER"
# 重新登录后 docker 无需 sudo
docker compose version
- 上传代码到服务器,例如:
git clone <你的仓库地址> kefu_sys
cd kefu_sys
一键部署
chmod +x deploy/scripts/*.sh
# 首次会生成 deploy/.env.prod 并提示你改域名/公网地址
./deploy/scripts/deploy.sh
# 需要演示账号时(kefu_admin / kefu_admin123 等)
./deploy/scripts/deploy.sh --seed
必改配置(deploy/.env.prod)
| 变量 | 示例 | 说明 |
|---|---|---|
APP_BASE_URL |
http://1.2.3.4 或 https://kefu.xx.com |
浏览器访问根地址 |
STORAGE_PUBLIC_BASE_URL |
http://1.2.3.4/files |
必须与 Nginx /files 一致 |
HTTP_PORT |
80 |
宿主机端口 |
DB_PASSWORD / JWT_SECRET / STORAGE_* |
强随机 | 脚本可自动生成密钥 |
脚本会校验占位符是否改掉。
常用命令
./deploy/scripts/deploy.sh --status # 状态
./deploy/scripts/deploy.sh --down # 停容器(保留卷)
./deploy/scripts/deploy.sh --seed-only # 仅跑种子
./deploy/scripts/backup-db.sh # 备份数据库到 ./backups
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod logs -f api
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod logs -f web
HTTPS 建议(腾讯云)
任选其一:
- CLB / CDN 终结 HTTPS,回源 CVM
80(最简单) - 本机 Caddy / Nginx + Let’s Encrypt 反代到本 compose 的
80 - 把
web容器映射改到8080,宿主机 Nginx 做 443 → 8080
配置 HTTPS 后,请同步把 APP_BASE_URL、STORAGE_PUBLIC_BASE_URL 改成 https://…。
使用腾讯云 COS 替代 MinIO(可选)
- 创建 COS 桶,开启公共读或使用 CDN 域名
- 在
.env.prod配置 S3 兼容参数(见.env.prod.example注释) - 从
docker-compose.prod.yml中去掉minio/minio-init依赖,并修改 Nginx,去掉/files反代(图片直链 COS)
当前一键脚本默认 内置 MinIO,零额外云产品即可跑通。
默认种子账号(仅 --seed 后)
| 角色 | 用户名 | 密码 |
|---|---|---|
| 平台管理员 | platform_admin |
kefu_admin123 |
| 租户管理员 | kefu_admin |
kefu_admin123 |
| 坐席 | agent1 等 |
kefu_admin123 |
上线后立即修改密码或关闭 seed 账号。
目录说明
| 路径 | 说明 |
|---|---|
docker-compose.prod.yml |
生产编排 |
deploy/docker/Dockerfile.api |
Go API 镜像 |
deploy/docker/Dockerfile.web |
前端构建 + Nginx |
deploy/docker/nginx.conf |
反代与 SPA |
deploy/.env.prod.example |
环境变量模板 |
deploy/scripts/deploy.sh |
一键部署 |
deploy/scripts/backup-db.sh |
数据库备份 |
故障排查
| 现象 | 处理 |
|---|---|
| 页面 502 | docker compose … logs api,检查 DB 是否 healthy |
| 图片打不开 | 检查 STORAGE_PUBLIC_BASE_URL 是否为 …/files,MinIO 桶是否 public download |
| WebSocket 断 | 确认走同源 /api/ws,CLB 需开启 WebSocket/长连接 |
| 构建 Go 失败 | 服务器内存不足时加 swap,或本机 build 后 docker save 上传 |
升级
git pull
./deploy/scripts/deploy.sh # 重新 build 并滚动启动
./deploy/scripts/backup-db.sh # 升级前建议备份