Files
pangolin/deploy/scripts/deploy.sh
T
wangjia 1a346c32c1
deploy-pangolin / deploy (push) Has been cancelled
方案C:分发层容器化(edge nginx)+ Hy2 + DNS-01 续期
- edge: 容器化 nginx 接管 80/443,逐字移植现网 vhost(blog/jiu/marzban/pay)+ stream SNI 分流
- singbox: Hysteria2(host 网络,UDP 443)
- certbot: DNS-01(Cloudflare)续期,容器化
- xray: REALITY 仅 profile newnode(本台沿用 Marzban)
- deploy.sh 幂等且切换感知;cutover.sh 一次性停宿主 nginx 切容器(可秒级回滚)
- 弃用方案A 的 host nginx-apply/sudoers/root-setup
- 部署目录改 ~/pangolin(免 root);CI 注入 CF_API_TOKEN

EC2 实测:edge nginx -t 通过(真实证书)、compose 校验通过

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 16:42:30 +08:00

47 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# deploy.sh —— 幂等部署(免 root)。CI 与手动均可。
# - 总是确保 singbox(Hy2)在跑;
# - edge:若宿主 nginx 仍在(未切换)则只校验配置、不启动(避免抢 80/443);
# 宿主 nginx 已停(已切换)则正常拉起。
# 首次 nginx 切换由 cutover.sh(需 root 一次)完成。
set -euo pipefail
cd "$(dirname "$0")/.." # -> deploy/
EDGE_IMAGE="nginx:1.27-alpine"
echo "==> [1/4] 生成/复用密钥与证书"
./scripts/gen-secrets.sh
echo "==> [2/4] 渲染配置"
# shellcheck disable=SC1091
source ./secrets/pangolin.env
sed "s|__HY2_PASSWORD__|${HY2_PASSWORD}|g" ./singbox/config.tmpl.json > ./singbox/config.json
echo "==> [3/4] 拉起 singbox(Hy2)"
docker-compose -p pangolin up -d singbox
docker-compose -p pangolin ps singbox
echo "==> [4/4] edge(分发层)"
edge_validate() {
docker run --rm \
-v "$PWD/edge/nginx.conf:/etc/nginx/nginx.conf:ro" \
-v "$PWD/edge/stream.conf:/etc/nginx/stream.conf:ro" \
-v "$PWD/edge/conf.d:/etc/nginx/conf.d:ro" \
-v /etc/letsencrypt:/etc/letsencrypt:ro \
-v /opt/jiu:/opt/jiu:ro \
-v /var/www/pay:/var/www/pay:ro \
"$EDGE_IMAGE" nginx -t
}
if systemctl is-active --quiet nginx 2>/dev/null; then
echo " 宿主 nginx 仍在运行 → 仅校验 edge 配置,不启动(切换请跑 cutover.sh)"
edge_validate && echo " edge 配置校验通过 ✅"
else
echo " 宿主 nginx 未运行 → 拉起 edge"
edge_validate
docker-compose -p pangolin up -d edge
docker-compose -p pangolin ps edge
fi
./scripts/print-clients.sh
echo "==> 完成 ✅"