diff --git a/scripts/ci/deploy-server.sh b/scripts/ci/deploy-server.sh index 91b3414..419b51e 100644 --- a/scripts/ci/deploy-server.sh +++ b/scripts/ci/deploy-server.sh @@ -52,6 +52,18 @@ install -m755 /tmp/pangolin-server "$BIN/pangolin-server" install -m755 /tmp/pangolin-agent "$BIN/pangolin-agent" install -m755 /tmp/pangolin-migrate "$BIN/pangolin-migrate" install -m755 /tmp/pangolin-nodectl "$BIN/pangolin-nodectl" +# ── 控制面收口(幂等):HTTP API 只绑 loopback,经 cloudflared 隧道对外,关公网 8080 ── +# 现网 server.env 曾漂移成 ADDR=:8080(全网卡明文暴露 http://<公网IP>:8080,绕过 CF/TLS)。 +# 这里在重启前把它纠回 127.0.0.1:8080 并撤掉 ufw 放行,随本次部署自动生效——不再手改线上。 +# 幂等:仅当精确匹配公网形态 ADDR=:8080 才改;已收口则跳过。备份原文件。 +if grep -qxF 'ADDR=:8080' /etc/pangolin/server.env; then + cp -p /etc/pangolin/server.env "/etc/pangolin/server.env.bak-addr-$TAG" + sed -i 's/^ADDR=:8080\$/ADDR=127.0.0.1:8080/' /etc/pangolin/server.env + echo "==> deploy-server: ADDR 收口 :8080 -> 127.0.0.1:8080" +fi +if command -v ufw >/dev/null 2>&1; then + ufw delete allow 8080/tcp >/dev/null 2>&1 || true +fi systemctl start pangolin-server systemctl is-active pangolin-server REMOTE diff --git a/server/cmd/server/main.go b/server/cmd/server/main.go index 036951d..fd9e54b 100644 --- a/server/cmd/server/main.go +++ b/server/cmd/server/main.go @@ -48,14 +48,16 @@ import ( ) func main() { - listenAddr := flag.String("addr", "", "HTTP listen address (default :8080, overridden by ADDR env)") + listenAddr := flag.String("addr", "", "HTTP listen address (default 127.0.0.1:8080, overridden by ADDR env)") flag.Parse() if *listenAddr == "" { if v := os.Getenv("ADDR"); v != "" { *listenAddr = v } else { - *listenAddr = ":8080" + // 默认只绑 loopback:控制面对外一律经 cloudflared 隧道(见 CLAUDE.md), + // 源站不该裸监听公网。要跨主机监听须显式设 ADDR=:8080(明知代价)。 + *listenAddr = "127.0.0.1:8080" } }