#!/bin/bash # 部署重定向修复 # 通过公网服务器连接到内网服务器并更新代码 PUBLIC_HOST="156.225.27.52" PUBLIC_PORT="50232" PUBLIC_USER="root" PUBLIC_PASS="it5NuKGemX" PRIVATE_HOST="192.168.150.22" PRIVATE_USER="root" PRIVATE_PASS="Jsjj@8888" echo "==========================================" echo "部署重定向修复" echo "==========================================" echo "" # 创建临时文件用于传输 TEMP_FILE=$(mktemp) cat > "$TEMP_FILE" << 'EOF' import { NextResponse } from "next/server"; import { getToken } from "next-auth/jwt"; import { signIn } from "@/app/(auth)/auth"; import { isDevelopmentEnvironment } from "@/lib/constants"; export async function GET(request: Request) { const requestUrl = new URL(request.url); const { searchParams } = requestUrl; const redirectUrl = searchParams.get("redirectUrl") || "/"; const token = await getToken({ req: request, secret: process.env.AUTH_SECRET, secureCookie: !isDevelopmentEnvironment, }); if (token) { // 确保重定向时保留端口号 const baseUrl = process.env.AUTH_URL || requestUrl.origin; return NextResponse.redirect(new URL("/", baseUrl)); } // 确保 redirectTo 使用完整的 URL(包含端口) let finalRedirectUrl = redirectUrl; try { // 如果 redirectUrl 是相对路径,转换为绝对路径 if (redirectUrl.startsWith("/")) { const baseUrl = process.env.AUTH_URL || requestUrl.origin; finalRedirectUrl = new URL(redirectUrl, baseUrl).toString(); } } catch { // 如果解析失败,使用原始 redirectUrl finalRedirectUrl = redirectUrl; } return signIn("guest", { redirect: true, redirectTo: finalRedirectUrl }); } EOF echo "1. 通过公网服务器连接到内网服务器..." ssh -o StrictHostKeyChecking=no -p "$PUBLIC_PORT" "$PUBLIC_USER@$PUBLIC_HOST" bash << ENDSSH # 安装 sshpass(如果需要) if ! command -v sshpass &> /dev/null; then echo "安装 sshpass..." yum install -y sshpass 2>/dev/null || apt-get update && apt-get install -y sshpass 2>/dev/null || echo "无法安装 sshpass,请手动安装" fi # 连接到内网服务器 sshpass -p "$PRIVATE_PASS" ssh -o StrictHostKeyChecking=no "$PRIVATE_USER@$PRIVATE_HOST" bash << 'INNERSSH' echo "=== 连接到内网服务器成功 ===" # 获取应用目录 APP_DIR=\$(pm2 info ai-chatbot 2>/dev/null | grep "script path" | awk '{print \$NF}' | xargs dirname 2>/dev/null) if [ -z "\$APP_DIR" ]; then APP_DIR="/root/ai-chatbot-main" fi echo "应用目录: \$APP_DIR" cd "\$APP_DIR" || exit 1 echo "" echo "=== 备份原文件 ===" cp app/\(auth\)/api/auth/guest/route.ts app/\(auth\)/api/auth/guest/route.ts.backup.\$(date +%Y%m%d_%H%M%S) echo "" echo "=== 更新代码 ===" cat > app/\(auth\)/api/auth/guest/route.ts << 'ROUTEFILE' import { NextResponse } from "next/server"; import { getToken } from "next-auth/jwt"; import { signIn } from "@/app/(auth)/auth"; import { isDevelopmentEnvironment } from "@/lib/constants"; export async function GET(request: Request) { const requestUrl = new URL(request.url); const { searchParams } = requestUrl; const redirectUrl = searchParams.get("redirectUrl") || "/"; const token = await getToken({ req: request, secret: process.env.AUTH_SECRET, secureCookie: !isDevelopmentEnvironment, }); if (token) { // 确保重定向时保留端口号 const baseUrl = process.env.AUTH_URL || requestUrl.origin; return NextResponse.redirect(new URL("/", baseUrl)); } // 确保 redirectTo 使用完整的 URL(包含端口) let finalRedirectUrl = redirectUrl; try { // 如果 redirectUrl 是相对路径,转换为绝对路径 if (redirectUrl.startsWith("/")) { const baseUrl = process.env.AUTH_URL || requestUrl.origin; finalRedirectUrl = new URL(redirectUrl, baseUrl).toString(); } } catch { // 如果解析失败,使用原始 redirectUrl finalRedirectUrl = redirectUrl; } return signIn("guest", { redirect: true, redirectTo: finalRedirectUrl }); } ROUTEFILE echo "" echo "=== 设置环境变量(可选)===" if [ ! -f .env.local ]; then touch .env.local fi if ! grep -q "AUTH_URL" .env.local; then echo "" >> .env.local echo "# 修复重定向端口问题" >> .env.local echo "AUTH_URL=http://156.225.27.52:5245" >> .env.local echo "环境变量已添加" else echo "AUTH_URL 已存在,跳过" fi echo "" echo "=== 重启应用 ===" pm2 restart ai-chatbot || (pm2 delete ai-chatbot && pm2 start npm --name ai-chatbot -- start) echo "" echo "=== 等待应用启动 ===" sleep 5 echo "" echo "=== 检查应用状态 ===" pm2 status ai-chatbot echo "" echo "=== 测试应用响应 ===" sleep 2 curl -s --max-time 5 http://localhost:3001 | head -3 INNERSSH ENDSSH rm -f "$TEMP_FILE" echo "" echo "==========================================" echo "部署完成" echo "==========================================" echo "" echo "请访问: http://156.225.27.52:5245" echo ""