fix(deploy): 修复数据库初始化复用旧镜像

This commit is contained in:
Cheng Zhou
2026-07-01 11:15:55 +08:00
parent 9cac75e85c
commit 5ee84c97e8
4 changed files with 13 additions and 7 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
## 生产部署 ## 生产部署
- 生产入口:`docker-compose.yaml` - 生产入口:`docker-compose.yaml`
- 初始化方式:`docker compose run --rm backend-init` - 初始化方式:`docker compose run --rm --build backend-init`
- 启动方式:`docker compose up -d --build` - 启动方式:`docker compose up -d --build`
- 运行拓扑:`nginx``backend``db` - 运行拓扑:`nginx``backend``db`
- 对外入口:`nginx` 提供前端静态资源,并同域反代后端 API - 对外入口:`nginx` 提供前端静态资源,并同域反代后端 API
@@ -149,7 +149,7 @@ bash scripts/install.sh release --base-url https://ctms.example.com
1. 检查 docker、docker compose、openssl、curl。 1. 检查 docker、docker compose、openssl、curl。
2. 检查 .env;已存在则保留不改,不存在则新建。 2. 检查 .env;已存在则保留不改,不存在则新建。
3. 新建 main/release 的 .env 时自动生成 JWT 和 RSA 私钥。 3. 新建 main/release 的 .env 时自动生成 JWT 和 RSA 私钥。
4. main/release 先执行 backend-init。 4. main/release 先构建并执行 backend-init,确保数据库迁移使用当前代码中的 Alembic revision
5. 启动容器;默认执行 docker compose up -d --build--skip-build 时执行 docker compose up -d。 5. 启动容器;默认执行 docker compose up -d --build--skip-build 时执行 docker compose up -d。
6. 执行 docker compose run --rm backend python -m alembic upgrade head。 6. 执行 docker compose run --rm backend python -m alembic upgrade head。
7. 检查容器状态、后端环境、/health、/api/v1/auth/login-key。 7. 检查容器状态、后端环境、/health、/api/v1/auth/login-key。
@@ -333,7 +333,7 @@ LOGIN_RSA_PRIVATE_KEY: '-----BEGIN PRIVATE KEY-----...'
### 5. 初始化数据库 ### 5. 初始化数据库
```bash ```bash
docker compose run --rm backend-init docker compose run --rm --build backend-init
``` ```
### 6. 构建镜像并启动 ### 6. 构建镜像并启动
@@ -521,7 +521,7 @@ LOGIN_RSA_PRIVATE_KEY: '-----BEGIN PRIVATE KEY-----...'
### 6. 初始化数据库 ### 6. 初始化数据库
```bash ```bash
docker compose run --rm backend-init docker compose run --rm --build backend-init
``` ```
确认命令成功后再启动服务。 确认命令成功后再启动服务。
+2 -2
View File
@@ -5,14 +5,14 @@
最后更新: `2026-03-30` 最后更新: `2026-03-30`
## 1. 构建与迁移 ## 1. 构建与迁移
- [ ] `docker compose run --rm backend-init` - [ ] `docker compose run --rm --build backend-init`
- [ ] `cd backend && python3 -m compileall app scripts` - [ ] `cd backend && python3 -m compileall app scripts`
- [ ] `cd frontend && npm run build` - [ ] `cd frontend && npm run build`
## 1.1 容器构建校验 ## 1.1 容器构建校验
- [ ] `docker compose config` 渲染成功 - [ ] `docker compose config` 渲染成功
- [ ] `docker compose build backend frontend` 成功 - [ ] `docker compose build backend frontend` 成功
- [ ] `docker compose run --rm backend-init` 成功 - [ ] `docker compose run --rm --build backend-init` 成功
## 2. 接口与权限回归 ## 2. 接口与权限回归
- [ ] ADMIN 账号可 `GET/PUT/PUBLISH/IMPORT-EXCEL/EXPORT-EXCEL` - [ ] ADMIN 账号可 `GET/PUT/PUBLISH/IMPORT-EXCEL/EXPORT-EXCEL`
+7 -1
View File
@@ -325,7 +325,13 @@ run_compose_config() {
run_backend_init() { run_backend_init() {
step "初始化数据库与管理员账号" step "初始化数据库与管理员账号"
ctms_run_quiet "运行 backend-init 容器" -- compose_cmd run --rm backend-init if [[ "$SKIP_BUILD" -eq 1 ]]; then
ctms_run_quiet "运行 backend-init 容器" -- compose_cmd run --rm backend-init
else
# backend-init 是 profile 服务,不会被后续 `compose up --build` 自动构建。
# 更新部署时必须先基于当前代码重建,否则会复用旧镜像并缺失新 Alembic revision。
CTMS_LIVE_OUTPUT=1 ctms_run_quiet "构建并运行 backend-init 容器" -- compose_cmd run --rm --build backend-init
fi
} }
run_build_and_start() { run_build_and_start() {