#!/bin/bash # FA3-Datafetch 自动更新脚本 # 用于在远程服务器上拉取最新代码并重新部署 Docker 容器 set -e # 固定使用 sudo DOCKER="sudo docker" SUDO="sudo" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} FA3-Datafetch 自动更新脚本${NC}" echo -e "${GREEN}========================================${NC}" # 切换到脚本所在目录 cd "$(dirname "$0")" # 1. 拉取最新代码 echo -e "\n${YELLOW}[1/3] 拉取最新代码...${NC}" git fetch origin git pull origin main echo -e "${GREEN}✓ 代码更新完成${NC}" # 2. 重新构建 Docker 镜像 echo -e "\n${YELLOW}[2/3] 重新构建 Docker 镜像...${NC}" echo -e " 这可能需要几分钟时间..." $DOCKER build --network=host -t fa3-datafetch . echo -e "${GREEN}✓ Docker 镜像构建完成${NC}" # 3. 启动新容器 echo -e "\n${YELLOW}[3/3] 启动新容器...${NC}" ./docker-run.sh echo -e "${GREEN}✓ 新容器已启动${NC}" # 等待容器启动并检查健康状态 echo -e "\n${YELLOW}等待容器启动...${NC}" sleep 5 # 检查容器状态 if $DOCKER ps --format '{{.Names}}' | grep -q "^fa3-app$"; then echo -e "${GREEN}✓ 容器运行中${NC}" # 显示容器日志(最后几行) echo -e "\n${YELLOW}最新日志:${NC}" $DOCKER logs fa3-app --tail 10 # 检查健康状态 HEALTH_STATUS=$($DOCKER inspect fa3-app --format='{{.State.Health.Status}}' 2>/dev/null || echo "checking") echo -e "\n健康状态: ${GREEN}$HEALTH_STATUS${NC}" else echo -e "${RED}✗ 容器启动失败${NC}" echo -e "查看错误日志: $DOCKER logs fa3-app" exit 1 fi # 清理未使用的镜像 echo -e "\n${YELLOW}清理旧镜像...${NC}" $DOCKER image prune -f echo -e "${GREEN}✓ 清理完成${NC}" echo -e "\n${GREEN}========================================${NC}" echo -e "${GREEN} 更新完成!${NC}" echo -e "${GREEN}========================================${NC}" echo -e "查看日志: $DOCKER logs -f fa3-app" echo -e "进入容器: $DOCKER exec -it fa3-app sh"