cutover: 失败自动回滚到宿主 nginx
deploy-pangolin / deploy (push) Has been cancelled

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-05-30 16:52:05 +08:00
parent fa3954724c
commit 1bb3a26f0c
+17 -3
View File
@@ -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