# yunyan-sas 部署 三环境部署:`local`(本机)/ `dev`(开发服务器)/ `prod`(生产服务器),统一入口 `deploy.sh`。 服务:`yunyan-console`(Go 控制面,:8080)+ `yunyan-admin`(Nuxt 管理前端,:3000)。 ## 目录结构 ``` deploy/ ├── deploy.sh # 部署入口 ├── docker-compose.yml # 变量驱动 compose(console + admin) ├── env/ │ ├── local.env # 本机运行时变量 │ ├── dev.env / prod.env # 各环境运行时变量(占位,需填) │ └── example.env # 模板 ├── targets/ │ ├── dev.conf / prod.conf # 远程目标 SSH/目录/仓库(占位,需填) │ └── example.conf # 模板 └── console/confs/console.yaml # console 配置(变量从 .env 注入) ``` ## 首次配置(dev / prod) 1. 填 `env/dev.env`、`env/prod.env`:`POSTGRES_DSN` / `REDIS_*` / `NATS_URL` / `DOCKER_NETWORK` / `ADMIN_PORT` / `CONSOLE_*` / `FIELD_ENCRYPT_KEY`。 - DSN 密码里的特殊字符要 URL 编码(`&` → `%26`)。 2. 填 `targets/dev.conf`、`targets/prod.conf`:`SSH_HOST` / `SSH_PORT` / `SSH_USER` / `SSH_KEY` / `REMOTE_DIR` / `REGISTRY_PASS`。 3. 目标服务器需:装 docker + docker compose v2、能访问私有镜像仓库、SSH 公钥已授权。 ## 用法 ```bash # 本机 ./deploy.sh local up # 起服务(访问 http://localhost:3000) ./deploy.sh local down ./deploy.sh local logs # 开发服务器(一键:构建推送镜像 + 同步配置 + 远程拉起) ./deploy.sh dev deploy ./deploy.sh dev ps ./deploy.sh dev logs # 生产服务器 ./deploy.sh prod deploy ./deploy.sh prod restart ``` ## 操作矩阵 | 操作 | local | dev / prod | |------|-------|-----------| | up | 本机 compose up -d | 同步配置 + 远程 pull + up | | down / restart / logs / ps | 本机 | 远程 | | pull | 本机拉镜像 | 远程拉镜像 | | build | 本机构建推送镜像(TAG 取自 env) | 同(构建始终在本机) | | deploy | build + up | build + 同步 + 远程 pull + up | ## deploy 流程(dev / prod) 1. 本机 `build.sh` 构建 console + admin 镜像并推送私有仓库(TAG 取自对应 env)。 2. SSH 到目标机,创建 `REMOTE_DIR`。 3. scp 同步:`docker-compose.yml` + `env/<环境>.env`(→ 远程 `.env`) + `console/confs/console.yaml`。 4. 远程:确保 `DOCKER_NETWORK` 网络存在(不存在则自动创建)+ `docker login` 私有仓库。 5. 远程:`docker compose pull && docker compose up -d`。 ## 注意 - `env/*.env`、`targets/*.conf` 含密钥,已 `.gitignore` 忽略,**不要提交**。 - prod 的 `TAG` 建议固定版本号(如 `v1.2.0`)便于回滚;prod 的 `FIELD_ENCRYPT_KEY` / `CONSOLE_TOKEN_KEY` 务必改强随机值。 - redis / nats:在目标机 `DOCKER_NETWORK` 网络内则用容器名(`redis:6379`);否则在 env 填外部 `IP:端口`。 - console 首启会在主库自动建表(含 serviceconfig / calltranslate 等新表)。