171 lines
5.3 KiB
Bash
Executable File
171 lines
5.3 KiB
Bash
Executable File
#!/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 ""
|
||
|