Commit f7cdf226 by luoqi

chore(deploy): 托管环境额外验私网 IP 可达(拦 loopback-only 绑定 → 网关 502)

原验证只 curl 127.0.0.1(loopback),应用绑成 loopback 时也过,但远端网关(经 ECS 私网 IP)
够不到 → 公网 502(2026-07-18 friday 踩过)。COMPOSE_MANAGED=1 时额外 curl 私网 IP:3100/3101,
不通即失败退出,把漂移在部署当场拦下。本机代理型(非 managed)不受影响。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
parent 2db31f27
Pipeline #3393 failed in 0 seconds
...@@ -80,7 +80,22 @@ main() { ...@@ -80,7 +80,22 @@ main() {
# / 现为 307→/plans(next.config redirects),直接验 /plans 的 200 # / 现为 307→/plans(next.config redirects),直接验 /plans 的 200
webcode=$(curl -s -m 30 -o /dev/null -w '%{http_code}' http://127.0.0.1:3100/plans || true) webcode=$(curl -s -m 30 -o /dev/null -w '%{http_code}' http://127.0.0.1:3100/plans || true)
[[ "$webcode" == "200" ]] || die "web http=$webcode" [[ "$webcode" == "200" ]] || die "web http=$webcode"
echo " health 200 / web 200" echo " health 200 / web 200(loopback)"
# 托管环境(COMPOSE_MANAGED=1)= 远端网关(如 friday 的 lb1)经【ECS 私网 IP】到达应用。
# loopback 验证过不代表网关能到:若应用绑成 127.0.0.1,私网 IP 会 refused → 公网 502。
# 这里额外验私网 IP 可达,把"loopback 通、网关不通"的漂移在部署当场拦下(2026-07-18 踩过)。
if [[ "${COMPOSE_MANAGED:-0}" == "1" ]]; then
log "验证 3b:私网 IP 可达(网关路径,防 loopback-only 绑定)"
local priv phealth pweb
priv=$(ip route get 1 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i=="src"){print $(i+1);exit}}')
[[ -n "$priv" ]] || die "拿不到私网 IP(ip route get 1 解析失败)"
phealth=$(curl -s -m 5 -o /dev/null -w '%{http_code}' "http://$priv:3101/pac/v1/health" || true)
[[ "$phealth" == "200" ]] || die "私网 $priv:3101 health=$phealth — 应用可能绑成 loopback,网关够不到(会 502)。托管环境需 web/service 绑 0.0.0.0(见 docker-compose.managed.yml)"
pweb=$(curl -s -m 30 -o /dev/null -w '%{http_code}' "http://$priv:3100/plans" || true)
[[ "$pweb" == "200" ]] || die "私网 $priv:3100 web=$pweb — 同上(loopback 绑定 → 网关 502)"
echo " 私网 $priv health 200 / web 200(网关路径 OK)"
fi
log "部署成功 ✅ $(git log --oneline -1)" log "部署成功 ✅ $(git log --oneline -1)"
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment