# yunyan-sas 部署 **每个服务目录各一个 `deploy.sh`**,服务名取自所在目录,指令为 ` [action]`。 每个服务自带单服务 compose + 环境模板;依赖服务(PostgreSQL / Redis / NATS) 由目标环境**共享提供**,不在 compose 内搭建,只在 env 里填连接地址。 ## 服务 - `console/` — Go 控制面服务(:8080) - `admin/` — Nuxt 管理前端(:3000,通过 `CONSOLE_BACKEND` 连 console) ## 目录结构 ``` deploy/ └── / # console / admin ├── deploy.sh # 本服务部署脚本(服务名 = 目录名) ├── docker-compose.yml # 单服务 compose(变量驱动,无依赖服务) ├── env/ │ ├── local.env.example │ ├── dev.env.example │ ├── prod.env.example │ └── (复制填写后的 local.env / dev.env / prod.env) └── (console 额外: confs/console.yaml、log/) ``` > 两个服务的 `deploy.sh` 内容相同,靠所在目录名区分服务。 ## 用法 进入服务目录运行: ```bash cd deploy/console ./deploy.sh local up # 本机起 console ./deploy.sh dev # 一键发布 console 到开发服务器(动作默认 deploy) ./deploy.sh prod # 一键发布 console 到生产服务器 ./deploy.sh prod logs # 看生产 console 日志 cd deploy/admin ./deploy.sh local up # 本机起 admin ./deploy.sh prod # 发布 admin 到生产服务器 ``` 参数: - `env`:`local` | `dev` | `prod` - `action`: - `local`:up(默认)| down | restart | logs | ps | pull | build - `dev` / `prod`:deploy(默认,构建推送+同步+远程拉起)| up(仅远程拉起)| build | down | restart | logs | ps | pull ## 首次配置(dev / prod) 配置分两处:**部署目标/仓库凭据写死在各服务的 `deploy.sh`,运行时配置放 env 文件**。 1. 部署目标 + 私有仓库(改各服务 `deploy.sh` 顶部 `deploy_profile`,[console](console/deploy.sh) / [admin](admin/deploy.sh)): - 按 `dev` / `prod` 段填 `DEPLOY_HOST`(服务器 IP) 和 `REGISTRY_PASS`(仓库密码) - 通用项已给默认:`REGISTRY` / `REGISTRY_USER` / `DEPLOY_PORT` / `DEPLOY_USER` / `DEPLOY_KEY` - `DEPLOY_DIR` 自动 = `/opt/yunyan/<服务名>`,无需填 - 注:两个 `deploy.sh` 各填各的,不共享 2. 运行时配置(每个服务、每个环境一份 env): ```bash cp console/env/dev.env.example console/env/dev.env cp admin/env/dev.env.example admin/env/dev.env ``` 需要填: - 依赖服务连接(console):`POSTGRES_DSN` / `REDIS_ADDR`+`REDIS_PASSWORD` / `NATS_URL` - 网络与端口:`DOCKER_NETWORK` / `ADMIN_PORT` / `TAG` 3. 目标机要求:装 docker + docker compose v2、能访问私有镜像仓库、SSH 公钥已授权、依赖服务在 `DOCKER_NETWORK` 网络内可达。 ## 部署顺序 依赖服务(DB/Redis/NATS)共享、由环境预先提供。两个应用服务按序: 1. 先 `console`(admin 依赖它) 2. 再 `admin`(同一目标机、同一 `DOCKER_NETWORK`,用容器名 `yunyan-console` 连 console) ## 注意 - `env/*.env`(真实)含密钥/DSN,已 `.gitignore` 忽略;仓库只保留 `*.example`。 - ⚠️ 部署目标/仓库密码写死在各服务 `deploy.sh`,而它们**会进 git**——`DEPLOY_HOST`、`REGISTRY_PASS` 等会随仓库提交(私有仓库内可接受;公开前务必清理两个 `deploy.sh`)。 - prod 的 `TAG` 用固定版本号便于回滚;`FIELD_ENCRYPT_KEY` / `CONSOLE_TOKEN_KEY` 用强随机值,环境间不复用。 - 镜像构建复用仓库根目录 `build.sh`(`deploy.sh` 在 deploy/build 动作时自动调用,目标=服务名);当前仓库**尚无 build.sh**,build/deploy 前需先补。