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 \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