安装并注册 AeroNyx 节点
使用仓库的 quickstart 命令在 Linux 服务器上安装开源的 AeroNyx 节点,用一次性 Nodeboard 代码注册,并验证网络准入。还涵盖中继角色、无需许可的加入、TEE 部署以及 AI 辅助安装。
本指南介绍如何在 Linux 服务器上安装开源的 AeroNyx 节点软件,使用一次性代码将其注册到你的 Nodeboard 运营者账户,并检查网络是否已准入该节点。受支持的方式是仓库脚本 deploy/node/aeronyx-node.sh quickstart,它与 Nodeboard 为你生成的命令相同。
- 运营者控制台:app.aeronyx.network
- 源代码(AGPL-3.0):github.com/AeroNyxNetwork/AeroNyx
在运营节点之前,请阅读节点运营者政策。
开始之前
| 项目 | 要求 |
|---|---|
| 操作系统 | 带 systemd 的 Linux。安装程序使用 apt-get(Debian、Ubuntu)、dnf 或 yum 安装软件包。 |
| 访问权限 | root shell。本指南中的每条命令都假定已先执行 sudo -i。 |
| TUN 设备 | VPN 数据平面要求 /dev/net/tun 存在。 |
| 内存 | 低于 2 GB 时安装程序会发出警告并继续。节点会在服务器上从源代码编译,因此 4 GB 或以上更稳妥。 |
| 磁盘 | 可用空间低于 4 GB 时安装程序会发出警告并继续。请为构建缓存和升级流程保留的版本备份预留 20 GB 或以上空间。 |
| 入站端口 | 51820/UDP(VPN 监听端口)和 8422/TCP(签名发现与对等节点 API)。请在云防火墙中开放这两个端口;安装程序不会修改入站防火墙规则。 |
| 仅限本地 | 127.0.0.1:8421 是本地健康检查与管理 API。不要将其暴露。 |
为什么需要 root:仓库位于 /root/open/AeroNyx,安装程序以 700 权限写入 /etc/aeronyx 和 /var/lib/aeronyx,并以 600 权限写入 server.toml。其他用户读取这些路径的命令会失败,而且 Git 会拒绝从其他账户读取 root 所有的检出目录(“dubious ownership”)。
quickstart 会做什么
quickstart 分四步执行,并在任何主机变更之前停下来,等待你批准:
- 打印解析后的安装计划(只读)。
- 等待你输入
INSTALL。直接按 Enter 会安全退出。 - 运行预检,安装软件包和仓库固定版本的 Rust 工具链;如果
/etc/aeronyx/server.toml不存在则写入该文件(已有文件会保留);设置 IP 转发和 NAT;构建节点;安装aeronyx-serversystemd 单元;用你的代码注册节点身份;启动服务;并最多等待 120 秒完成网络准入。 - 打印
status和health --json摘要。
准入等待会检查:本地健康检查报告 ok;后端返回了新的策略(心跳往返正常);发现模块至少有一个经过验证的签名对等节点,并已完成一轮 gossip;对于公共节点,还会检查该节点是否已列入公共池。
第 1 步:创建注册码
- 登录 Nodeboard,打开注册码。
- 选择生成代码。
- 妥善保管该代码,不要外泄。它在 15 分钟后过期,只能使用一次,并会将新节点绑定到创建它的账户。
随后 Nodeboard 会显示一条 quickstart 命令、分步预览与安装命令、一条状态命令,以及一段 AI 助手提示词。其安装进度列会跟随安装程序显示 not_started → planning → running → completed | failed。
后端在安装程序执行到注册步骤时才校验代码,而注册步骤位于构建之后。在小型服务器上,首次构建可能超过 15 分钟。如果注册因此由于代码过期而失败,请生成新代码并再次运行 quickstart;第二次运行会复用构建缓存。
第 2 步:获取或更新仓库
aeronyx-node.sh 不是系统命令,它随仓库一同提供。以下是 Nodeboard 使用的克隆或更新命令:
mkdir -p /root/open && cd /root/open
if [ -d AeroNyx/.git ]; then cd AeroNyx && git fetch origin main && git checkout main && git pull --ff-only origin main; else git clone https://github.com/AeroNyxNetwork/AeroNyx.git AeroNyx && cd AeroNyx; fi
git rev-parse HEAD
始终向脚本传入 --repo-dir "$PWD"(或 --repo-dir /root/open/AeroNyx)。如果不传,install、upgrade、health 和 status 默认使用 /opt/aeronyx/AeroNyx。
第 3 步:运行 quickstart
运行 quickstart 时不要在命令行中带上代码。在终端中运行时,它会通过隐藏输入提示索取代码,因此代码不会回显、不会存入 shell 历史,也不会作为进程参数传递:
cd /root/open/AeroNyx
./deploy/node/aeronyx-node.sh quickstart --repo-dir "$PWD" --branch main --quick \
--node-name "Example1" --region DE --public-vpn
--node-name是在 Nodeboard 和 VPN 节点列表中显示的名称。--region是 ISO 3166-1 alpha-2 国家代码。--public-vpn会将节点发布到公共 VPN 池。省略该参数则节点保持私有。
在 Nodeboard registration code: 处粘贴代码并按 Enter。审阅计划后,输入 INSTALL。
关于 Nodeboard 生成的命令
Nodeboard 生成的 quickstart 命令会把代码直接写在命令中,例如 AERONYX_REGISTRATION_CODE='<code>' ./deploy/node/aeronyx-node.sh quickstart --repo-dir "$PWD" --branch main --quick。这样可以运行,但代码会保存在你的 shell 历史中。如果使用这种方式:
- 检查
echo "$HISTCONTROL"。如果其中包含ignorespace或ignoreboth,在命令前加一个空格,Bash 就不会记录它。 - 否则,事后使用
history -d <number>删除该条记录。
该代码只能使用一次且 15 分钟后过期,这限制了暴露风险,但仍不要将其粘贴到工单、截图或聊天中。
非交互式安装
用于自动化时,先预览,再通过标准输入传入代码。read -rs 可使代码不显示在屏幕上,也不进入历史记录:
cd /root/open/AeroNyx
./deploy/node/aeronyx-node.sh plan --repo-dir "$PWD" --branch main
read -rs AERONYX_CODE
printf '%s\n' "$AERONYX_CODE" | ./deploy/node/aeronyx-node.sh install \
--repo-dir "$PWD" --branch main --quick --registration-code-stdin \
--node-name "Example1" --region DE --public-vpn
unset AERONYX_CODE
install --quick 不会要求输入 INSTALL。请仅在审阅计划之后使用它。
第 4 步:验证节点
cd /root/open/AeroNyx
systemctl is-active aeronyx-server
./deploy/node/aeronyx-node.sh status --repo-dir "$PWD"
./deploy/node/aeronyx-node.sh health --repo-dir "$PWD" --json
健康的新节点会显示:
aeronyx-server为active,且health报告fail=0- 安装程序打印了
[OK] Node admission accepted,并带有health=ok、management=fresh和discovery=ready(公共节点还有public_pool=online) status打印operator_status=ok以及下一步操作health --json的最后一行 JSON 含有"success":true;警告显示在checks下
在 Nodeboard 中,该代码显示为已完成,节点出现在节点下,并显示其名称、地区、可见性和最新心跳。节点详情页会显示容量决策,取值为 ready、watch、blocked 或 waiting。
关于日常检查、日志、升级和回滚,请参阅运行和检查 AeroNyx 节点。
可选:加入加密中继
VPN 节点和加密中继节点是两个独立的选择。参与中继包括三个部分:可访问的公共对等节点 API、盲 ChatRelay 存储转发角色,以及不作为出口的 OnionMiddle 角色。在默认配置中,这两个角色均处于关闭状态。
-
确保
8422/TCP可从互联网访问。 -
编辑
/etc/aeronyx/server.toml(例如nano /etc/aeronyx/server.toml),在[discovery]部分使用你的公网地址设置以下键:tomlpublic_endpoint = "http://203.0.113.10:8422" public_discovery = true region = "DE" -
校验该文件:
bashcd /root/open/AeroNyx ./target/release/aeronyx-server validate -c /etc/aeronyx/server.toml -
在不重启的情况下启用 ChatRelay。该辅助命令会备份配置,要求你输入
ENABLE CHATRELAY,然后进行校验;如果校验失败,会恢复备份:bash./deploy/node/aeronyx-node.sh chat-relay --repo-dir "$PWD" --enable-chat-relay -
在一个受保护的步骤中启用 OnionMiddle 并重启。它会要求你输入
ENABLE ONIONMIDDLE;如果节点有活动会话,或无法报告会话数量,它会拒绝重启:bash./deploy/node/aeronyx-node.sh onion-middle --repo-dir "$PWD" --enable-onion-middle --restart如果它拒绝重启,请在 Nodeboard 的设置中为该节点开启维护模式,等待活动会话降为零后再次运行。不要添加
--yes:它会跳过确认步骤和活动会话保护。 -
检查中继就绪状态:
bash./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --two-hop --json
启用某个角色并不等于会被用于路由。只有在对等节点认为该节点可达,且存在新鲜的路径证明证据之后,节点才会成为路由候选。请参阅节点发现与加密中继。
不使用 Nodeboard 加入
join 会安装节点,并将其签名描述符提交给种子节点以进行 Stage-A 准入,无需注册码,也无需 Nodeboard 账户:
cd /root/open/AeroNyx
./deploy/node/aeronyx-node.sh join --repo-dir "$PWD" \
--seed http://SEED_PUBLIC_IP:8422 \
--public-endpoint http://YOUR_PUBLIC_IP:8422 --json
--seed接受 1 到 8 个公共种子节点;请求发送到第一个。--public-endpoint是你节点可访问的对等节点 API。两者都必须是使用公网 IP 地址(而非主机名)的http或httpsURL。- 它在带 systemd 的 Linux 上以 root 身份运行,需要 Python 3.11 或更高版本,或者带有
tomli包的python3。 - 它会设置六个
[discovery]值(enabled、advertise_self、public_discovery、gossip_enabled、public_endpoint、seed_endpoints),文件其余部分保持不变。 - 如果服务已在以不同设置运行,它会停止且不做任何更改。
--commit <40-hex SHA>固定确切的源代码提交。--dry-run打印计划结果而不做更改。--check-only验证已加入的节点,不发送任何内容。
成功的结果为 "admission_stage":"stage_a_candidate",并带有 "route_authority":false 和 "route_ready":false。Stage-A 准入表示种子节点接受了你的描述符。它不会使节点可路由,不会将其列入 Nodeboard 或 VPN 池,也不会使其具备获得报酬的资格。除非种子节点使用 HTTPS,否则种子节点的应答通过明文 HTTP 传输,因此它不是密码学回执。
使用 Docker 进行 TEE 部署
仓库中还包含一套面向运行 dstack 的机密虚拟机(Phala Cloud 或自托管 Intel TDX)的容器部署:deploy/node/Dockerfile、deploy/node/compose.tee.yaml、deploy/node/server.tee.toml 和 deploy/node/tee-entrypoint.sh。
该角色不是 VPN 节点:
vpn.enabled = false:没有 TUN 设备,没有 DNS 代理,没有 MemChain。容器运行时丢弃全部 Linux capabilities,并启用no-new-privileges。- 它运行洋葱中继(
advertise_onion_middle = true)、ChatRelay 和匿名信箱,并且只暴露8422。 - 节点身份来自 dstack 密钥管理服务(
[server_key] source = "dstack")。没有密钥文件。 - 固定种子。
server.tee.toml通过discovery.pinned_seeds固定了四个种子节点。没有运营者快照的节点没有其他信任锚点,每个固定项都只通过身份绑定 TLS 访问。请保留或替换这些固定项;参见 节点发现与加密多跳中继。
部署步骤:
- 从
ghcr.io/aeronyxnetwork/aeronyx-node中选择一个发布镜像。CI 从node-v*标签构建linux/amd64镜像,并附加构建来源证明(build-provenance attestation)。查找其摘要,例如使用docker buildx imagetools inspect ghcr.io/aeronyxnetwork/aeronyx-node:<tag>。 - 在
compose.tee.yaml中,将IMAGE_DIGEST替换为该摘要。始终按摘要固定,而不是按标签;在 dstack 虚拟机中,compose 文件是被度量的部署的一部分。 - 将
AERONYX_PUBLIC_ENDPOINT设置为 dstack 网关为 8422 端口分配的https://源。入口脚本会拒绝任何其他协议。 - 可选:设置
AERONYX_REGION(默认为tee)。 - 仅在首次启动时,以加密密钥(secret)形式提供
AERONYX_REGISTRATION_CODE。入口脚本会将其通过管道传给aeronyx-server register --code-stdin。当/var/lib/aeronyx卷中存在node_info.json后,就不再需要该代码。
该容器不包含 aeronyx-node.sh。请在 Nodeboard 中并通过其公共发现 API 监控 TEE 节点。
使用 AI 编程助手安装
Claude Code、Codex、OpenClaw 或 Hermes 等终端助手可以执行此流程。Nodeboard 在每个代码旁都提供了现成的 AI 助手提示词。无论使用哪种助手,均适用以下规则。
人工运营者:
- 提供服务器,并批准每一项主机变更
- 在阅读计划后亲自输入
INSTALL - 妥善保管注册码。Nodeboard 的 AI 提示词中包含该代码,因此粘贴提示词就等于把代码分享给了助手的服务提供商。为避免这种情况,可让助手更新仓库并运行不含代码的
plan,然后由你自己运行quickstart,在隐藏提示处输入代码。之后再交回给助手进行验证。
助手必须:
- 只使用
github.com/AeroNyxNetwork/AeroNyx中的deploy/node/aeronyx-node.sh,并传入--repo-dir - 只使用脚本文档中列出的选项(
./deploy/node/aeronyx-node.sh help)。未知选项会导致失败;例如,--api-base会使安装程序以Unknown option停止。 - 在任何主机变更之前展示或概述计划,并等待批准
- 在安装或升级后运行
status,报告operator_status、operator_title、operator_detail和operator_next_step;需要更多细节时再运行health --json - 将警告作为警告报告,不能仅凭进程在运行就宣布成功
- 除非你批准在维护窗口内重启,否则优先使用
upgrade --no-restart - 未经你明确批准,绝不使用
--force或--yes,也绝不重启有活动会话的节点 - 绝不打印注册码、私钥、API 密钥、客户端公网 IP、访问目标、DNS 内容、数据包载荷或聊天明文
完成的标准:
- 仓库位于
main,并已报告提交 - quickstart 或 install 以
Node admission accepted结束 status报告operator_status=ok,或每条警告都已说明health --json报告"success":true- Nodeboard 显示该节点,并带有最新心跳和容量决策
- 告警 / 事件 → 事件关闭中没有该节点未审阅的
open条目 - 你知道该节点在 Nodeboard 中的详情页
已注册节点会报告什么
本地诊断(status、health、relay-probe)只打印汇总值:服务状态、容量、数据包计数、发现就绪状态和证明结果。
已注册的 VPN 节点还会向 AeroNyx 后端报告每个 VPN 会话:会话 ID、客户端密钥(client_wallet)、隧道虚拟 IP、字节数、时间信息和链路质量。它不会报告客户端公网 IP、访问目标、DNS 内容或数据包载荷。运营者可以在 Nodeboard 中查看自己节点的这些会话记录;请参阅 Nodeboard 运营者控制台指南。与任何 VPN 服务器一样,节点本身在出口处以明文处理客户端流量,因此运营者必须遵守节点运营者政策。
相关页面
<!-- faq:start -->常见问题
aeronyx-node.sh 从哪里来?
它是 AeroNyx 节点仓库中位于 deploy/node/aeronyx-node.sh 的文件,不是系统命令。将 https://github.com/AeroNyxNetwork/AeroNyx 克隆或更新到 /root/open/AeroNyx,然后在该目录中带上 --repo-dir "$PWD" 运行它。
如何让注册码不进入 shell 历史?
运行 quickstart 时不带代码,并在隐藏的 Nodeboard registration code: 提示处输入代码。在脚本中,使用 read -rs 读取代码,并通过管道传给 install --quick --registration-code-stdin。
为什么脚本会去 /opt/aeronyx/AeroNyx 查找?
那是脚本内置的 --repo-dir 默认值,而 Nodeboard 会克隆到 /root/open/AeroNyx。请在每条命令中都传入 --repo-dir,使 install、health、status 和 upgrade 都使用服务所运行的那份检出目录。
如果代码在安装过程中过期会怎样?
注册步骤会失败,安装程序会在启动服务之前停止。代码在构建之后才校验,因此请生成新代码并再次运行 quickstart;第二次运行会复用构建缓存。
运行节点需要 Nodeboard 吗?
不需要,join 可以在没有注册码的情况下安装节点并提交以进行 Stage-A 准入。通过 join 加入的节点不可路由,不会列入 Nodeboard 或 VPN 池,也不具备获得报酬的资格。
可以在机密虚拟机中运行节点吗?
可以,仓库包含一套面向 dstack 机密虚拟机的 Docker 部署,运行洋葱中继、ChatRelay 和匿名信箱。它不提供 VPN 服务,其身份来自 dstack 密钥管理服务。
<!-- faq:end -->