44 lines
2.1 KiB
Bash
44 lines
2.1 KiB
Bash
#!/bin/bash
|
|
# 私域Agent 公网隧道启动脚本(主推 cloudflared 无拦截页 + ngrok 应急)
|
|
# 用法: bash ~/Desktop/yawan-workbench/启动公网隧道.sh
|
|
|
|
set -u
|
|
|
|
# 0. 后端
|
|
if lsof -ti :8010 >/dev/null 2>&1; then
|
|
echo "✓ 后端已在运行 (port 8010)"
|
|
else
|
|
echo "▶ 启动后端…"
|
|
(cd "$(dirname "$0")/server" && nohup .venv/bin/python -m uvicorn app.main:app --host 127.0.0.1 --port 8010 >/tmp/yawan-uvicorn.log 2>&1 &)
|
|
sleep 4
|
|
curl -s -m 5 --noproxy '*' http://127.0.0.1:8010/api/health >/dev/null \
|
|
&& echo "✓ 后端就绪" || { echo "✗ 后端启动失败,看 /tmp/yawan-uvicorn.log"; exit 1; }
|
|
fi
|
|
|
|
# 1. cloudflared 主隧道(无 ngrok 拦截页)
|
|
CF_METRICS=20241
|
|
if lsof -ti :$CF_METRICS >/dev/null 2>&1; then
|
|
CF_URL=$(curl -s -m 5 --noproxy '*' "http://127.0.0.1:$CF_METRICS/metrics" | grep -o 'https://[a-z-]*\.trycloudflare\.com' | head -1)
|
|
echo "✓ cloudflared 已在运行: $CF_URL"
|
|
else
|
|
echo "▶ 启动 cloudflared 主隧道…"
|
|
nohup /opt/homebrew/bin/cloudflared tunnel --url http://127.0.0.1:8010 --protocol http2 --metrics "127.0.0.1:$CF_METRICS" >/tmp/yawan-cloudflared.log 2>&1 &
|
|
sleep 8
|
|
CF_URL=$(curl -s -m 5 --noproxy '*' "http://127.0.0.1:$CF_METRICS/metrics" | grep -o 'https://[a-z-]*\.trycloudflare\.com' | head -1)
|
|
[ -n "$CF_URL" ] && echo "✓ 主入口(cloudflared·无拦截页): $CF_URL/admin" || echo "✗ cloudflared 启动失败,看 /tmp/yawan-cloudflared.log"
|
|
fi
|
|
|
|
# 2. ngrok 应急隧道(地址固定,但有拦截确认页)
|
|
if ! pgrep -f 'ngrok http 8010' >/dev/null 2>&1; then
|
|
echo "▶ 启动 ngrok 应急隧道…"
|
|
nohup /opt/homebrew/bin/ngrok http 8010 --host-header=localhost:8010 --log stdout >/tmp/yawan-ngrok.log 2>&1 &
|
|
sleep 4
|
|
fi
|
|
NGROK_URL=$(curl -s -m 5 --noproxy '*' http://127.0.0.1:4040/api/tunnels 2>/dev/null | grep -o 'https://[a-z0-9-]*\.ngrok-free\.dev' | head -1)
|
|
[ -n "$NGROK_URL" ] && echo "✓ 应急入口(ngrok·有拦截页): $NGROK_URL/admin"
|
|
|
|
echo ""
|
|
echo "========== 把主入口发给测试用户 =========="
|
|
echo " ${CF_URL:-<cloudflared 未启动>}/admin"
|
|
echo "=========================================="
|