Files
kefu_cloud/deploy/README.md
T
yml2213 d744fc790c 增加腾讯云生产 Docker 部署编排与一键脚本
- 提供 API/Web 多阶段镜像、Nginx 反代与 WS/文件路径
- docker-compose.prod 含 Postgres、MinIO、API、前端
- deploy.sh 生成密钥、构建启动、可选种子与备份脚本
2026-07-15 15:19:04 +08:00

127 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 生产部署(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 + Lets 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 # 升级前建议备份
```