From f516ff1187124e8e1312db7b6000bff313b11d2f Mon Sep 17 00:00:00 2001 From: iammm0 Date: Wed, 28 Jan 2026 16:15:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker-build-deploy.yml | 34 +++++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docker-build-deploy.yml b/.github/workflows/docker-build-deploy.yml index 82ffecf..e725165 100644 --- a/.github/workflows/docker-build-deploy.yml +++ b/.github/workflows/docker-build-deploy.yml @@ -123,14 +123,30 @@ jobs: ssh -p $SSH_PORT $SSH_USER@$SSH_HOST \ "mkdir -p $COMPOSE_DIR/api" - # 复制 docker-compose.yml 到远程服务器 + # 第一步:先停止并删除旧容器(使用服务器上现有的 docker-compose.yml) + echo "停止并删除旧容器..." + ssh -p $SSH_PORT $SSH_USER@$SSH_HOST " + cd $COMPOSE_DIR/api 2>/dev/null || exit 0 + if [ -f '$COMPOSE_FILE' ]; then + echo '使用旧配置停止容器...' + docker-compose -f '$COMPOSE_FILE' down --remove-orphans || true + fi + + # 清理可能残留的容器 + echo '清理残留容器...' + docker stop life-echo-api-prod life-echo-celery-worker life-echo-postgres life-echo-redis 2>/dev/null || true + docker rm -f life-echo-api-prod life-echo-celery-worker life-echo-postgres life-echo-redis 2>/dev/null || true + " + + # 第二步:复制新的配置文件到远程服务器 + echo "复制配置文件..." scp -P $SSH_PORT ./api/$COMPOSE_FILE $SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/ - # 复制 .env.production 到远程服务器 + # 复制 .env.production 到远程服务器(重命名为 .env.prod) echo "复制 .env.production 文件..." - scp -P $SSH_PORT ./api/.env.production $SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/ + scp -P $SSH_PORT ./api/.env.production $SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/.env.prod - # 在远程服务器上执行部署操作 + # 第三步:在远程服务器上执行部署操作 ssh -p $SSH_PORT $SSH_USER@$SSH_HOST " set -e cd $COMPOSE_DIR/api @@ -138,22 +154,22 @@ jobs: echo '拉取最新镜像: $IMAGE_TAG' docker pull '$IMAGE_TAG' || true - echo '停止现有容器...' - docker-compose -f '$COMPOSE_FILE' down || true - - echo '更新 docker-compose.yml 中的镜像标签...' + 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 '等待容器启动...' - sleep 10 + sleep 15 echo '清理旧镜像...' docker image prune -f || true