添加上游同步自动化工具
新增工具脚本: - 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:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -118,7 +118,8 @@ tests
|
||||
CLAUDE.md
|
||||
AGENTS.md
|
||||
.claude
|
||||
scripts
|
||||
# 构建脚本(忽略自动生成的构建脚本,但保留自定义同步工具)
|
||||
# scripts
|
||||
.code-review-state
|
||||
openspec/
|
||||
docs/
|
||||
|
||||
27
scripts/README.md
Normal file
27
scripts/README.md
Normal 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
77
scripts/apply-branding.sh
Normal 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 "品牌化修改应用完成"
|
||||
108
scripts/apply-deploy-config.sh
Normal file
108
scripts/apply-deploy-config.sh
Normal 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 "部署配置应用完成"
|
||||
65
scripts/backup_database.sh
Normal file
65
scripts/backup_database.sh
Normal 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
110
scripts/check_status.sh
Normal 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
201
scripts/sync-upstream.sh
Normal 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
121
scripts/update_server.sh
Normal 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
|
||||
Reference in New Issue
Block a user