diff --git a/.gitignore b/.gitignore
index 48172982..3feae83f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -118,7 +118,8 @@ tests
CLAUDE.md
AGENTS.md
.claude
-scripts
+# 构建脚本(忽略自动生成的构建脚本,但保留自定义同步工具)
+# scripts
.code-review-state
openspec/
docs/
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 00000000..2b13c440
--- /dev/null
+++ b/scripts/README.md
@@ -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
+```
+
+详细说明见脚本内注释。
diff --git a/scripts/apply-branding.sh b/scripts/apply-branding.sh
new file mode 100644
index 00000000..7b43fed3
--- /dev/null
+++ b/scripts/apply-branding.sh
@@ -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|
Sub2API - AI API Gateway|StarFireAPI - AI API Gateway|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|>官网|g" frontend/src/views/HomeView.vue
+
+# 5. 修改注册和验证页面
+log_info "修改注册和验证页面..."
+sed -i "s|const siteName = ref('Sub2API')|const siteName = ref('StarFireAPI')|g" frontend/src/views/auth/RegisterView.vue
+sed -i "s|const siteName = ref('Sub2API')|const siteName = ref('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"[^>]*>.*?]*fill-rule="evenodd"[^>]*clip-rule="evenodd"[^>]*d="[^"]*"[^>]*/>\s*|href="https://anthropic.edu.pl"\n target="_blank"\n rel="noopener noreferrer"\n @click="closeDropdown"\n class="dropdown-item"\n >\n |gs' frontend/src/components/layout/AppHeader.vue 2>/dev/null || log_info "AppHeader.vue 需要手动调整 GitHub 链接"
+fi
+
+log_success "品牌化修改应用完成"
diff --git a/scripts/apply-deploy-config.sh b/scripts/apply-deploy-config.sh
new file mode 100644
index 00000000..a6015d07
--- /dev/null
+++ b/scripts/apply-deploy-config.sh
@@ -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 "部署配置应用完成"
diff --git a/scripts/backup_database.sh b/scripts/backup_database.sh
new file mode 100644
index 00000000..a3aa1cbc
--- /dev/null
+++ b/scripts/backup_database.sh
@@ -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 ""
diff --git a/scripts/check_status.sh b/scripts/check_status.sh
new file mode 100644
index 00000000..b2ee322b
--- /dev/null
+++ b/scripts/check_status.sh
@@ -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 ""
diff --git a/scripts/sync-upstream.sh b/scripts/sync-upstream.sh
new file mode 100644
index 00000000..a8e5ef25
--- /dev/null
+++ b/scripts/sync-upstream.sh
@@ -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 "
+
+ 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 "$@"
diff --git a/scripts/update_server.sh b/scripts/update_server.sh
new file mode 100644
index 00000000..3d0a5196
--- /dev/null
+++ b/scripts/update_server.sh
@@ -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