# 生产部署(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. **安全组**放行:`22`、`80`(有证书再放 `443`) 3. 安装 Docker: ```bash # Ubuntu 示例 curl -fsSL https://get.docker.com | sh sudo usermod -aG docker "$USER" # 重新登录后 docker 无需 sudo docker compose version ``` 4. 上传代码到服务器,例如: ```bash git clone <你的仓库地址> kefu_sys cd kefu_sys ``` ## 一键部署 ```bash 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_*` | 强随机 | 脚本可自动生成密钥 | 脚本会校验占位符是否改掉。 ### 常用命令 ```bash ./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 + Let’s Encrypt** 反代到本 compose 的 `80` 3. 把 `web` 容器映射改到 `8080`,宿主机 Nginx 做 443 → 8080 配置 HTTPS 后,请同步把 `APP_BASE_URL`、`STORAGE_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` 是否为 `…/files`,MinIO 桶是否 public download | | WebSocket 断 | 确认走同源 `/api/ws`,CLB 需开启 WebSocket/长连接 | | 构建 Go 失败 | 服务器内存不足时加 swap,或本机 build 后 `docker save` 上传 | ## 升级 ```bash git pull ./deploy/scripts/deploy.sh # 重新 build 并滚动启动 ./deploy/scripts/backup-db.sh # 升级前建议备份 ```