#cloud-config # Pangolin 加速节点一段式安装模板(与 #14 弹性开机共用)。 # # 渲染:控制面 provisioner 用 sed 替换所有 __PLACEHOLDER__(沿用 deploy/ 约定)。 # __CONTROL_PLANE__ 控制面 gRPC 地址 host:port # __SERVER_NAME__ 校验控制面证书的 TLS SNI(留空则取 host 部分) # __BOOTSTRAP_TOKEN__ 一次性引导 token(由 mtls.BootstrapTokenManager.IssueToken 预签发,15min TTL) # __DERIVE_KEY__ Hy2 口令派生密钥(与控制面同源,见 agentd.DeriveHy2Password) # __AGENT_VERSION__ pangolin-agent 版本(与产物命名/SHA 锁定一致) # __ARTIFACT_BASE__ 二进制与安装脚本下载根 URL # __INSTALL_SHA256__ install-node.sh 的 SHA-256(整链可复现校验) # # 安全:agent.env 内含 bootstrap token,权限 0600;token 一次性消费后即失效。 # 节点无状态:除 /etc/pangolin-agent/{node.key,node.crt,ca.crt,state.json} 与 # /etc/sing-box 外不落任何持久数据,且 state.json 仅含 dp_uuid + expires_at。 write_files: - path: /etc/pangolin-agent/agent.env permissions: '0600' owner: root:root content: | PANGOLIN_AGENT_CONTROL_PLANE=__CONTROL_PLANE__ PANGOLIN_AGENT_SERVER_NAME=__SERVER_NAME__ PANGOLIN_AGENT_BOOTSTRAP_TOKEN=__BOOTSTRAP_TOKEN__ PANGOLIN_AGENT_DERIVE_KEY=__DERIVE_KEY__ PANGOLIN_AGENT_STATE_DIR=/etc/pangolin-agent PANGOLIN_AGENT_SINGBOX_CONFIG=/etc/sing-box/config.json PANGOLIN_AGENT_SINGBOX_UNIT=sing-box PANGOLIN_AGENT_VERSION=__AGENT_VERSION__ runcmd: - | set -euo pipefail mkdir -p /opt/pangolin tmp="$(mktemp)" # 下载安装脚本并按锁定 SHA-256 校验后再执行(拒绝被篡改的脚本)。 curl -fsSL --retry 3 "__ARTIFACT_BASE__/install-node.sh" -o "$tmp" echo "__INSTALL_SHA256__ $tmp" | sha256sum -c - install -m 0755 "$tmp" /opt/pangolin/install-node.sh rm -f "$tmp" ARTIFACT_BASE="__ARTIFACT_BASE__" AGENT_VERSION="__AGENT_VERSION__" \ bash /opt/pangolin/install-node.sh # 整机 3–5 分钟内可服务:cloud-init 完成 → agent 首启 Enroll → Register 取全量配置 → # 渲染 sing-box config 并 restart sing-box → REALITY/Hy2 入站上线。