#!/bin/bash # ============================================================= # 节点 1:上海服务器 # 部署:sub2api + node-tls-proxy + postgres + redis # ============================================================= # 用法:bash setup-node1-shanghai.sh # 前置:已安装 Docker,已克隆仓库到当前目录 set -euo pipefail GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' ok() { echo -e "${GREEN}✅ $*${NC}"; } info() { echo -e "${YELLOW}ℹ $*${NC}"; } echo "================================================" echo " 节点1:上海服务器 部署" echo "================================================" # ── 1. 检查 Docker ───────────────────────────────── if ! command -v docker &>/dev/null; then info "安装 Docker..." curl -fsSL https://get.docker.com | bash systemctl enable docker && systemctl start docker fi ok "Docker 已就绪" # ── 2. 进入 deploy 目录 ───────────────────────────── # 兼容从仓库根目录执行(/root/sub2api/)或脚本原始位置(antigravity/maintenance/) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [ -d "$SCRIPT_DIR/deploy" ]; then DEPLOY_DIR="$SCRIPT_DIR/deploy" elif [ -d "$(dirname "$SCRIPT_DIR")/deploy" ]; then DEPLOY_DIR="$(dirname "$SCRIPT_DIR")/deploy" elif [ -d "$(dirname "$(dirname "$SCRIPT_DIR")")/deploy" ]; then DEPLOY_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")/deploy" elif [ -d "$(pwd)/deploy" ]; then DEPLOY_DIR="$(pwd)/deploy" else echo "❌ 找不到 deploy/ 目录,请在仓库根目录执行脚本" exit 1 fi cd "$DEPLOY_DIR" ok "工作目录: $DEPLOY_DIR" # ── 3. 生成 .env(如不存在)────────────────────────── if [ ! -f .env ]; then cat > .env << EOF # ========== 必填 ========== POSTGRES_PASSWORD=$(openssl rand -hex 16) ADMIN_EMAIL=admin@sub2api.local ADMIN_PASSWORD=$(openssl rand -hex 8) JWT_SECRET=$(openssl rand -hex 32) TOTP_ENCRYPTION_KEY=$(openssl rand -hex 32) # ========== 时区(上海)========== TZ=Asia/Shanghai # ========== Gemini OAuth(如有)========== GEMINI_CLI_OAUTH_CLIENT_SECRET= ANTIGRAVITY_OAUTH_CLIENT_SECRET= EOF ok ".env 已生成(node-tls-proxy 在本机,无需额外配置)" fi # ── 4. 启动服务 ───────────────────────────────────── info "启动 sub2api + node-tls-proxy..." docker compose -f docker-compose.yml \ -f docker-compose.tls-proxy.yml \ pull docker compose -f docker-compose.yml \ -f docker-compose.tls-proxy.yml \ up -d ok "服务启动完成" # ── 5. 验证 ──────────────────────────────────────── sleep 10 echo "" echo "【验证】" docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" if curl -sf http://127.0.0.1:8080/health >/dev/null 2>&1; then ok "sub2api 健康检查通过(端口 8080)" else echo "⏳ sub2api 还在启动,等 30 秒后手动检查..." fi echo "" echo "================================================" echo " 节点1 部署完成" echo " 管理面板: http://$(curl -sf ipinfo.io/ip 2>/dev/null || echo '<服务器IP>'):8080" echo "================================================"