Files
pangolin/deploy
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
..

Pangolin 部署(方案 C:分发层容器化)

把流量分发层(nginx)迁入 Docker,新增 Hysteria2,经 Gitea Actions 自动部署。 与现网 marzban/jiu/billing/blog 并存。设计见 ../docs/技术方案.md 与 计划 ~/.claude/plans/ci-cd-1-shimmering-panda.md

容器一览(部署后)

容器 用途 端口/网络
pangolin-edge(nginx) 分发层,接管 80/443,移植现网全部路由 host 网络
pangolin-singbox Hysteria2 加速线 host 网络,443/udp
pangolin-certbot DNS-01(Cloudflare)证书续期,按需运行 无端口
pangolin-xray(本台不启用) REALITY,留给新节点 profile newnode

现网保留不动:marzban(线上 REALITY+面板)、jiu_mysqlblog-*,宿主 jiu.service/billing.service

部署目录

~/pangolin(即 /home/ec2-user/pangolin,ec2-user 所有,免 root)。

自动部署

push deploy/** → NAS runner → ssh ec2rsync deploy/ → ~/pangolin/deploy.sh(免 root,幂等)。 deploy.sh 总会拉起 singbox;edge 仅在宿主 nginx 已停时才启动(否则只校验配置)。

Gitea Secrets(仓库 Settings→Actions→Secrets)

EC2_SSH_KEYEC2_HOST=18.136.60.128EC2_USER=ec2-userCF_API_TOKEN。 并把 .gitea/workflows/deploy.ymlruns-on 改成你 runner 的 label。

一次性切换(nginx 宿主 → 容器,需 root 一次)

空闲时段执行(代理会秒级重连,Shadowrocket 自动恢复):

sudo bash /home/ec2-user/pangolin/scripts/cutover.sh

失败秒级回滚:

docker-compose -p pangolin stop edge && sudo systemctl start nginx

证书续期(切换后)

# 一次性:把 blog/jiu/vpn 三证书改为 DNS-01(Cloudflare)
cd ~/pangolin
docker-compose -p pangolin run --rm certbot certonly --dns-cloudflare \
  --dns-cloudflare-credentials /etc/cloudflare.ini \
  -d blog.51yanmei.com -d jiu.51yanmei.com -d vpn.51yanmei.com --keep-until-expiring
# 续期 + 重载(建议加进宿主 cron,每日一次)
docker-compose -p pangolin run --rm certbot renew -q
docker exec pangolin-edge nginx -s reload

取客户端导入串(Hy2,含口令)

ssh ec2 'cat ~/pangolin/secrets/clients.txt'