Files
kefu_cloud/deploy

生产部署(Docker / 腾讯云 CVM

单机 Docker Compose 方案:Nginx + API + PostgreSQL + MinIO,适合腾讯云轻量/ CVM。

架构

Internet ──:80──▶ web(nginx)
                    ├── /          前端 SPA
                    ├── /api/*     → api:8080(含 WebSocket
                    ├── /health    → api
                    └── /files/*   → minio:9000/kefu(图片公共读)

服务器准备(腾讯云)

  1. 购买 CVM / 轻量应用服务器(建议 2 核 4G 起,系统 Ubuntu 22.04
  2. 安全组放行:2280(有证书再放 443
  3. 安装 Docker
# Ubuntu 示例
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker "$USER"
# 重新登录后 docker 无需 sudo
docker compose version
  1. 上传代码到服务器,例如:
git clone <你的仓库地址> kefu_cloud
cd kefu_cloud

一键部署

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.4https://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 建议(腾讯云)

任选其一:

  1. CLB / CDN 终结 HTTPS,回源 CVM 80(最简单)
  2. 本机 Caddy / Nginx + Lets Encrypt 反代到本 compose 的 80
  3. web 容器映射改到 8080,宿主机 Nginx 做 443 → 8080

配置 HTTPS 后,请同步把 APP_BASE_URLSTORAGE_PUBLIC_BASE_URL 改成 https://…

使用腾讯云 COS 替代 MinIO(可选)

  1. 创建 COS 桶,开启公共读或使用 CDN 域名
  2. .env.prod 配置 S3 兼容参数(见 .env.prod.example 注释)
  3. 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 是否为 …/filesMinIO 桶是否 public download
WebSocket 断 确认走同源 /api/wsCLB 需开启 WebSocket/长连接
构建 Go 失败 服务器内存不足时加 swap,或本机 build 后 docker save 上传

升级

git pull
./deploy/scripts/deploy.sh          # 重新 build 并滚动启动
./deploy/scripts/backup-db.sh       # 升级前建议备份