添加上游同步自动化工具
Some checks failed
CI / test (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
Security Scan / backend-security (push) Has been cancelled
Security Scan / frontend-security (push) Has been cancelled

新增工具脚本:
- scripts/sync-upstream.sh: 主同步脚本,自动从上游拉取并应用配置
- scripts/apply-branding.sh: 自动应用StarFireAPI品牌化修改
- scripts/apply-deploy-config.sh: 自动应用部署配置
- scripts/README.md: 工具使用说明

功能特性:
 自动备份当前分支
 从上游仓库拉取最新代码
 自动应用品牌化修改(Sub2API → StarFireAPI)
 自动应用部署配置(端口、Redis、镜像等)
 智能提示和确认
 支持回滚操作

使用方法:
chmod +x scripts/*.sh
./scripts/sync-upstream.sh

修改 .gitignore 以允许追踪自定义同步工具

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
huangzhenpc
2026-01-30 01:42:21 +08:00
parent e2c325505a
commit d46653b2c2
8 changed files with 711 additions and 1 deletions

3
.gitignore vendored
View File

@@ -118,7 +118,8 @@ tests
CLAUDE.md
AGENTS.md
.claude
scripts
# 构建脚本(忽略自动生成的构建脚本,但保留自定义同步工具)
# scripts
.code-review-state
openspec/
docs/

27
scripts/README.md Normal file
View File

@@ -0,0 +1,27 @@
# StarFireAPI 上游同步工具
自动从上游拉取最新代码并重新应用自定义配置的工具集。
## 快速使用
```bash
# 1. 赋予执行权限
chmod +x scripts/*.sh
# 2. 执行同步
./scripts/sync-upstream.sh
```
## 工具说明
- **sync-upstream.sh**: 主同步脚本,自动完成整个流程
- **apply-branding.sh**: 品牌化修改StarFireAPI
- **apply-deploy-config.sh**: 部署配置端口、Redis等
## 回滚
```bash
git reset --hard backup-YYYYMMDD-HHMMSS
```
详细说明见脚本内注释。

77
scripts/apply-branding.sh Normal file
View File

@@ -0,0 +1,77 @@
#!/bin/bash
# =============================================================================
# 品牌化修改脚本 - StarFireAPI
# =============================================================================
# 功能:自动应用 StarFireAPI 品牌化修改
# 用法:./scripts/apply-branding.sh
# =============================================================================
set -e
# 颜色输出
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE}[品牌化]${NC} $1"
}
log_success() {
echo -e "${GREEN}[品牌化]${NC} $1"
}
# 品牌配置
BRAND_NAME="StarFireAPI"
OFFICIAL_SITE="https://anthropic.edu.pl"
log_info "开始应用品牌化修改..."
# 1. 修改前端页面标题
log_info "修改页面标题..."
sed -i 's|<title>Sub2API - AI API Gateway</title>|<title>StarFireAPI - AI API Gateway</title>|g' frontend/index.html
# 2. 修改中文语言包
log_info "修改中文语言包..."
sed -i "s|viewOnGithub: '在 GitHub 上查看'|viewOnGithub: '查看文档'|g" frontend/src/i18n/locales/zh.ts
sed -i "s|title: 'Sub2API 安装向导'|title: 'StarFireAPI 安装向导'|g" frontend/src/i18n/locales/zh.ts
sed -i "s|description: '配置您的 Sub2API 实例'|description: '配置您的 StarFireAPI 实例'|g" frontend/src/i18n/locales/zh.ts
sed -i "s|github: 'GitHub'|github: '官网'|g" frontend/src/i18n/locales/zh.ts
sed -i "s|用于 Sub2API 用户登录|用于 StarFireAPI 用户登录|g" frontend/src/i18n/locales/zh.ts
sed -i "s|siteNamePlaceholder: 'Sub2API'|siteNamePlaceholder: 'StarFireAPI'|g" frontend/src/i18n/locales/zh.ts
sed -i "s|fromNamePlaceholder: 'Sub2API'|fromNamePlaceholder: 'StarFireAPI'|g" frontend/src/i18n/locales/zh.ts
sed -i "s|欢迎使用 Sub2API|欢迎使用 StarFireAPI|g" frontend/src/i18n/locales/zh.ts
sed -i "s|欢迎来到 Sub2API AI 服务平台|欢迎来到 StarFireAPI AI 服务平台|g" frontend/src/i18n/locales/zh.ts
# 3. 修改英文语言包
log_info "修改英文语言包..."
sed -i "s|viewOnGithub: 'View on GitHub'|viewOnGithub: 'View Documentation'|g" frontend/src/i18n/locales/en.ts
sed -i "s|title: 'Sub2API Setup'|title: 'StarFireAPI Setup'|g" frontend/src/i18n/locales/en.ts
sed -i "s|description: 'Configure your Sub2API instance'|description: 'Configure your StarFireAPI instance'|g" frontend/src/i18n/locales/en.ts
sed -i "s|github: 'GitHub'|github: 'Official Site'|g" frontend/src/i18n/locales/en.ts
sed -i "s|for Sub2API end-user login|for StarFireAPI end-user login|g" frontend/src/i18n/locales/en.ts
sed -i "s|siteNamePlaceholder: 'Sub2API'|siteNamePlaceholder: 'StarFireAPI'|g" frontend/src/i18n/locales/en.ts
sed -i "s|fromNamePlaceholder: 'Sub2API'|fromNamePlaceholder: 'StarFireAPI'|g" frontend/src/i18n/locales/en.ts
sed -i "s|Welcome to Sub2API|Welcome to StarFireAPI|g" frontend/src/i18n/locales/en.ts
sed -i "s|Welcome to the Sub2API AI service platform|Welcome to the StarFireAPI AI service platform|g" frontend/src/i18n/locales/en.ts
# 4. 修改 HomeView.vue
log_info "修改首页..."
sed -i "s|const siteName = computed(() => appStore.cachedPublicSettings?.site_name || appStore.siteName || 'Sub2API')|const siteName = computed(() => appStore.cachedPublicSettings?.site_name || appStore.siteName || 'StarFireAPI')|g" frontend/src/views/HomeView.vue
sed -i "s|const githubUrl = 'https://github.com/Wei-Shaw/sub2api'|const officialUrl = 'https://anthropic.edu.pl'|g" frontend/src/views/HomeView.vue
sed -i "s|:href=\"githubUrl\"|:href=\"officialUrl\"|g" frontend/src/views/HomeView.vue
sed -i "s|>GitHub</a>|>官网</a>|g" frontend/src/views/HomeView.vue
# 5. 修改注册和验证页面
log_info "修改注册和验证页面..."
sed -i "s|const siteName = ref<string>('Sub2API')|const siteName = ref<string>('StarFireAPI')|g" frontend/src/views/auth/RegisterView.vue
sed -i "s|const siteName = ref<string>('Sub2API')|const siteName = ref<string>('StarFireAPI')|g" frontend/src/views/auth/EmailVerifyView.vue
# 6. 修改 AppHeader.vue 中的 GitHub 链接
log_info "修改导航栏链接..."
# 这个需要更复杂的替换,使用 perl 或手动处理
if command -v perl &> /dev/null; then
perl -i -p0e 's|href="https://github.com/Wei-Shaw/sub2api"[^>]*>.*?<path[^>]*fill-rule="evenodd"[^>]*clip-rule="evenodd"[^>]*d="[^"]*"[^>]*/>\s*</svg>|href="https://anthropic.edu.pl"\n target="_blank"\n rel="noopener noreferrer"\n @click="closeDropdown"\n class="dropdown-item"\n >\n <svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24">\n <path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/>\n </svg>|gs' frontend/src/components/layout/AppHeader.vue 2>/dev/null || log_info "AppHeader.vue 需要手动调整 GitHub 链接"
fi
log_success "品牌化修改应用完成"

View File

@@ -0,0 +1,108 @@
#!/bin/bash
# =============================================================================
# 部署配置脚本 - StarFireAPI
# =============================================================================
# 功能:自动应用部署相关的配置修改
# 用法:./scripts/apply-deploy-config.sh
# =============================================================================
set -e
# 颜色输出
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE}[部署配置]${NC} $1"
}
log_success() {
echo -e "${GREEN}[部署配置]${NC} $1"
}
# 部署配置
DOCKER_IMAGE="starfireapi:latest"
SERVER_PORT="6580"
REDIS_HOST="172.18.0.2"
REDIS_PORT="6379"
REDIS_PASSWORD="redis_JCHeKT"
log_info "开始应用部署配置..."
# 1. 修改 docker-compose.yml
log_info "修改 docker-compose.yml..."
# 修改镜像名称
sed -i 's|image: weishaw/sub2api:latest|image: starfireapi:latest|g' deploy/docker-compose.yml
# 修改默认端口
sed -i 's|${SERVER_PORT:-8080}|${SERVER_PORT:-6580}|g' deploy/docker-compose.yml
# 修改 Redis 配置为外部 Redis
sed -i 's|REDIS_HOST=redis|REDIS_HOST=${REDIS_HOST:-172.18.0.2}|g' deploy/docker-compose.yml
sed -i 's|- REDIS_PORT=6379|- REDIS_PORT=${REDIS_PORT:-6379}|g' deploy/docker-compose.yml
sed -i 's|- REDIS_PASSWORD=${REDIS_PASSWORD:-}|- REDIS_PASSWORD=${REDIS_PASSWORD:-redis_JCHeKT}|g' deploy/docker-compose.yml
# 移除 Redis 的 depends_on
sed -i '/redis:/,/condition: service_healthy/d' deploy/docker-compose.yml
# 禁用内置 Redis添加 profiles
sed -i '/^ redis:/a\ profiles:\n - disabled' deploy/docker-compose.yml
# 移除 TOTP 配置(如果存在)
sed -i '/TOTP_ENCRYPTION_KEY/,+5d' deploy/docker-compose.yml
# 2. 修改 .env.example
log_info "修改 .env.example..."
# 修改默认端口
sed -i 's|SERVER_PORT=8080|SERVER_PORT=6580|g' deploy/.env.example
# 修改 Redis 配置
sed -i 's|# Redis Configuration|# Redis Configuration (External Redis)|g' deploy/.env.example
sed -i 's|REDIS_HOST=redis|REDIS_HOST=172.18.0.2|g' deploy/.env.example
sed -i '/^REDIS_HOST=/a\REDIS_PORT=6379' deploy/.env.example
sed -i 's|REDIS_PASSWORD=|REDIS_PASSWORD=redis_JCHeKT|g' deploy/.env.example
# 3. 添加部署文档
log_info "添加部署文档..."
if [[ ! -f "DEPLOY_SERVER.md" ]]; then
cat > DEPLOY_SERVER.md << 'DEPLOY_DOC'
# StarFireAPI 服务器部署文档
## 快速部署
```bash
# 1. 克隆代码
git clone https://git.586vip.cn/oadmin/xinghuoapi.git
cd xinghuoapi
# 2. 配置环境变量
cd deploy
cp .env.example .env
# 编辑 .env 设置密码等配置
# 3. 构建镜像
cd ..
docker build -t starfireapi:latest .
# 4. 启动服务
cd deploy
docker compose up -d
# 5. 查看日志
docker compose logs -f sub2api
```
## 配置说明
- **服务端口**: 6580
- **外部Redis**: 172.18.0.2:6379
- **镜像名称**: starfireapi:latest
详细配置请参考 deploy/.env.example
DEPLOY_DOC
fi
log_success "部署配置应用完成"

View File

@@ -0,0 +1,65 @@
#!/bin/bash
# StarFireAPI 数据库备份脚本
# 用途:备份 PostgreSQL 数据库
# 使用bash backup_database.sh
# 颜色定义
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"
BACKUP_DIR="$PROJECT_DIR/backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/starfireapi_backup_${DATE}.sql.gz"
echo -e "${BLUE}=========================================="
echo "💾 StarFireAPI 数据库备份"
echo -e "==========================================${NC}"
echo ""
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 检查容器是否运行
cd "$PROJECT_DIR/deploy"
if ! docker-compose ps | grep -q "postgres.*Up"; then
echo -e "${RED}❌ PostgreSQL 容器未运行${NC}"
exit 1
fi
echo -e "${YELLOW}📦 开始备份数据库...${NC}"
echo "备份文件: $BACKUP_FILE"
echo ""
# 执行备份
docker exec sub2api-postgres pg_dump -U sub2api sub2api | gzip > "$BACKUP_FILE"
if [ $? -eq 0 ]; then
BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
echo -e "${GREEN}✓ 备份成功!${NC}"
echo "文件大小: $BACKUP_SIZE"
echo "保存位置: $BACKUP_FILE"
echo ""
# 清理旧备份(保留最近 7 天)
echo -e "${YELLOW}🧹 清理旧备份(保留最近 7 天)...${NC}"
find "$BACKUP_DIR" -name "starfireapi_backup_*.sql.gz" -mtime +7 -delete
# 显示所有备份
echo -e "${BLUE}📋 现有备份列表:${NC}"
ls -lh "$BACKUP_DIR"/starfireapi_backup_*.sql.gz 2>/dev/null || echo "无备份文件"
else
echo -e "${RED}❌ 备份失败${NC}"
exit 1
fi
echo ""
echo -e "${BLUE}=========================================="
echo "💡 恢复数据库命令"
echo -e "==========================================${NC}"
echo "gunzip < $BACKUP_FILE | docker exec -i sub2api-postgres psql -U sub2api sub2api"
echo ""

110
scripts/check_status.sh Normal file
View File

@@ -0,0 +1,110 @@
#!/bin/bash
# StarFireAPI 服务状态检查脚本
# 用途:快速检查服务运行状态和健康度
# 使用bash check_status.sh
# 颜色定义
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/deploy"
echo -e "${BLUE}=========================================="
echo "📊 StarFireAPI 服务状态检查"
echo -e "==========================================${NC}"
echo ""
# 检查目录
if [ ! -d "$PROJECT_DIR" ]; then
echo -e "${RED}❌ 错误: 项目目录 $PROJECT_DIR 不存在${NC}"
exit 1
fi
cd "$PROJECT_DIR"
# 1. 容器状态
echo -e "${YELLOW}🐳 容器状态:${NC}"
docker-compose ps
echo ""
# 2. 服务健康检查
echo -e "${YELLOW}🏥 服务健康检查:${NC}"
# 检查 sub2api 容器
if docker-compose ps | grep -q "sub2api.*Up"; then
echo -e "${GREEN}✓ sub2api 容器运行中${NC}"
# 检查端口
if netstat -tlnp 2>/dev/null | grep -q ":6580"; then
echo -e "${GREEN}✓ 端口 6580 已监听${NC}"
else
echo -e "${RED}✗ 端口 6580 未监听${NC}"
fi
# 检查 HTTP 响应
if curl -s -o /dev/null -w "%{http_code}" http://localhost:6580 | grep -q "200\|301\|302"; then
echo -e "${GREEN}✓ HTTP 服务正常响应${NC}"
else
echo -e "${RED}✗ HTTP 服务无响应${NC}"
fi
else
echo -e "${RED}✗ sub2api 容器未运行${NC}"
fi
# 检查 postgres 容器
if docker-compose ps | grep -q "postgres.*Up"; then
echo -e "${GREEN}✓ PostgreSQL 容器运行中${NC}"
else
echo -e "${RED}✗ PostgreSQL 容器未运行${NC}"
fi
echo ""
# 3. 资源使用情况
echo -e "${YELLOW}💾 资源使用情况:${NC}"
docker stats --no-stream sub2api sub2api-postgres 2>/dev/null || echo "无法获取资源使用情况"
echo ""
# 4. 最近日志(最后 20 行)
echo -e "${YELLOW}📝 最近日志 (最后 20 行):${NC}"
docker-compose logs --tail 20 sub2api
echo ""
# 5. 错误日志检查
echo -e "${YELLOW}⚠️ 错误日志检查:${NC}"
ERROR_COUNT=$(docker-compose logs --tail 100 sub2api 2>/dev/null | grep -i "error\|fatal\|panic" | wc -l)
if [ "$ERROR_COUNT" -gt 0 ]; then
echo -e "${RED}发现 $ERROR_COUNT 条错误日志${NC}"
echo "最近的错误:"
docker-compose logs --tail 100 sub2api | grep -i "error\|fatal\|panic" | tail -5
else
echo -e "${GREEN}✓ 未发现错误日志${NC}"
fi
echo ""
# 6. 版本信息
echo -e "${YELLOW}📌 版本信息:${NC}"
VERSION=$(cat ../backend/cmd/server/VERSION 2>/dev/null || echo "未知")
echo "当前版本: $VERSION"
echo "最新提交: $(cd .. && git log --oneline -1)"
echo ""
# 7. 使用的镜像
echo -e "${YELLOW}🖼️ 使用的镜像:${NC}"
docker-compose ps -q sub2api | xargs docker inspect --format='{{.Config.Image}}' 2>/dev/null || echo "无法获取镜像信息"
echo ""
# 8. 快速操作提示
echo -e "${BLUE}=========================================="
echo "🔧 快速操作命令"
echo -e "==========================================${NC}"
echo "查看实时日志: docker-compose logs -f sub2api"
echo "重启服务: docker-compose restart sub2api"
echo "停止服务: docker-compose down"
echo "启动服务: docker-compose up -d"
echo "进入容器: docker exec -it sub2api sh"
echo ""

201
scripts/sync-upstream.sh Normal file
View File

@@ -0,0 +1,201 @@
#!/bin/bash
# =============================================================================
# 上游同步脚本 - StarFireAPI
# =============================================================================
# 功能:从上游 sub2api 仓库拉取最新代码并重新应用自定义配置
# 用法:./scripts/sync-upstream.sh
# =============================================================================
set -e # 遇到错误立即退出
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 配置
UPSTREAM_REPO="https://github.com/Wei-Shaw/sub2api.git"
UPSTREAM_BRANCH="main"
BACKUP_BRANCH_PREFIX="backup"
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 获取当前分支名
get_current_branch() {
git rev-parse --abbrev-ref HEAD
}
# 获取当前提交哈希
get_current_commit() {
git rev-parse HEAD
}
# 主函数
main() {
log_info "=========================================="
log_info "StarFireAPI 上游同步工具"
log_info "=========================================="
echo ""
# 1. 检查是否在 git 仓库中
if ! git rev-parse --git-dir > /dev/null 2>&1; then
log_error "当前目录不是 Git 仓库"
exit 1
fi
# 2. 检查工作目录是否干净
if [[ -n $(git status -s) ]]; then
log_warning "工作目录有未提交的修改"
read -p "是否继续?未提交的修改可能丢失 (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "已取消操作"
exit 0
fi
fi
CURRENT_BRANCH=$(get_current_branch)
CURRENT_COMMIT=$(get_current_commit)
log_info "当前分支: $CURRENT_BRANCH"
log_info "当前提交: $CURRENT_COMMIT"
echo ""
# 3. 创建备份分支
BACKUP_BRANCH="${BACKUP_BRANCH_PREFIX}-$(date +%Y%m%d-%H%M%S)"
log_info "创建备份分支: $BACKUP_BRANCH"
git branch $BACKUP_BRANCH
log_success "备份分支已创建"
echo ""
# 4. 检查并添加上游仓库
log_info "配置上游仓库..."
if git remote get-url upstream > /dev/null 2>&1; then
CURRENT_UPSTREAM=$(git remote get-url upstream)
if [[ "$CURRENT_UPSTREAM" != "$UPSTREAM_REPO" ]]; then
log_warning "上游仓库地址不匹配,正在更新..."
git remote set-url upstream $UPSTREAM_REPO
fi
else
log_info "添加上游仓库: $UPSTREAM_REPO"
git remote add upstream $UPSTREAM_REPO
fi
log_success "上游仓库配置完成"
echo ""
# 5. 获取上游最新代码
log_info "从上游获取最新代码..."
git fetch upstream
log_success "上游代码获取完成"
echo ""
# 6. 查看上游最新版本
UPSTREAM_LATEST=$(git rev-parse upstream/$UPSTREAM_BRANCH)
UPSTREAM_SHORT=$(git rev-parse --short upstream/$UPSTREAM_BRANCH)
UPSTREAM_MESSAGE=$(git log -1 --pretty=format:"%s" upstream/$UPSTREAM_BRANCH)
log_info "上游最新版本:"
echo " 提交: $UPSTREAM_SHORT"
echo " 消息: $UPSTREAM_MESSAGE"
echo ""
# 7. 确认是否继续
read -p "是否重置到上游最新版本并重新应用自定义配置?(y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "已取消操作"
log_info "备份分支已保留: $BACKUP_BRANCH"
exit 0
fi
# 8. 重置到上游最新版本
log_info "重置到上游最新版本..."
git reset --hard upstream/$UPSTREAM_BRANCH
log_success "已重置到上游最新版本"
echo ""
# 9. 应用自定义配置
log_info "应用自定义配置..."
# 调用品牌化脚本
if [[ -f "$(dirname "$0")/apply-branding.sh" ]]; then
bash "$(dirname "$0")/apply-branding.sh"
else
log_warning "品牌化脚本不存在,跳过"
fi
# 调用部署配置脚本
if [[ -f "$(dirname "$0")/apply-deploy-config.sh" ]]; then
bash "$(dirname "$0")/apply-deploy-config.sh"
else
log_warning "部署配置脚本不存在,跳过"
fi
log_success "自定义配置应用完成"
echo ""
# 10. 提交修改
if [[ -n $(git status -s) ]]; then
log_info "提交自定义配置..."
git add -A
COMMIT_MESSAGE="同步上游并重新应用自定义配置
上游版本: $UPSTREAM_SHORT
上游消息: $UPSTREAM_MESSAGE
同步时间: $(date '+%Y-%m-%d %H:%M:%S')
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
git commit -m "$COMMIT_MESSAGE"
log_success "修改已提交"
echo ""
else
log_info "没有需要提交的修改"
echo ""
fi
# 11. 显示摘要
log_success "=========================================="
log_success "同步完成!"
log_success "=========================================="
echo ""
echo "备份分支: $BACKUP_BRANCH"
echo "上游版本: $UPSTREAM_SHORT"
echo "当前提交: $(get_current_commit | cut -c1-7)"
echo ""
# 12. 询问是否推送
read -p "是否推送到远程仓库?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "推送到远程仓库..."
git push origin $CURRENT_BRANCH --force
log_success "推送完成"
else
log_info "已跳过推送,请稍后手动执行: git push origin $CURRENT_BRANCH --force"
fi
echo ""
log_info "如需回滚,请执行: git reset --hard $BACKUP_BRANCH"
}
# 执行主函数
main "$@"

121
scripts/update_server.sh Normal file
View File

@@ -0,0 +1,121 @@
#!/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