From 4a331428f7c052d4c062fd8d1105c40c672605ab Mon Sep 17 00:00:00 2001 From: penghanyuan Date: Sun, 1 Mar 2026 11:12:04 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=92=8C=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=81?= =?UTF-8?q?=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 GitHub Actions 工作流,调整部署步骤,先启动数据库服务以确保迁移顺利进行。 - 新增启动所有服务的步骤,确保在迁移完成后启动全部服务。 - 在 SQL 脚本中添加锁定超时设置,提升数据库操作的稳定性。 --- .github/workflows/docker-build-deploy.yml | 51 ++++++++++++++-------- api/migrations/add_user_profile_fields.sql | 2 + 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/.github/workflows/docker-build-deploy.yml b/.github/workflows/docker-build-deploy.yml index ea9b681..bbb044f 100644 --- a/.github/workflows/docker-build-deploy.yml +++ b/.github/workflows/docker-build-deploy.yml @@ -168,7 +168,7 @@ jobs: scp -P $SSH_PORT ./api/.env.production $SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/.env.prod scp -P $SSH_PORT ./api/.env.production $SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/.env.production - # 第三步:在远程服务器上执行部署操作 + # 第三步:准备镜像和配置 ssh -p $SSH_PORT $SSH_USER@$SSH_HOST " set -e cd $COMPOSE_DIR/api @@ -179,27 +179,15 @@ jobs: echo '备份并更新 docker-compose.yml 中的镜像标签...' cp '$COMPOSE_FILE' '${COMPOSE_FILE}.bak' - # 更新所有包含 lifecho-api 或 life-echo-api 的 image 行 sed -i.tmp 's|image:.*lifecho-api.*|image: $IMAGE_TAG|g' '$COMPOSE_FILE' sed -i.tmp 's|image:.*life-echo-api.*|image: $IMAGE_TAG|g' '$COMPOSE_FILE' - - # 清理临时文件 rm -f '${COMPOSE_FILE}.tmp' 2>/dev/null || true - echo '启动新容器...' - docker-compose -f '$COMPOSE_FILE' pull || true - docker-compose -f '$COMPOSE_FILE' up -d + echo '先只启动数据库(确保迁移不受 API 连接干扰)...' + docker-compose -f '$COMPOSE_FILE' up -d postgres redis - echo '等待容器启动...' - sleep 15 - - echo '清理旧镜像...' - docker image prune -f || true - - echo '部署完成!' - - echo '检查容器状态...' - docker-compose -f '$COMPOSE_FILE' ps + echo '等待数据库就绪...' + sleep 10 " - name: Run database migration @@ -230,8 +218,37 @@ jobs: "docker exec -i life-echo-postgres psql -U $DB_USER -d $DB_NAME" \ < api/migrations/add_user_profile_fields.sql + echo "修正章节排序索引 v2..." + ssh -p $SSH_PORT $SSH_USER@$SSH_HOST \ + "docker exec -i life-echo-postgres psql -U $DB_USER -d $DB_NAME" \ + < api/migrations/fix_chapter_order_index_v2.sql + echo "数据库迁移完成" + - name: Start all services + env: + SSH_USER: ${{ secrets.SSH_USER }} + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT || 22 }} + COMPOSE_DIR: ${{ secrets.DEPLOY_PATH || '/opt/life-echo' }} + COMPOSE_FILE: docker-compose.yml + run: | + echo "迁移完成,启动全部服务..." + ssh -p $SSH_PORT $SSH_USER@$SSH_HOST " + set -e + cd $COMPOSE_DIR/api + docker-compose -f '$COMPOSE_FILE' up -d + + echo '等待服务启动...' + sleep 15 + + echo '清理旧镜像...' + docker image prune -f || true + + echo '部署完成!' + docker-compose -f '$COMPOSE_FILE' ps + " + - name: Verify deployment env: SSH_USER: ${{ secrets.SSH_USER }} diff --git a/api/migrations/add_user_profile_fields.sql b/api/migrations/add_user_profile_fields.sql index 85e7274..1472dcc 100644 --- a/api/migrations/add_user_profile_fields.sql +++ b/api/migrations/add_user_profile_fields.sql @@ -1,5 +1,7 @@ -- 添加用户基础资料字段(出生年份、出生地、成长地、职业) +SET lock_timeout = '5s'; ALTER TABLE users ADD COLUMN IF NOT EXISTS birth_year INTEGER; ALTER TABLE users ADD COLUMN IF NOT EXISTS birth_place VARCHAR; ALTER TABLE users ADD COLUMN IF NOT EXISTS grew_up_place VARCHAR; ALTER TABLE users ADD COLUMN IF NOT EXISTS occupation VARCHAR; +RESET lock_timeout;