2026-05-18 19:49:31 +08:00
|
|
|
|
# 私有化部署运行手册
|
|
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
## 一键部署
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
curl -fsSL https://xuqinmin.com/xuqmGroup/XuqmGroup-PrivateDeploy/raw/branch/main/install.sh \
|
|
|
|
|
|
-o install.sh && bash install.sh
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
交互式向导依次完成:
|
|
|
|
|
|
|
|
|
|
|
|
1. 选择租户初始化方式(新建 / 迁移)
|
|
|
|
|
|
2. 填写租户信息或迁移密钥
|
|
|
|
|
|
3. 填写外部访问地址(宿主机 nginx 对外的地址,用于 SDK 配置)
|
|
|
|
|
|
4. 自动完成容器启动、数据库初始化、全量验证
|
|
|
|
|
|
|
|
|
|
|
|
完成后按输出的端口表配置宿主机 nginx。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Nginx 配置
|
|
|
|
|
|
|
2026-05-20 17:20:02 +08:00
|
|
|
|
部署向导会询问宿主机是否已有 nginx,根据答案自动选择绑定模式:
|
2026-05-20 16:13:04 +08:00
|
|
|
|
|
2026-05-20 17:20:02 +08:00
|
|
|
|
### 场景一:无宿主机 nginx(多层代理 / 内网服务器)
|
|
|
|
|
|
|
|
|
|
|
|
容器直接绑定宿主机 `0.0.0.0:80`(`NGINX_BIND=80`),上层 nginx 直接指向本机 IP:
|
|
|
|
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
|
|
location / {
|
|
|
|
|
|
proxy_pass http://<部署服务器IP>;
|
|
|
|
|
|
proxy_http_version 1.1;
|
|
|
|
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
|
|
|
|
proxy_set_header Connection "upgrade";
|
|
|
|
|
|
proxy_set_header Host $host;
|
|
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
|
|
|
|
proxy_read_timeout 3600s;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 场景二:宿主机已有 nginx(云服务器域名 HTTPS)
|
|
|
|
|
|
|
|
|
|
|
|
容器绑定 `127.0.0.1:11223`(`NGINX_BIND=127.0.0.1:11223`),宿主机 nginx server 块加一条:
|
2026-05-20 16:06:42 +08:00
|
|
|
|
|
|
|
|
|
|
```nginx
|
2026-05-20 16:13:04 +08:00
|
|
|
|
location / {
|
2026-05-20 17:20:02 +08:00
|
|
|
|
proxy_pass http://127.0.0.1:11223;
|
2026-05-20 16:06:42 +08:00
|
|
|
|
proxy_http_version 1.1;
|
2026-05-20 16:13:04 +08:00
|
|
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
|
|
|
|
proxy_set_header Connection "upgrade";
|
|
|
|
|
|
proxy_set_header Host $host;
|
|
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
2026-05-20 16:06:42 +08:00
|
|
|
|
proxy_read_timeout 3600s;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 17:20:02 +08:00
|
|
|
|
> **两种场景通用**:每一层 nginx 代理都必须加 `proxy_http_version 1.1` 和 `Upgrade`/`Connection` 头,缺少任意一层 IM WebSocket 就会断开。
|
2026-05-20 16:13:04 +08:00
|
|
|
|
|
|
|
|
|
|
内置 nginx 路由配置在 `config/nginx/conf.d/xuqm.conf`,使用 Docker 服务名路由到各容器,无需关心具体端口。
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
---
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:13:04 +08:00
|
|
|
|
## 端口说明
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:13:04 +08:00
|
|
|
|
| 宿主机端口 | 说明 |
|
|
|
|
|
|
|-----------|------|
|
2026-05-20 17:20:02 +08:00
|
|
|
|
| **80** | 内置 nginx 入口(无宿主机 nginx 场景,`NGINX_BIND=80`) |
|
|
|
|
|
|
| **11223** | 内置 nginx 入口(有宿主机 nginx 场景,`NGINX_BIND=127.0.0.1:11223`) |
|
2026-05-20 16:13:04 +08:00
|
|
|
|
| 11224–11231 | 各业务容器(绑定 127.0.0.1,调试用) |
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 17:20:02 +08:00
|
|
|
|
各业务容器端口仅用于直接调试,正常流量全部走内置 nginx 入口。
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
---
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
## 租户迁移
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
迁移通过一键部署向导完成,选择「迁移租户」后:
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
1. 前往公有化平台控制台 → 安全中心 → 私有化部署迁移 → 生成迁移密钥
|
|
|
|
|
|
2. 将 `pmk_` 开头的密钥粘贴进向导
|
|
|
|
|
|
3. 脚本自动导出租户数据、导入私有库、写入 license 记录、重启服务
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
迁移为单租户操作,会清空现有 bootstrap 数据后写入迁移数据。
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
---
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
## 常用运维命令
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-05-20 16:06:42 +08:00
|
|
|
|
# 查看所有容器状态
|
|
|
|
|
|
docker compose -f docker-compose.yml -f docker-compose.infra.yml ps
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
# 查看服务日志
|
|
|
|
|
|
docker compose -f docker-compose.yml -f docker-compose.infra.yml logs --tail 100 tenant-service
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
# 重新运行全量验证
|
|
|
|
|
|
bash scripts/verify.sh
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
# 停止所有服务(保留数据)
|
|
|
|
|
|
docker compose -f docker-compose.yml -f docker-compose.infra.yml down
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
# 启用可选服务
|
|
|
|
|
|
bash scripts/enable-service.sh im
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
# 禁用可选服务(不删数据)
|
|
|
|
|
|
bash scripts/disable-service.sh im
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
# 备份数据
|
|
|
|
|
|
bash scripts/backup.sh
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
# 恢复数据
|
|
|
|
|
|
bash scripts/restore.sh <backup-file>
|
2026-05-19 08:01:19 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
---
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
## 数据目录
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
| 路径 | 说明 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| `data/mysql/` | MySQL 数据文件 |
|
|
|
|
|
|
| `data/redis/` | Redis AOF 文件 |
|
|
|
|
|
|
| `data/uploads/` | 文件服务上传目录 |
|
|
|
|
|
|
| `data/update/` | 版本管理包存储 |
|
|
|
|
|
|
| `data/backups/` | 备份文件 |
|
|
|
|
|
|
| `logs/` | 审计日志 |
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
---
|
2026-05-19 08:01:19 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
## 重新部署(幂等)
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
脚本幂等,可重复执行:
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
bash install.sh
|
|
|
|
|
|
```
|
2026-05-18 19:49:31 +08:00
|
|
|
|
|
2026-05-20 16:06:42 +08:00
|
|
|
|
已运行的容器不会被重建,数据目录不受影响。
|