# voitrans 业务服务部署 把 **gateway + home + api + mcp + timer** 五个集群(RPCX/ETCD)服务打成**一个镜像** `voitrans-a11`, 推送到私有仓库 `docker-registry.ideapsound.com`,再到目标机拉取重启。容器内用 shell(entrypoint) 管理 5 个进程, 任一进程退出即整体重启。 ## 文件 | 文件 | 说明 | |---|---| | `../../apps/services/Dockerfile.voitrans` | 镜像构建(编译 5 个二进制 + entrypoint),构建上下文 = `apps/services/` | | `../../apps/services/entrypoint.voitrans.sh` | 容器入口,拉起并守护 5 个服务进程 | | `docker-compose.yml` | 运行镜像,把本目录挂为容器 `/app`,`.env` 注入容器 | | `confs/*.yaml` | 5 个服务的运行配置(含真实密钥,随仓库提交);基础设施端点用 `${VAR}` 由 `.env` 注入 | | `env/.env.example` | 运行时配置模板(真实 `.env` 被 gitignore,需复制后填写) | | `dev-deploy.sh` | **开发**:构建 dev 镜像 → 推送 → 更新开发环境(一条命令) | | `prod-build.sh` | **生产①**:构建带版本号镜像并推送(`:版本` + `:latest`),不部署 | | `prod-deploy.sh` | **生产②**:选区域 + 版本 tag 部署,支持回滚 | ## 用法 首次:复制并填写 env(真实文件已 gitignore) ```bash cd deploy/voitrans cp env/dev.env.example env/dev.env cp env/shanghai.env.example env/shanghai.env # 生产区域同理 japan / singapore # 编辑 env/*.env,填 DSN / Redis / ETCD / NATS / 统计应用名等(CHANGE_ME 处) ``` 开发环境(一键发布) ```bash ./dev-deploy.sh # 构建并发布 dev-latest ./dev-deploy.sh dev_meet-latest # 指定 tag ``` 生产环境(构建与部署分离) ```bash ./prod-build.sh 0.1.1 # 构建并推送 voitrans-a11:0.1.1 (+latest) ./prod-deploy.sh shanghai 0.1.1 # 部署 0.1.1 到上海 ./prod-deploy.sh japan 0.1.1 # 部署到日本 ./prod-deploy.sh singapore 0.1.1 # 部署到新加坡 ./prod-deploy.sh shanghai rollback # 上海回滚到上一版本(与当前版本来回切换) ``` ## 需要填写 / 提供的东西 - **部署目标与凭据**:写死在各脚本顶部。 - `dev-deploy.sh`:`DEV_HOST`(开发服务器 IP)。 - `prod-deploy.sh`:`region_profile()` 里各区域的 `DEPLOY_HOST`。 - 仓库账号 `admin` / 密码已写死;`DEPLOY_KEY` 默认 `~/.ssh/id_rsa`。 - ⚠️ 本目录脚本纳入 git,**公开仓库前务必清空** `*_HOST` 与 `REGISTRY_PASS`。 - **基础设施端点**:填 `env/.env` 的 `ETCD_SERVERS / DB_ADMIN_DSN / DB_DEVICE_DSN / REDIS_* / NATS_URL`, 以及统计上报 `ANALYZE_APP_NAME`(须与 console 注册表应用名一致)/ `ANALYZE_REGION`、集群隔离 `CLUSTER_TAG`。 - **confs 引用的附属文件**(按需放入本目录,会随 `confs/`/工作目录挂入容器 `/app`): - `home.yaml`:`./smart-bluetooth-447104-2b269474bd72.json`(Google)、firebase/google 登录 json、 `./apiclient_key.pem`(微信支付)、`confs/ip2region_v4.xdb` 与 `v6.xdb`(IP 库)、 `wordfilter/*.txt`(敏感词,不需要则删掉 `home.yaml` 的 `wordfilter` 段)。 - 缺这些文件会导致对应服务启动失败(容器反复重启),用不到的集成请删掉对应配置段。 ## 端口(容器内,对外经反代/NPM 暴露) `gateway` 7001 RPCX / 7100 HTTP · `home` 7002 · `timer` 7003 · `mcp` 7004 / 7300 HTTP · `api` 7005 / 8080 Console。 依赖的 `etcd / mysql / redis / nats` 须在 `DOCKER_NETWORK`(默认 `1panel-network`)网络内,用容器名连接。