Files
pangolin/deploy/README.md
T
wangjia cf96989e01
deploy-pangolin / deploy (push) Has been cancelled
Phase 0: 容器化数据面 + CI/CD 自动部署
- deploy/: Xray VLESS+REALITY (11443, 经宿主 nginx SNI 分流) + sing-box Hysteria2 (UDP 443) docker-compose
- 幂等 deploy.sh / gen-secrets.sh / print-clients.sh;受限 nginx-apply 特权脚本 + 一次性 root-setup
- .gitea/workflows/deploy.yml: NAS runner 经 SSH 远程部署到 EC2
- docs/ plan/: 设计方案与实施计划

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

1.9 KiB

Pangolin 部署(Phase 0)

容器化数据面:Xray VLESS+REALITY + sing-box Hysteria2,经 CI/CD 自动部署到节点。 与现网 marzban/blog/jiu 完全隔离。设计详见 ../docs/技术方案.md../plan/

端口与隔离

服务 监听 经由 说明
Xray REALITY 容器内 0.0.0.0:11443 → 宿主 127.0.0.1:11443 宿主 nginx ssl_preread(SNI=www.apple.com) 复用 443/TCP,不占公网端口
sing-box Hy2 公网 0.0.0.0:443/udp 直接暴露 与 TCP 443 不同协议栈,互不冲突

现网 Marzban xray 在 10443、各站在 8443-8445,均不受影响。

自动部署链路

本地改 deploy/** → push gitea(NAS) → NAS act_runner → ssh ec2 → docker-compose up + nginx 增量 reload

一次性前置(首次,人工)

  1. 安全组开 UDP 443(本地 aws):给 sg-040cf4cd11bdf4d5budp/443 0.0.0.0/0
  2. root 前置(EC2 上一次,需 root):
    sudo bash /opt/pangolin/setup/root-setup.sh
    
    安装受限特权脚本 pangolin-nginx-apply.sh + sudoers,使 CI 能非交互更新 nginx 路由(且拿不到通用 root)。
  3. Gitea Actions Secrets(仓库 Settings → Actions → Secrets):
    • EC2_SSH_KEY = ec2-user 私钥(可登录 18.136.60.128)
    • EC2_HOST = 18.136.60.128
    • EC2_USER = ec2-user
  4. 确认 runner label,据此改 .gitea/workflows/deploy.ymlruns-on

手动部署(不走 CI)

rsync -az --exclude secrets deploy/ ec2-user@18.136.60.128:/opt/pangolin/
ssh ec2 'cd /opt/pangolin && ./scripts/deploy.sh'

取客户端导入信息(含密钥,不进日志)

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

幂等性

deploy.sh 可重复执行:密钥已存在则复用、nginx 路由已存在则跳过、compose 无变更则不动。