#!/bin/bash # 生产环境更新脚本 # 用途:拉取最新镜像并重启服务 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" cd "$PROJECT_ROOT" # 检查参数 IMAGE_TAG=${1:-latest} if [ -z "$IMAGE_TAG" ]; then echo "用法: $0 [IMAGE_TAG]" echo "示例: $0 latest" echo "示例: $0 v1.0.0" exit 1 fi echo "=== 更新生产服务 ===" echo "镜像标签: $IMAGE_TAG" echo "" # 检查 .env.prod 文件 if [ ! -f ".env.prod" ]; then echo "错误: 未找到 .env.prod 文件" exit 1 fi # 设置镜像标签 export IMAGE_TAG # 登录到容器镜像仓库(如果需要) # docker login ghcr.io -u $GITHUB_USERNAME -p $GITHUB_TOKEN # 拉取最新镜像 echo "[1/3] 拉取最新镜像..." docker-compose -f docker-compose.prod.yml --env-file .env.prod pull # 停止旧服务 echo "" echo "[2/3] 停止旧服务..." docker-compose -f docker-compose.prod.yml --env-file .env.prod down # 启动新服务 echo "" echo "[3/3] 启动新服务..." docker-compose -f docker-compose.prod.yml --env-file .env.prod up -d echo "" echo "等待服务启动..." sleep 5 # 检查服务状态 echo "" echo "服务状态:" docker-compose -f docker-compose.prod.yml ps echo "" echo "=== 更新完成 ===" echo "" echo "查看日志: docker-compose -f docker-compose.prod.yml logs -f" echo "检查健康: curl http://localhost/api/health"