feat(deploy): cloudflared 出站隧道前置控制面 API(api.yanmeiai.com→127.0.0.1:8080)
deploy.sh 在 systemd 安装段新增 cloudflared 二进制(apt 源)+ unit 安装; enable-on-boot 用 /etc/pangolin/cloudflared.env(TUNNEL_TOKEN)存在与否作 门槛,避免全新单机部署在 token 未落地前因 cloudflared 起不来而失败。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
This commit is contained in:
@@ -257,6 +257,24 @@ sed "s#/usr/local/bin/sing-box#${SB_BIN}#g" \
|
||||
chmod 644 /etc/systemd/system/sing-box.service
|
||||
install -d -m 755 /etc/polkit-1/rules.d
|
||||
install -m 644 "$HERE/polkit/49-pangolin-singbox.rules" /etc/polkit-1/rules.d/
|
||||
|
||||
# ── cloudflared(控制面 API 出站隧道,Cloudflare apt 源)─────────────────────────
|
||||
if ! command -v cloudflared >/dev/null 2>&1; then
|
||||
log "安装 cloudflared(Cloudflare apt 源)..."
|
||||
install -m 0755 -d /usr/share/keyrings
|
||||
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg \
|
||||
-o /usr/share/keyrings/cloudflare-main.gpg
|
||||
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bookworm main' \
|
||||
> /etc/apt/sources.list.d/cloudflared.list
|
||||
apt-get update -qq
|
||||
apt-get install -y -qq cloudflared
|
||||
fi
|
||||
# apt 固定装到 /usr/bin;软链到 unit 期望的 /usr/local/bin(与其他 pangolin 二进制一致)。
|
||||
CFD_BIN=/usr/bin/cloudflared
|
||||
[ -x "$CFD_BIN" ] || die "cloudflared 安装失败:$CFD_BIN 不存在。"
|
||||
ln -sf "$CFD_BIN" /usr/local/bin/cloudflared
|
||||
install -m 644 "$HERE/systemd/cloudflared.service" /etc/systemd/system/
|
||||
|
||||
systemctl daemon-reload
|
||||
|
||||
log "启动控制面(pangolin-server,以 $PUSER 运行)..."
|
||||
@@ -275,6 +293,15 @@ if command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q "Status: a
|
||||
log "ufw 放行 ${HTTP_PORT}/tcp(控制面 API,明文)"
|
||||
fi
|
||||
|
||||
# ── cloudflared:按需启用(需 /etc/pangolin/cloudflared.env 提供 TUNNEL_TOKEN)───
|
||||
if [ -f /etc/pangolin/cloudflared.env ]; then
|
||||
log "启用 cloudflared(检测到 /etc/pangolin/cloudflared.env)..."
|
||||
systemctl enable --now cloudflared.service
|
||||
else
|
||||
log "cloudflared 已安装但未启动:等 /etc/pangolin/cloudflared.env(TUNNEL_TOKEN)就绪后执行:"
|
||||
log " systemctl enable --now cloudflared.service"
|
||||
fi
|
||||
|
||||
# ── 11. 摘要 ──────────────────────────────────────────────────────────────────
|
||||
log "完成。单机栈已起(SQLite + pangolin 用户)。"
|
||||
cat <<EOF
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
[Unit]
|
||||
Description=Pangolin cloudflared (control-plane API tunnel → 127.0.0.1:8080)
|
||||
Documentation=https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
|
||||
After=network-online.target pangolin-server.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
# TUNNEL_TOKEN 从此文件注入(不入 unit 本体、不进 ps);cloudflared 自动读取 env TUNNEL_TOKEN。
|
||||
EnvironmentFile=/etc/pangolin/cloudflared.env
|
||||
ExecStart=/usr/local/bin/cloudflared --no-autoupdate tunnel run
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
# 出站隧道,无需 root:用非特权用户即可(与 pangolin-server 同用户)。
|
||||
User=pangolin
|
||||
NoNewPrivileges=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user