Files
pangolin/deploy/bootstrap/README.md
T
wangjia bf81c786b2 chore(deploy): 删除 EC2 部署栈,转向 RackNerd 自建节点栈
EC2(marzban 共存)分发面不再由本仓库管理,全面转向新 VPS 自建。删除:
- deploy/{edge,singbox,xray,certbot,backup,scripts,docker-compose.yml,.env.example,README.md}
- .gitea/workflows/deploy.yml(EC2 自动部署 CD)
- ci/nginx-test.sh(edge nginx 校验)
保留 deploy/{bootstrap,single-node}(新节点初始化 + 全套自建)。

ci.yml 去掉 EC2 相关 job(compose/nginx 校验、edge 镜像构建),
shellcheck 改为校验 bootstrap/single-node 脚本;openapi/脱敏/flutter 不变。
deadman-watch 的"EC2"特指改为"任意常在线主机"。

注:EC2 上正在跑的服务不受影响(仅本仓库不再管理它)。文档(CLAUDE.md、
docs/回滚手册.md、app/kernel/poc/README.md)仍引用旧栈,待单独更新。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 06:55:25 +08:00

3.1 KiB

节点初始化(bootstrap)

全新 Debian 12 机器的幂等一键初始化。后续每台新机器照同样流程跑即可。 覆盖四块:① 系统加固 ② Pangolin 运行环境 ③ Telegram 监控 ④ 网络安全。

一、目标机上跑(本地)

cp bootstrap.env.example bootstrap.env
vi bootstrap.env            # 按需改;要监控就填 TELEGRAM_BOT_TOKEN / CHAT_ID
sudo bash init.sh

二、从本机远程跑(已配 ssh 免密别名,推荐)

# 前提:已 ssh-copy-id,~/.ssh/config 里有该机别名(如 racknerd)
rsync -az deploy/bootstrap/ racknerd:/root/bootstrap/
ssh racknerd 'cd /root/bootstrap && bash init.sh'

init.sh 幂等,可反复跑(改了 bootstrap.env 后重跑即生效)。

init.sh 做了什么

内容
① 系统 apt upgrade + 基础包(ufw/fail2ban/chrony/curl/jq…);时区;swap(不足则建 /swapfile 补到 SWAP_SIZE_MB);sysctl(BBR/fq/文件句柄/连接队列)
② 环境 pangolin 非特权系统用户(/var/lib/pangolin, nologin)
④ 防火墙 ufw 默认拒入站;放行 SSH + 443/tcp(REALITY)+ 443/udp(Hy2);其余拒绝
④ 暴破 fail2ban sshd jail
① SSH drop-in 加固:root 仅密钥、MaxAuthTries、可选禁密码登录
③ 监控 pangolin-monitor + systemd timer,定期经 Telegram 上报

🔒 防锁死红线

禁用密码登录(DISABLE_PASSWORD_AUTH=true)仅当 /root/.ssh/authorized_keys 非空时才生效; 否则自动保留密码登录并告警。所以ssh-copy-id 再跑,或确保公钥已装。

监控(③ 的细节)

  • 节点侧pangolin-monitor(本机 systemd timer,每 MONITOR_INTERVAL_MIN 分钟): 采 CPU/内存/磁盘、受监控 systemd 单元存活(MONITOR_UNITS)、出网连通; 越界/掉线/断网 → 🔴 必报;正常 → 🟢(心跳是否推送由 MONITOR_SEND_OK_PULSE 控制)。

  • 死信(不上报/宕机):节点宕了自己报不了,需在任意一台常在线主机(另一台节点 / 家里服务器 / 监控机)跑 deadman-watch.sh 主动探活补这层:

    # 在那台常在线主机上
    sudo install -m 755 deploy/bootstrap/monitor/deadman-watch.sh /usr/local/bin/deadman-watch
    sudo cp deploy/bootstrap/deadman.env.example /etc/pangolin-deadman.env && sudo vi /etc/pangolin-deadman.env
    # 每 3 分钟探一次(用户 cron 即可,无需 root)
    ( crontab -l 2>/dev/null; echo '*/3 * * * * /usr/local/bin/deadman-watch >/dev/null 2>&1' ) | crontab -
    

    节点端口连续失败到阈值 → 🔴 告警;恢复 → 🟢 通知。

文件

文件 说明
init.sh 主初始化(幂等)
bootstrap.env.example 配置模板(SSH/swap/防火墙/Telegram)
monitor/pangolin-monitor.sh 节点自监控上报
monitor/pangolin-monitor.{service,timer} systemd(timer 的 __INTERVAL__ 由 init.sh 渲染)
monitor/deadman-watch.sh EC2 侧死信探活
deadman.env.example 死信守望配置模板

密钥类(bootstrap.env/etc/pangolin-monitor.env/etc/pangolin-deadman.env)不入 git