diff --git a/isolated/UAT-RUNBOOK.md b/isolated/UAT-RUNBOOK.md new file mode 100644 index 0000000..f334bd0 --- /dev/null +++ b/isolated/UAT-RUNBOOK.md @@ -0,0 +1,102 @@ +# UAT 环境运维速查 + +> 部署目录:`/home/admin-x99/emp/emp-uat/runtime` +> Compose 项目名:`emp-uat`,网络 `emp-uat_emp-net`,数据卷前缀 `emp-uat_`,与 test 完全隔离。 + +## 1. 服务端口 + +### 对外暴露(开放外网) + +| 服务 | 容器服务名 | 宿主机端口 | 容器内端口 | 说明 | +|------|-----------|-----------|-----------|------| +| 前端(Nginx) | emp-admin | 4755 | 80 | 管理后台入口,代理 `/api/`、`/socket.io/`,并转发模拟器 | +| MySQL | mysql | 4757 | 3306 | 业务库 emp | +| TDengine UI | tdengine | 4759 | 6060 | 时序库管理界面 | + +- 管理后台:`http://ip-cld.cn:4755/` +- 模拟器:`http://ip-cld.cn:4755/simulator/`(经 admin 内部 Nginx 转发) + +### 仅 Docker 内网访问(不开放外网) + +| 服务 | 内网地址 | 说明 | +|------|---------|------| +| emp-ws | emp-ws:3000 | Socket.IO 推送 + 模拟器,经 admin Nginx 转发,4756 不对外 | +| emp-gateway | emp-gateway:9000 | API 网关(JWT 鉴权入口) | +| emp-auth | emp-auth:9001 | 认证授权 | +| emp-monitor | emp-monitor:9002 | 业务接口 | +| emp-data | emp-data:9003 | 数据消费/清洗/时序写入 | +| emp-pdf | emp-pdf:3100 | PDF 导出 | +| nacos | nacos:8848 | 注册/配置中心 | +| redis | redis:6379 | 缓存(DB 0) | +| tdengine REST | tdengine:6041 | 时序库 REST | + +## 2. 运维速查命令 + +快捷函数(或使用 `profiles/dc.sh`): + +```bash +cd /home/admin-x99/emp/emp-uat/runtime +dc() { docker compose --env-file .env -f docker-compose.yml -p emp-uat "$@"; } +``` + +| 操作 | 命令 | +|------|------| +| 查看所有容器状态 | `dc ps` | +| 跟踪某服务日志 | `dc logs -f emp-monitor` | +| 查看最近 200 行日志 | `dc logs --tail=200 emp-monitor` | +| 改 .env 后重建某服务 | `dc up -d emp-monitor` | +| 重启某服务(不重读 .env) | `dc restart emp-ws` | +| 启动全部 | `dc up -d` | +| 停止全部(保留数据卷) | `dc down` | +| 进 MySQL | `dc exec mysql sh -c 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" emp'` | +| 进 Redis | `dc exec redis sh -c 'redis-cli -a "$REDIS_PASSWORD"'` | +| 进 TDengine | `dc exec tdengine taos` | +| 查看资源占用 | `docker stats` | + +> 改 `.env` 必须用 `up -d` 重建容器,`restart` 不会重新读取环境变量。 + +常用排查: + +```bash +# 同步相关日志 +dc logs -f emp-monitor | grep -E "同步" + +# 查看 sync 水位(车辆/设备增量游标) +dc exec redis sh -c 'redis-cli -a "$REDIS_PASSWORD" KEYS "sync:*"' + +# 排查单点登录顶号(token 版本号) +dc exec redis sh -c 'redis-cli -a "$REDIS_PASSWORD" GET auth:token-version:' +``` + +## 3. 关键信息 + +### 数据库 / 中间件(compose 内网自建) + +- MySQL:库 `emp`,内网 `mysql:3306`,对外 4757 +- Redis:`redis:6379`,DB 0 +- TDengine:库 `emp`,超级表 `s_vehicle_data`,`tdengine:6041`,UI 对外 4759 +- Nacos:`nacos:8848`,开启鉴权(`NACOS_AUTH_ENABLE=true`) + +### Kafka(外部,甲方提供) + +- Broker:`ip-cld.cn:29362` +- 后端消费 topic:`YuanJing-uat-vehicle-mock-data`(group `emp-uat-data-group`) +- 模拟器推送 topic:`uat-vehicle-real-data` +- 内部 Kafka 镜像默认不启动;本地联调需 `COMPOSE_PROFILES=local-kafka` + +### 模拟器登录 + +- `SIMULATOR_ADMIN_ROLE=ADMIN`:任意含 ADMIN 角色的账号可登录模拟器 +- 模拟器与业务后台共用账号体系,**同一账号在两处登录会相互挤下线**;建议模拟器与业务后台使用不同的管理员账号 + +### 环境隔离 + +- compose project `emp-uat`,网络 `emp-uat_emp-net`,数据卷前缀 `emp-uat_`,与 test 完全隔离 +- 内网服务名(emp-ws / emp-pdf / emp-gateway 等)在各自 project 网络内解析,test / uat 互不串 + +## 4. 重要提醒 + +- 现场 `.env` 必须使用真实密码/密钥(MySQL、Redis、JWT、COS、SYNC_TK 等),勿用占位符 +- emp-monitor 等配置可能由 Nacos 配置中心下发;改 `.env` 不生效时,需到 Nacos 控制台修改对应 dataId +- 系统重装后 test / uat 均需重新全量部署,并在 TDengine 中重新创建超级表 `s_vehicle_data` +- 清空车辆/设备表重新验证同步时,需同时清 Redis 水位 `sync:vehicle:lastUpdateTime`、`sync:device:lastUpdateTime`,否则从游标处增量拉取不到旧数据