#!/bin/bash # StarFireAPI 服务器一键更新脚本 # 用途:在服务器上快速更新到最新版本 # 使用:bash update_server.sh set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 项目目录 PROJECT_DIR="/opt/xinghuoapi" echo -e "${BLUE}==========================================" echo "🚀 StarFireAPI 服务器更新脚本" echo -e "==========================================${NC}" echo "" # 检查是否在正确的目录 if [ ! -d "$PROJECT_DIR" ]; then echo -e "${RED}❌ 错误: 项目目录 $PROJECT_DIR 不存在${NC}" echo "请先克隆代码到服务器" exit 1 fi cd "$PROJECT_DIR" # 步骤 1: 检查当前状态 echo -e "${YELLOW}📋 步骤 1/6: 检查当前状态...${NC}" echo "当前分支: $(git branch --show-current)" echo "当前版本: $(cat backend/cmd/server/VERSION 2>/dev/null || echo '未知')" echo "最新提交: $(git log --oneline -1)" echo "" # 步骤 2: 拉取最新代码 echo -e "${YELLOW}📥 步骤 2/6: 拉取最新代码...${NC}" git pull origin main echo -e "${GREEN}✓ 代码更新完成${NC}" echo "" # 步骤 3: 显示更新内容 echo -e "${YELLOW}📝 步骤 3/6: 查看更新内容...${NC}" echo "新版本: $(cat backend/cmd/server/VERSION)" echo "最近 3 次提交:" git log --oneline -3 echo "" # 步骤 4: 构建本地镜像 echo -e "${YELLOW}🔨 步骤 4/6: 构建本地镜像 (starfireapi:latest)...${NC}" echo "这可能需要 3-5 分钟,请耐心等待..." docker build -t starfireapi:latest . || { echo -e "${RED}❌ 镜像构建失败${NC}" exit 1 } echo -e "${GREEN}✓ 镜像构建完成${NC}" echo "" # 步骤 5: 更新 docker-compose.yml echo -e "${YELLOW}⚙️ 步骤 5/6: 更新 docker-compose.yml...${NC}" cd deploy # 备份原文件 if [ -f docker-compose.yml ]; then cp docker-compose.yml docker-compose.yml.bak.$(date +%Y%m%d_%H%M%S) echo "已备份 docker-compose.yml" fi # 修改镜像名称 sed -i 's|image: weishaw/sub2api:latest|image: starfireapi:latest|g' docker-compose.yml # 验证修改 if grep -q "image: starfireapi:latest" docker-compose.yml; then echo -e "${GREEN}✓ docker-compose.yml 已更新为使用本地镜像${NC}" else echo -e "${YELLOW}⚠️ 警告: docker-compose.yml 可能已经使用本地镜像${NC}" fi echo "" # 步骤 6: 重启服务 echo -e "${YELLOW}🔄 步骤 6/6: 重启服务...${NC}" docker-compose down docker-compose up -d # 等待服务启动 echo "等待服务启动..." sleep 10 # 检查服务状态 echo "" echo -e "${BLUE}==========================================" echo "✅ 更新完成!" echo -e "==========================================${NC}" echo "" # 显示服务状态 echo -e "${GREEN}📊 服务状态:${NC}" docker-compose ps echo "" # 显示访问信息 echo -e "${GREEN}🌐 访问信息:${NC}" echo " 地址: http://107.175.54.36:6580" echo " 管理员: maticarmy@gmail.com" echo " 密码: oadmin@123" echo "" # 显示日志命令 echo -e "${BLUE}📝 查看日志:${NC}" echo " docker-compose logs -f sub2api" echo "" # 询问是否查看日志 read -p "是否查看实时日志?(y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then docker-compose logs -f sub2api fi