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;