ai-chatbot/fix-frpc-access.sh
2026-05-23 11:09:03 +08:00

120 lines
3.8 KiB
Bash
Executable File
Raw Permalink 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
# FRPC 访问问题修复脚本
# 用于解决 http://156.225.27.52:5245/ 访问问题
HOST="156.225.27.52"
PORT="5204"
USER="root"
PASSWORD="${DEPLOY_SSH_PASSWORD:?set DEPLOY_SSH_PASSWORD}"
echo "=========================================="
echo "FRPC 访问问题诊断和修复"
echo "=========================================="
echo ""
# 1. 测试 SSH 连接
echo "1. 测试 SSH 连接..."
if sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "echo 'SSH连接成功'" 2>/dev/null; then
echo "✅ SSH 连接正常"
else
echo "❌ SSH 连接失败,请检查:"
echo " - 服务器是否在线"
echo " - SSH 服务是否运行"
echo " - 端口 5204 是否开放"
exit 1
fi
# 2. 检查 FRPC 服务状态
echo ""
echo "2. 检查 FRPC 服务状态..."
FRPC_STATUS=$(sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "systemctl is-active frpc.service" 2>/dev/null)
if [ "$FRPC_STATUS" = "active" ]; then
echo "✅ FRPC 服务运行中"
else
echo "❌ FRPC 服务未运行,正在启动..."
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "systemctl start frpc.service" 2>/dev/null
sleep 2
fi
# 3. 检查应用状态
echo ""
echo "3. 检查应用状态..."
APP_STATUS=$(sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "pm2 list | grep ai-chatbot" 2>/dev/null)
if [ -n "$APP_STATUS" ]; then
echo "✅ 应用运行中"
else
echo "❌ 应用未运行,请检查 PM2 状态"
fi
# 4. 检查 FRPC 配置
echo ""
echo "4. 检查 FRPC 配置..."
FRPC_CONFIG=$(sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "cat /etc/frp/frpc.ini | grep -A 6 'ai-chatbot'" 2>/dev/null)
echo "当前配置:"
echo "$FRPC_CONFIG"
# 5. 修复配置(确保使用 TCP 类型)
echo ""
echo "5. 修复 FRPC 配置..."
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" << 'ENDSSH'
# 备份配置
cp /etc/frp/frpc.ini /etc/frp/frpc.ini.backup.$(date +%Y%m%d_%H%M%S)
# 删除旧的 ai-chatbot 配置
sed -i '/\[ai-chatbot\]/,+6d' /etc/frp/frpc.ini
# 添加正确的 TCP 配置
cat >> /etc/frp/frpc.ini << 'EOF'
[ai-chatbot]
name = ai-chatbot
type = tcp
local_ip = 127.0.0.1
local_port = 3001
remote_port = 5245
EOF
echo "配置已更新"
cat /etc/frp/frpc.ini | grep -B 2 -A 6 'ai-chatbot'
ENDSSH
# 6. 重启 FRPC 服务
echo ""
echo "6. 重启 FRPC 服务..."
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "systemctl restart frpc.service && sleep 3" 2>/dev/null
# 7. 检查 FRPC 日志
echo ""
echo "7. 检查 FRPC 日志..."
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "journalctl -u frpc.service --since '1 minute ago' --no-pager | grep -E 'ai-chatbot|start proxy|error' | tail -10" 2>/dev/null
# 8. 测试本地应用
echo ""
echo "8. 测试本地应用..."
LOCAL_TEST=$(sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "curl -s --max-time 5 http://localhost:3001 2>&1 | head -5" 2>/dev/null)
if [ -n "$LOCAL_TEST" ]; then
echo "✅ 本地应用响应正常"
echo "$LOCAL_TEST"
else
echo "❌ 本地应用无响应"
fi
# 9. 检查端口监听
echo ""
echo "9. 检查端口监听..."
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "ss -tlnp | grep -E '3001|5245' || netstat -tlnp 2>/dev/null | grep -E '3001|5245'" 2>/dev/null
echo ""
echo "=========================================="
echo "诊断完成"
echo "=========================================="
echo ""
echo "如果问题仍然存在,请检查:"
echo "1. FRPS(FRP 服务端)是否正常运行"
echo "2. FRPS 是否配置了 5245 端口的 TCP 穿透"
echo "3. 防火墙是否开放了 5245 端口"
echo "4. 访问时使用完整 URL: http://156.225.27.52:5245/"
echo ""