Cài đặt và đăng ký một nút AeroNyx

AeroNyx16 phút đọc

Cài đặt nút AeroNyx mã nguồn mở trên máy chủ Linux bằng lệnh quickstart của kho mã, đăng ký nút bằng một mã Nodeboard dùng một lần và xác minh việc được mạng chấp nhận. Bao gồm cả các vai trò chuyển tiếp, tham gia không cần cấp phép, triển khai TEE và cài đặt với trợ giúp của AI.

Hướng dẫn này cài đặt phần mềm nút AeroNyx mã nguồn mở trên một máy chủ Linux, đăng ký nút vào tài khoản nhà vận hành Nodeboard của bạn bằng một mã dùng một lần, và kiểm tra rằng mạng đã chấp nhận nút. Cách được hỗ trợ là tập lệnh trong kho mã deploy/node/aeronyx-node.sh quickstart, cũng chính là lệnh mà Nodeboard tạo sẵn cho bạn.

Trước khi vận hành một nút, hãy đọc Chính sách dành cho nhà vận hành nút.

Trước khi bắt đầu

Hạng mụcYêu cầu
Hệ điều hànhLinux có systemd. Trình cài đặt cài các gói bằng apt-get (Debian, Ubuntu), dnf hoặc yum.
Quyền truy cậpMột shell root. Mọi lệnh trong hướng dẫn này đều giả định bạn đã chạy sudo -i trước.
Thiết bị TUN/dev/net/tun phải tồn tại cho mặt phẳng dữ liệu VPN.
Bộ nhớTrình cài đặt cảnh báo khi dưới 2 GB và vẫn tiếp tục. Nút được biên dịch từ mã nguồn ngay trên máy chủ, vì vậy 4 GB trở lên là lựa chọn an toàn hơn.
Ổ đĩaTrình cài đặt cảnh báo khi dung lượng trống dưới 4 GB và vẫn tiếp tục. Hãy dành 20 GB trở lên cho bộ nhớ đệm biên dịch và các bản sao lưu phát hành mà quy trình nâng cấp lưu giữ.
Cổng vào51820/UDP (trình lắng nghe VPN) và 8422/TCP (khám phá có chữ ký và API ngang hàng). Hãy mở chúng trong tường lửa đám mây của bạn; trình cài đặt không thay đổi quy tắc tường lửa chiều vào.
Chỉ cục bộ127.0.0.1:8421 là API sức khỏe và quản lý cục bộ. Không được để lộ nó ra ngoài.

Vì sao cần root: kho mã nằm tại /root/open/AeroNyx, trình cài đặt ghi /etc/aeronyx và /var/lib/aeronyx với chế độ 700, và server.toml với chế độ 600. Các lệnh đọc những đường dẫn đó sẽ thất bại với người dùng khác, và Git từ chối đọc một bản checkout thuộc sở hữu của root từ một tài khoản khác ("dubious ownership").

Quickstart làm những gì

quickstart chạy bốn bước và dừng lại trước mọi thay đổi trên máy chủ cho đến khi bạn chấp thuận:

  1. In ra kế hoạch cài đặt đã được xác định (chỉ đọc).
  2. Chờ bạn gõ INSTALL. Nhấn Enter sẽ dừng một cách an toàn.
  3. Chạy các bước kiểm tra trước, cài các gói và bộ công cụ Rust được cố định phiên bản trong kho mã, ghi /etc/aeronyx/server.toml nếu tệp này chưa tồn tại (tệp hiện có được giữ nguyên), thiết lập chuyển tiếp IP và NAT, biên dịch nút, cài unit systemd aeronyx-server, đăng ký danh tính nút bằng mã của bạn, khởi động dịch vụ và chờ tối đa 120 giây để mạng chấp nhận nút.
  4. In ra status và bản tóm tắt health --json.

Bước chờ chấp nhận kiểm tra rằng sức khỏe cục bộ báo ok, rằng backend đã trả về một chính sách mới (vòng nhịp tim hoạt động), rằng cơ chế khám phá có ít nhất một nút ngang hàng có chữ ký đã được xác thực và đã hoàn tất một vòng gossip, và, đối với nút công khai, rằng nút đã được liệt kê trong nhóm công khai.

Bước 1: tạo mã đăng ký

  1. Đăng nhập vào Nodeboard và mở Registration Codes.
  2. Chọn Generate Code.
  3. Giữ mã ở chế độ riêng tư. Mã hết hạn sau 15 phút, chỉ dùng được một lần và gắn nút mới với tài khoản đã tạo ra mã.

Sau đó Nodeboard hiển thị một lệnh quickstart, các lệnh xem trước và cài đặt từng bước, một lệnh kiểm tra trạng thái và một lời nhắc cho trợ lý AI. Cột Install Progress theo dõi trình cài đặt qua not_started → planning → running → completed | failed.

Backend kiểm tra mã khi trình cài đặt đến bước đăng ký, bước này diễn ra sau khi biên dịch. Lần biên dịch đầu tiên trên một máy chủ nhỏ có thể mất hơn 15 phút. Nếu khi đó việc đăng ký thất bại vì mã đã hết hạn, hãy tạo một mã mới và chạy lại quickstart; lần chạy thứ hai sẽ tái sử dụng bộ nhớ đệm biên dịch.

Bước 2: lấy hoặc cập nhật kho mã

aeronyx-node.sh không phải là lệnh hệ thống. Nó được phân phối trong kho mã. Đây là dòng lệnh clone hoặc cập nhật mà Nodeboard sử dụng:

bash
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

Luôn truyền --repo-dir "$PWD" (hoặc --repo-dir /root/open/AeroNyx) cho tập lệnh. Nếu không có tham số này, install, upgrade, health và status mặc định dùng /opt/aeronyx/AeroNyx.

Bước 3: chạy quickstart

Chạy quickstart mà không đưa mã vào dòng lệnh. Khi chạy trong một terminal, lệnh sẽ hỏi mã bằng một lời nhắc ẩn, nhờ đó mã không bị hiển thị lại, không được lưu trong lịch sử shell và không được truyền như một đối số tiến trình:

bash
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 là tên hiển thị trong Nodeboard và trong danh sách nút VPN.
  • --region là mã quốc gia ISO 3166-1 alpha-2.
  • --public-vpn công bố nút trong nhóm VPN công khai. Bỏ tham số này để giữ nút ở chế độ riêng tư.

Tại Nodeboard registration code: hãy dán mã và nhấn Enter. Xem lại kế hoạch, sau đó gõ INSTALL.

Về lệnh do Nodeboard tạo

Lệnh quickstart của Nodeboard đặt mã ngay trong dòng lệnh, ví dụ AERONYX_REGISTRATION_CODE='<code>' ./deploy/node/aeronyx-node.sh quickstart --repo-dir "$PWD" --branch main --quick. Cách này hoạt động, nhưng mã sẽ được lưu trong lịch sử shell của bạn. Nếu bạn dùng nó:

  • Kiểm tra echo "$HISTCONTROL". Nếu kết quả chứa ignorespace hoặc ignoreboth, hãy bắt đầu lệnh bằng một dấu cách và Bash sẽ không ghi lại lệnh đó.
  • Nếu không, hãy xóa mục đó sau khi chạy bằng history -d <number>.

Mã chỉ dùng một lần và hết hạn sau 15 phút, điều này hạn chế mức độ phơi nhiễm, nhưng đừng dán mã vào phiếu hỗ trợ, ảnh chụp màn hình hay cuộc trò chuyện.

Cài đặt không tương tác

Để tự động hóa, hãy xem trước kế hoạch, sau đó truyền mã qua đầu vào chuẩn. read -rs giữ mã không hiện trên màn hình và không nằm trong lịch sử:

bash
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 không hỏi INSTALL. Chỉ dùng nó sau khi bạn đã xem lại kế hoạch.

Bước 4: xác minh nút

bash
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

Một nút mới khỏe mạnh cho thấy:

  • aeronyx-server ở trạng thái active, và health báo fail=0
  • trình cài đặt đã in ra [OK] Node admission accepted với health=ok, management=fresh và discovery=ready (và public_pool=online đối với nút công khai)
  • status in ra operator_status=ok và một bước tiếp theo
  • dòng JSON cuối cùng của health --json có "success":true; các cảnh báo xuất hiện trong checks

Trong Nodeboard, mã hiển thị completed, và nút xuất hiện trong Nodes cùng với tên, khu vực, chế độ hiển thị và một nhịp tim mới. Trang chi tiết nút hiển thị Capacity Decision là ready, watch, blocked hoặc waiting.

Đối với các bước kiểm tra hằng ngày, nhật ký, nâng cấp và khôi phục phiên bản cũ, xem Vận hành và kiểm tra một nút AeroNyx.

Tùy chọn: tham gia trạm chuyển tiếp mã hóa

Nút VPN và nút chuyển tiếp mã hóa là hai lựa chọn riêng biệt. Việc tham gia chuyển tiếp gồm ba phần: một API ngang hàng công khai có thể truy cập được, vai trò lưu và chuyển tiếp mù ChatRelay, và vai trò OnionMiddle không làm điểm thoát. Cả hai vai trò đều tắt trong cấu hình mặc định.

  1. Đảm bảo 8422/TCP có thể truy cập được từ internet.

  2. Chỉnh sửa /etc/aeronyx/server.toml (ví dụ nano /etc/aeronyx/server.toml) và đặt các khóa sau trong mục [discovery], dùng địa chỉ công khai của bạn:

    toml
    public_endpoint = "http://203.0.113.10:8422"
    public_discovery = true
    region = "DE"
    
  3. Kiểm tra tính hợp lệ của tệp:

    bash
    cd /root/open/AeroNyx
    ./target/release/aeronyx-server validate -c /etc/aeronyx/server.toml
    
  4. Bật ChatRelay mà không cần khởi động lại. Công cụ hỗ trợ sao lưu cấu hình, yêu cầu bạn gõ ENABLE CHATRELAY, kiểm tra tính hợp lệ và khôi phục bản sao lưu nếu kiểm tra thất bại:

    bash
    ./deploy/node/aeronyx-node.sh chat-relay --repo-dir "$PWD" --enable-chat-relay
    
  5. Bật OnionMiddle và khởi động lại trong một bước có bảo vệ. Lệnh yêu cầu bạn gõ ENABLE ONIONMIDDLE và từ chối khởi động lại nếu nút có phiên đang hoạt động hoặc không thể báo cáo số lượng phiên:

    bash
    ./deploy/node/aeronyx-node.sh onion-middle --repo-dir "$PWD" --enable-onion-middle --restart
    

    Nếu lệnh từ chối, hãy bật Maintenance Mode cho nút trong Settings của Nodeboard, chờ đến khi số phiên đang hoạt động về 0, rồi chạy lại. Không thêm --yes: tham số này bỏ qua bước xác nhận và cơ chế bảo vệ phiên đang hoạt động.

  6. Kiểm tra mức sẵn sàng chuyển tiếp:

    bash
    ./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --two-hop --json
    

Bật một vai trò không đồng nghĩa với việc được dùng cho các tuyến. Một nút chỉ trở thành ứng viên tuyến sau khi các nút ngang hàng thấy nó có thể truy cập được và có bằng chứng kiểm chứng đường đi còn mới. Xem Khám phá nút và chuyển tiếp mã hóa.

Tham gia mà không cần Nodeboard

join cài đặt nút và gửi bộ mô tả có chữ ký của nút đến một nút hạt giống để được chấp nhận ở Giai đoạn A (Stage-A), mà không cần mã đăng ký hay tài khoản Nodeboard:

bash
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 nhận từ 1 đến 8 nút hạt giống công khai; yêu cầu được gửi đến nút đầu tiên. --public-endpoint là API ngang hàng có thể truy cập được của nút bạn. Cả hai phải là URL http hoặc https với một địa chỉ IP công khai, không phải tên máy chủ.
  • Lệnh chạy với quyền root trên Linux có systemd, và cần Python 3.11 trở lên, hoặc python3 có gói tomli.
  • Lệnh đặt sáu giá trị [discovery] (enabled, advertise_self, public_discovery, gossip_enabled, public_endpoint, seed_endpoints) và giữ nguyên phần còn lại của tệp.
  • Nếu dịch vụ đã chạy với các thiết lập khác, lệnh dừng lại mà không thay đổi gì.
  • --commit <40-hex SHA> cố định chính xác commit mã nguồn. --dry-run in ra kết quả dự kiến mà không thay đổi gì. --check-only xác minh một nút đã tham gia mà không gửi gì.

Kết quả thành công là "admission_stage":"stage_a_candidate" với "route_authority":false và "route_ready":false. Việc được chấp nhận ở Giai đoạn A có nghĩa là nút hạt giống đã chấp nhận bộ mô tả của bạn. Điều đó không làm cho nút có thể định tuyến, không đưa nút vào danh sách của Nodeboard hay nhóm VPN, và không khiến nút đủ điều kiện nhận thanh toán. Câu trả lời của nút hạt giống được truyền qua HTTP thuần trừ khi nút hạt giống dùng HTTPS, vì vậy nó không phải là một biên nhận mật mã.

Triển khai TEE bằng Docker

Kho mã cũng chứa một bản triển khai container cho các máy ảo bảo mật chạy dstack (Phala Cloud hoặc Intel TDX tự lưu trữ): deploy/node/Dockerfile, deploy/node/compose.tee.yaml, deploy/node/server.tee.toml và deploy/node/tee-entrypoint.sh.

Vai trò này không phải là nút VPN:

  • vpn.enabled = false: không có thiết bị TUN, không có proxy DNS, không có MemChain. Container chạy với tất cả các capability Linux bị loại bỏ và no-new-privileges.
  • Nó chạy trạm chuyển tiếp onion (advertise_onion_middle = true), ChatRelay và hộp thư ẩn danh, và chỉ mở 8422.
  • Danh tính nút đến từ dịch vụ quản lý khóa dstack ([server_key] source = "dstack"). Không có tệp khóa.
  • Nút khởi đầu được ghim. server.tee.toml ghim bốn nút khởi đầu bằng discovery.pinned_seeds. Nút không có ảnh chụp của nhà vận hành thì không còn điểm neo tin cậy nào khác, và mỗi nút được ghim chỉ được liên hệ qua TLS ràng buộc danh tính. Hãy giữ hoặc thay các mục ghim; xem Khám phá nút và chuyển tiếp đa chặng mã hóa.

Để triển khai:

  1. Chọn một image phát hành từ ghcr.io/aeronyxnetwork/aeronyx-node. CI biên dịch các image linux/amd64 từ các tag node-v* và đính kèm một chứng thực nguồn gốc bản dựng. Tìm digest, ví dụ bằng docker buildx imagetools inspect ghcr.io/aeronyxnetwork/aeronyx-node:<tag>.
  2. Trong compose.tee.yaml, thay IMAGE_DIGEST bằng digest đó. Luôn cố định theo digest, không theo tag; trong một máy ảo dstack, tệp compose là một phần của bản triển khai được đo lường.
  3. Đặt AERONYX_PUBLIC_ENDPOINT thành origin https:// mà cổng dstack gán cho cổng 8422. Entrypoint từ chối mọi scheme khác.
  4. Tùy chọn đặt AERONYX_REGION (mặc định tee).
  5. Chỉ trong lần khởi động đầu tiên, cung cấp AERONYX_REGISTRATION_CODE dưới dạng một bí mật được mã hóa. Entrypoint chuyển nó qua pipe tới aeronyx-server register --code-stdin. Sau khi node_info.json tồn tại trong volume /var/lib/aeronyx, mã không còn cần thiết nữa.

Container không bao gồm aeronyx-node.sh. Hãy giám sát một nút TEE trong Nodeboard và qua API khám phá công khai của nút.

Cài đặt với trợ lý lập trình AI

Các trợ lý chạy trong terminal như Claude Code, Codex, OpenClaw hoặc Hermes có thể thực hiện quy trình này. Nodeboard cung cấp sẵn một AI assistant prompt bên cạnh mỗi mã. Các quy tắc sau áp dụng cho bất kỳ trợ lý nào bạn dùng.

Nhà vận hành là con người:

  • cung cấp máy chủ và chấp thuận mọi thay đổi trên máy chủ
  • tự mình gõ INSTALL sau khi đọc kế hoạch
  • giữ mã đăng ký ở chế độ riêng tư. Lời nhắc AI của Nodeboard chứa mã, vì vậy dán lời nhắc đó đồng nghĩa với chia sẻ mã cho nhà cung cấp của trợ lý. Để tránh điều đó, hãy để trợ lý cập nhật kho mã và chạy lệnh plan không cần mã, sau đó tự chạy quickstart và gõ mã tại lời nhắc ẩn. Rồi giao lại cho trợ lý để xác minh.

Trợ lý phải:

  • chỉ dùng deploy/node/aeronyx-node.sh từ github.com/AeroNyxNetwork/AeroNyx, và truyền --repo-dir
  • chỉ dùng các tùy chọn mà tập lệnh có mô tả (./deploy/node/aeronyx-node.sh help). Tùy chọn không xác định sẽ thất bại; ví dụ, --api-base khiến trình cài đặt dừng với Unknown option.
  • hiển thị hoặc tóm tắt kế hoạch trước mọi thay đổi trên máy chủ và chờ chấp thuận
  • chạy status sau khi cài đặt hoặc nâng cấp và báo cáo operator_status, operator_title, operator_detail và operator_next_step, sau đó chạy health --json khi cần thêm chi tiết
  • báo cáo cảnh báo như là cảnh báo, và không tuyên bố thành công chỉ dựa trên việc một tiến trình đang chạy
  • ưu tiên upgrade --no-restart trừ khi bạn chấp thuận khởi động lại trong khung giờ bảo trì
  • không bao giờ dùng --force hoặc --yes, và không bao giờ khởi động lại một nút có phiên đang hoạt động, nếu không có sự chấp thuận rõ ràng của bạn
  • không bao giờ in ra mã đăng ký, khóa riêng tư, bí mật API, IP công khai của máy khách, đích đến, nội dung DNS, nội dung gói tin hoặc bản rõ trò chuyện

Hoàn tất có nghĩa là:

  • kho mã đang ở main và commit đã được báo cáo
  • quickstart hoặc install đã kết thúc với Node admission accepted
  • status báo operator_status=ok, hoặc mỗi cảnh báo đều đã được giải thích
  • health --json báo "success":true
  • Nodeboard hiển thị nút với một nhịp tim mới và một Capacity Decision
  • Alerts / Events → Incident Closure không có mục open nào chưa được xem xét cho nút
  • bạn biết trang chi tiết của nút trong Nodeboard

Một nút đã đăng ký báo cáo những gì

Các công cụ chẩn đoán cục bộ (status, health, relay-probe) chỉ in ra các giá trị tổng hợp: trạng thái dịch vụ, dung lượng, bộ đếm gói tin, mức sẵn sàng khám phá và kết quả kiểm chứng.

Một nút VPN đã đăng ký cũng báo cáo từng phiên VPN cho backend AeroNyx: ID phiên, khóa của máy khách (client_wallet), IP ảo của đường hầm, số byte, thời gian và chất lượng liên kết. Nút không báo cáo IP công khai của máy khách, đích đến, nội dung DNS hoặc nội dung gói tin. Nhà vận hành có thể xem các bản ghi phiên này cho các nút của chính họ trong Nodeboard; xem Hướng dẫn bảng điều khiển nhà vận hành Nodeboard. Giống như mọi máy chủ VPN, bản thân nút xử lý lưu lượng của máy khách ở dạng rõ tại điểm thoát, vì vậy nhà vận hành phải tuân thủ Chính sách dành cho nhà vận hành nút.

Trang liên quan

<!-- faq:start -->

Câu hỏi thường gặp

aeronyx-node.sh đến từ đâu?

Đó là một tệp trong kho mã nút AeroNyx tại deploy/node/aeronyx-node.sh, không phải là lệnh hệ thống. Hãy clone hoặc cập nhật https://github.com/AeroNyxNetwork/AeroNyx vào /root/open/AeroNyx và chạy nó từ đó với --repo-dir "$PWD".

Làm thế nào để giữ mã đăng ký không nằm trong lịch sử shell?

Chạy quickstart mà không kèm mã và gõ mã tại lời nhắc ẩn Nodeboard registration code:. Đối với tập lệnh, đọc mã bằng read -rs và chuyển nó qua pipe tới install --quick --registration-code-stdin.

Vì sao tập lệnh tìm trong /opt/aeronyx/AeroNyx?

Đó là giá trị mặc định tích hợp sẵn của tập lệnh cho --repo-dir, trong khi Nodeboard clone vào /root/open/AeroNyx. Hãy truyền --repo-dir cho mọi lệnh để install, health, status và upgrade đều dùng bản checkout mà dịch vụ đang chạy.

Điều gì xảy ra nếu mã của tôi hết hạn trong khi cài đặt?

Bước đăng ký thất bại và trình cài đặt dừng lại trước khi khởi động dịch vụ. Mã được kiểm tra sau khi biên dịch, vì vậy hãy tạo một mã mới và chạy lại quickstart; lần chạy thứ hai sẽ tái sử dụng bộ nhớ đệm biên dịch.

Tôi có cần Nodeboard để chạy một nút không?

Không, join cài đặt một nút và gửi nút đó để được chấp nhận ở Giai đoạn A mà không cần mã đăng ký. Một nút tham gia theo cách này không thể định tuyến, không được liệt kê trong Nodeboard hay nhóm VPN, và không đủ điều kiện nhận thanh toán.

Tôi có thể chạy một nút trong máy ảo bảo mật không?

Có, kho mã bao gồm một bản triển khai Docker cho các máy ảo bảo mật dstack, chạy trạm chuyển tiếp onion, ChatRelay và hộp thư ẩn danh. Bản triển khai này không cung cấp dịch vụ VPN và lấy danh tính từ dịch vụ quản lý khóa dstack.

<!-- faq:end -->