127 lines
4.0 KiB
Markdown
127 lines
4.0 KiB
Markdown
# 生产部署(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_cloud
|
||
cd kefu_cloud
|
||
```
|
||
|
||
## 一键部署
|
||
|
||
```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 # 升级前建议备份
|
||
```
|