From 1bb3a26f0c3f4107cb71e4f4106a8d880e6adc50 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Sat, 30 May 2026 16:52:05 +0800 Subject: [PATCH] =?UTF-8?q?cutover:=20=E5=A4=B1=E8=B4=A5=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E5=88=B0=E5=AE=BF=E4=B8=BB=20nginx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- deploy/scripts/cutover.sh | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/deploy/scripts/cutover.sh b/deploy/scripts/cutover.sh index 00dbc71..57ca79e 100755 --- a/deploy/scripts/cutover.sh +++ b/deploy/scripts/cutover.sh @@ -23,13 +23,28 @@ docker run --rm \ -v /var/www/pay:/var/www/pay:ro \ "$EDGE_IMAGE" nginx -t +rollback() { + echo "==> !! 自动回滚:停 edge,恢复宿主 nginx" >&2 + docker-compose -p pangolin stop edge >/dev/null 2>&1 || true + systemctl enable nginx >/dev/null 2>&1 || true + systemctl start nginx || echo " !! 宿主 nginx 启动失败,请手动 systemctl start nginx" >&2 + echo " 已回滚到宿主 nginx。" >&2 + exit 1 +} + echo "==> [2/4] 停用宿主 nginx 并起 edge 容器(交接窗口,秒级)" systemctl stop nginx systemctl disable nginx 2>/dev/null || true -docker-compose -p pangolin up -d edge singbox +if ! docker-compose -p pangolin up -d edge singbox; then + echo " edge 启动失败" >&2; rollback +fi echo "==> [3/4] 等待并健康检查" sleep 2 +# edge 容器必须在跑 +if [[ "$(docker inspect -f '{{.State.Running}}' pangolin-edge 2>/dev/null)" != "true" ]]; then + echo " edge 容器未运行" >&2; docker logs pangolin-edge 2>&1 | tail -10; rollback +fi fail=0 # REALITY 经 443 → 10443(Marzban),SNI=www.cloudflare.com 应握手成功 if echo | timeout 10 openssl s_client -connect 127.0.0.1:443 -servername www.cloudflare.com >/dev/null 2>&1; then @@ -45,6 +60,5 @@ echo "==> [4/4] 结果" if [[ "$fail" == "0" ]]; then echo " 切换成功 ✅(宿主 nginx 已停,配置保留可回滚)" else - echo " ❌ 检查未全通过。回滚:docker-compose -p pangolin stop edge && systemctl start nginx" >&2 - exit 1 + echo " 部分检查未通过" >&2; rollback fi