|
|
@ -1,8 +1,8 @@ |
|
|
# admin 管理前端部署 |
|
|
# admin 管理前端部署 |
|
|
|
|
|
|
|
|
把 Nuxt 4 SSR 管理后台 **admin** 打成镜像 `yunyan-admin`,推送到私有仓库 |
|
|
把 Nuxt 4 SSR 管理后台 **admin** 打成镜像 `starpivot-admin`,推送到私有仓库 |
|
|
`docker-registry.ideapsound.com`,再到目标机拉取重启。它本身不连数据库,只通过 |
|
|
`docker-registry.ideapsound.com`,再到目标机拉取重启。它本身不连数据库,只通过 |
|
|
`CONSOLE_BACKEND` 把 `/web/api`、`/console/api` 代理到同网络的 **console** 后端(容器名 `console-a11`)。 |
|
|
`CONSOLE_BACKEND` 把 `/web/api`、`/console/api` 代理到同网络的 **console** 后端(容器名 `starpivot-console`)。 |
|
|
|
|
|
|
|
|
> 约定(与 console 一致):仓库**只提交模板**(`*.example`)。部署脚本会把**模板 + `docker-compose.yml`** 同步到服务器, |
|
|
> 约定(与 console 一致):仓库**只提交模板**(`*.example`)。部署脚本会把**模板 + `docker-compose.yml`** 同步到服务器, |
|
|
> 但**绝不上传/覆盖**你在服务器上填好的真实 `.env`(首次需登录服务器照模板复制并填值)。admin 没有 yaml 配置,全靠 `.env`。 |
|
|
> 但**绝不上传/覆盖**你在服务器上填好的真实 `.env`(首次需登录服务器照模板复制并填值)。admin 没有 yaml 配置,全靠 `.env`。 |
|
|
@ -12,7 +12,7 @@ |
|
|
| 文件 | 说明 | |
|
|
| 文件 | 说明 | |
|
|
|---|---| |
|
|
|---|---| |
|
|
| `../../apps/admin/Dockerfile` | 镜像构建(Nuxt SSR:pnpm build → node server),构建上下文 = `apps/admin/` | |
|
|
| `../../apps/admin/Dockerfile` | 镜像构建(Nuxt SSR:pnpm build → node server),构建上下文 = `apps/admin/` | |
|
|
| `docker-compose.yml` | 运行镜像 `yunyan-admin`,`.env` 注入容器,只 `expose 3000`(经反代对外) | |
|
|
| `docker-compose.yml` | 运行镜像 `starpivot-admin`,`.env` 注入容器,只 `expose 3000`(经反代对外) | |
|
|
| `env/env.example` | 运行时环境**模板**(只一份,不分环境);真实 `.env` 被 gitignore | |
|
|
| `env/env.example` | 运行时环境**模板**(只一份,不分环境);真实 `.env` 被 gitignore | |
|
|
| `dev-deploy.sh` | **开发**:构建 dev 镜像 → 推送 → 远端拉取重启(固定 tag `dev-latest`) | |
|
|
| `dev-deploy.sh` | **开发**:构建 dev 镜像 → 推送 → 远端拉取重启(固定 tag `dev-latest`) | |
|
|
| `prod-build.sh` | **生产①**:构建带版本号镜像并推送(`:版本` + `:latest`),不部署 | |
|
|
| `prod-build.sh` | **生产①**:构建带版本号镜像并推送(`:版本` + `:latest`),不部署 | |
|
|
@ -27,7 +27,7 @@ |
|
|
```bash |
|
|
```bash |
|
|
cd deploy/admin |
|
|
cd deploy/admin |
|
|
cp env/env.example .env # 填真实值(至少 CONSOLE_BACKEND) |
|
|
cp env/env.example .env # 填真实值(至少 CONSOLE_BACKEND) |
|
|
docker compose up -d # 本机起 yunyan-admin |
|
|
docker compose up -d # 本机起 starpivot-admin |
|
|
``` |
|
|
``` |
|
|
|
|
|
|
|
|
### 服务器准备(dev / prod,一次性) |
|
|
### 服务器准备(dev / prod,一次性) |
|
|
@ -36,7 +36,7 @@ docker compose up -d # 本机起 yunyan-admin |
|
|
(`cp env.example .env`,dev-deploy 缺真实文件时也会打印该命令): |
|
|
(`cp env.example .env`,dev-deploy 缺真实文件时也会打印该命令): |
|
|
|
|
|
|
|
|
``` |
|
|
``` |
|
|
<部署目录>/ # dev / prod 均默认 /home/work/yunyan-admin |
|
|
<部署目录>/ # dev / prod 均默认 /home/work/starpivot/admin |
|
|
├── docker-compose.yml # 从本目录拷贝 |
|
|
├── docker-compose.yml # 从本目录拷贝 |
|
|
└── .env # 照 env.example 填(CONSOLE_BACKEND / TAG / DOCKER_NETWORK) |
|
|
└── .env # 照 env.example 填(CONSOLE_BACKEND / TAG / DOCKER_NETWORK) |
|
|
``` |
|
|
``` |
|
|
@ -48,7 +48,7 @@ cd deploy/admin |
|
|
./dev-deploy.sh lingpu # 开发:发布到灵谱测试环境(构建 dev-latest → 推送 → 远端拉取重启) |
|
|
./dev-deploy.sh lingpu # 开发:发布到灵谱测试环境(构建 dev-latest → 推送 → 远端拉取重启) |
|
|
./dev-deploy.sh yunyan # 开发:发布到云雁测试环境 |
|
|
./dev-deploy.sh yunyan # 开发:发布到云雁测试环境 |
|
|
./dev-deploy.sh # 不带参数 → 交互选择测试环境 |
|
|
./dev-deploy.sh # 不带参数 → 交互选择测试环境 |
|
|
./prod-build.sh 0.1.1 # 生产①:构建并推送 yunyan-admin:0.1.1 (+latest) |
|
|
./prod-build.sh 0.1.1 yunyan # 生产①:构建并推送 starpivot-admin:0.1.1 (+latest);第2参数选公司 |
|
|
./prod-deploy.sh 0.1.1 lingpu # 生产②:部署 0.1.1 到指定生产环境(yunyan|lingpu),省略环境则交互选 |
|
|
./prod-deploy.sh 0.1.1 lingpu # 生产②:部署 0.1.1 到指定生产环境(yunyan|lingpu),省略环境则交互选 |
|
|
./prod-deploy.sh rollback lingpu # 生产回滚到上一版本(与当前版本来回切换) |
|
|
./prod-deploy.sh rollback lingpu # 生产回滚到上一版本(与当前版本来回切换) |
|
|
``` |
|
|
``` |
|
|
@ -61,11 +61,11 @@ cd deploy/admin |
|
|
- **部署目标与凭据**:写死在各脚本顶部。`dev-deploy.sh` 的 `env_profile()`(每个测试环境一套 `REGISTRY/DEV_HOST/DEV_KEY/DEV_DIR`,现有 `lingpu`、`yunyan`;新增环境加一段 case 并写进 `ENVS`)、`prod-deploy.sh` 的 `env_profile()`(每个生产环境一套 `REGISTRY/IMAGE_NAME/DEPLOY_HOST/DEPLOY_KEY/DEPLOY_DIR`,现有 `yunyan`、`lingpu`;新增环境加一段 case 并写进 `PROD_ENVS`); |
|
|
- **部署目标与凭据**:写死在各脚本顶部。`dev-deploy.sh` 的 `env_profile()`(每个测试环境一套 `REGISTRY/DEV_HOST/DEV_KEY/DEV_DIR`,现有 `lingpu`、`yunyan`;新增环境加一段 case 并写进 `ENVS`)、`prod-deploy.sh` 的 `env_profile()`(每个生产环境一套 `REGISTRY/IMAGE_NAME/DEPLOY_HOST/DEPLOY_KEY/DEPLOY_DIR`,现有 `yunyan`、`lingpu`;新增环境加一段 case 并写进 `PROD_ENVS`); |
|
|
仓库账号 `admin` / 密码已写死;`DEPLOY_KEY` 默认 `/Users/liwei/Documents/key/yunyan-us.pem`(prod)。 |
|
|
仓库账号 `admin` / 密码已写死;`DEPLOY_KEY` 默认 `/Users/liwei/Documents/key/yunyan-us.pem`(prod)。 |
|
|
- ⚠️ 本目录脚本纳入 git,**公开仓库前务必清空** `*_HOST` 与 `REGISTRY_PASS`。 |
|
|
- ⚠️ 本目录脚本纳入 git,**公开仓库前务必清空** `*_HOST` 与 `REGISTRY_PASS`。 |
|
|
- **后端地址**:`.env` 的 `CONSOLE_BACKEND`,须指向同网络的 console 容器,默认 `http://console-a11:8080`。 |
|
|
- **后端地址**:`.env` 的 `CONSOLE_BACKEND`,须指向同网络的 console 容器,默认 `http://starpivot-console:8080`。 |
|
|
|
|
|
|
|
|
## 端口与反代 |
|
|
## 端口与反代 |
|
|
|
|
|
|
|
|
admin HTTP `3000`(容器内,只 `expose` 不 publish)。须由 **1panel 反代 / NPM** 把后台域名 |
|
|
admin HTTP `3000`(容器内,只 `expose` 不 publish)。须由 **1panel 反代 / NPM** 把后台域名 |
|
|
(如 `console.yunyanservice.xyz`)转发到 `yunyan-admin:3000`。admin 再在内部把 `/web/api`、`/console/api` |
|
|
(如 `console.yunyanservice.xyz`)转发到 `starpivot-admin:3000`。admin 再在内部把 `/web/api`、`/console/api` |
|
|
代理到 `console-a11:8080`,所以**单域名**即可跑通整套(浏览器 → 反代 → yunyan-admin → console-a11)。 |
|
|
代理到 `starpivot-console:8080`,所以**单域名**即可跑通整套(浏览器 → 反代 → starpivot-admin → starpivot-console)。 |
|
|
admin 与 console 须在同一 `DOCKER_NETWORK`(默认 `1panel-network`)。 |
|
|
admin 与 console 须在同一 `DOCKER_NETWORK`(默认 `1panel-network`)。 |
|
|
|