ai-chatbot/deploy-fix.sh
Your Name 53ddb7e585
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
Initial commit - clean repository
2025-12-17 20:15:18 +08:00

171 lines
5.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 ""