تثبيت عقدة AeroNyx وتسجيلها

AeroNyx13 دقيقة قراءة

ثبّت عقدة AeroNyx مفتوحة المصدر على خادم Linux باستخدام أمر quickstart الموجود في المستودع، وسجّلها برمز Nodeboard صالح لمرة واحدة، وتحقّق من قبولها في الشبكة. يتناول الدليل أيضًا أدوار الترحيل، والانضمام دون إذن، والنشر في بيئة TEE، والتثبيت بمساعدة الذكاء الاصطناعي.

يشرح هذا الدليل تثبيت برنامج عقدة AeroNyx مفتوح المصدر على خادم Linux، وتسجيله في حساب المشغّل الخاص بك في Nodeboard باستخدام رمز صالح لمرة واحدة، والتحقق من أن الشبكة قد قبلت العقدة. المسار المدعوم هو سكربت المستودع deploy/node/aeronyx-node.sh quickstart، وهو الأمر نفسه الذي يولّده Nodeboard لك.

قبل أن تشغّل عقدة، اقرأ سياسة مشغّلي العُقد.

قبل أن تبدأ

البندالمتطلَّب
نظام التشغيلLinux مع systemd. يثبّت المُثبِّت الحزم باستخدام apt-get (Debian وUbuntu) أو dnf أو yum.
الوصولصدفة بصلاحيات root. تفترض جميع الأوامر في هذا الدليل تنفيذ sudo -i أولًا.
جهاز TUNيجب أن يكون /dev/net/tun موجودًا لمستوى بيانات VPN.
الذاكرةيُصدر المُثبِّت تحذيرًا إذا كانت أقل من 2 GB ثم يتابع. تُبنى العقدة من المصدر على الخادم، لذا فإن 4 GB أو أكثر خيار أكثر أمانًا.
القرصيُصدر المُثبِّت تحذيرًا إذا كانت المساحة الحرة أقل من 4 GB ثم يتابع. خصّص 20 GB أو أكثر لذاكرة التخزين المؤقت للبناء وللنسخ الاحتياطية من الإصدارات التي يحتفظ بها مسار الترقية.
المنافذ الواردة51820/UDP (مستمع VPN) و8422/TCP (الاكتشاف الموقّع وواجهة API للأقران). افتحها في جدار الحماية السحابي لديك؛ فالمُثبِّت لا يغيّر قواعد جدار الحماية للاتصالات الواردة.
محلي فقط127.0.0.1:8421 هي واجهة API المحلية للصحة والإدارة. لا تكشفها للخارج.

لماذا root: يوجد المستودع في /root/open/AeroNyx، ويكتب المُثبِّت /etc/aeronyx و/var/lib/aeronyx بالوضع 700، وserver.toml بالوضع 600. تفشل الأوامر التي تقرأ هذه المسارات عند تشغيلها بمستخدمين آخرين، ويرفض Git قراءة نسخة مستودع مملوكة لـ root من حساب آخر ("dubious ownership").

ما الذي يفعله quickstart

ينفّذ quickstart أربع خطوات، ويتوقف قبل أي تغيير على المضيف إلى أن توافق:

  1. يطبع خطة التثبيت بعد تحديد قيمها (للقراءة فقط).
  2. ينتظر أن تكتب INSTALL. الضغط على Enter يوقفه بأمان.
  3. يُجري فحوصات ما قبل التثبيت، ويثبّت الحزم وسلسلة أدوات Rust المحدّدة إصدارها في المستودع، ويكتب /etc/aeronyx/server.toml إن لم يكن موجودًا (ويُحتفظ بالملف الموجود)، ويُعدّ تمرير IP وNAT، ويبني العقدة، ويثبّت وحدة systemd المسمّاة aeronyx-server، ويسجّل هوية العقدة باستخدام رمزك، ويشغّل الخدمة، وينتظر حتى 120 ثانية للقبول في الشبكة.
  4. يطبع status وملخصًا لـ health --json.

يتحقق انتظار القبول من أن الصحة المحلية تُبلغ ok، وأن الواجهة الخلفية أعادت سياسة حديثة (أي أن دورة النبضة ذهابًا وإيابًا تعمل)، وأن لدى الاكتشاف قرينًا موقّعًا واحدًا على الأقل جرى التحقق منه وأنه أكمل جولة تناقل (gossip)، ومن أن العقدة، في حالة العُقد العامة، مُدرجة في المجمّع العام.

الخطوة 1: إنشاء رمز تسجيل

  1. سجّل الدخول إلى Nodeboard وافتح Registration Codes.
  2. اختر Generate Code.
  3. أبقِ الرمز سريًّا. تنتهي صلاحيته بعد 15 دقيقة، ويعمل مرة واحدة، ويربط العقدة الجديدة بالحساب الذي أنشأه.

بعد ذلك يعرض Nodeboard أمر quickstart، وأوامر المعاينة والتثبيت خطوة بخطوة، وأمرًا لعرض الحالة، ونص توجيه لمساعد الذكاء الاصطناعي. ويتتبّع العمود Install Progress سير المُثبِّت عبر not_started → planning → running → completed | failed.

تتحقق الواجهة الخلفية من الرمز عندما يصل المُثبِّت إلى خطوة التسجيل، وهي تأتي بعد البناء. قد يستغرق البناء الأول على خادم صغير أكثر من 15 دقيقة. إذا فشل التسجيل حينها بسبب انتهاء صلاحية الرمز، فأنشئ رمزًا جديدًا وشغّل quickstart مرة أخرى؛ إذ يعيد التشغيل الثاني استخدام ذاكرة التخزين المؤقت للبناء.

الخطوة 2: الحصول على المستودع أو تحديثه

aeronyx-node.sh ليس أمرًا من أوامر النظام، بل يأتي ضمن المستودع. هذا هو سطر الاستنساخ أو التحديث الذي يستخدمه Nodeboard:

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

مرّر دائمًا --repo-dir "$PWD" (أو --repo-dir /root/open/AeroNyx) إلى السكربت. فبدونه تستخدم install وupgrade وhealth وstatus المسار الافتراضي /opt/aeronyx/AeroNyx.

الخطوة 3: تشغيل quickstart

شغّل quickstart دون تمرير الرمز في سطر الأوامر. عندما يعمل في طرفية، يطلب الرمز عبر مُطالبة مخفية، فلا يظهر الرمز على الشاشة، ولا يُخزَّن في سجل الصدفة، ولا يُمرَّر وسيطًا للعملية:

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 هو الاسم المعروض في Nodeboard وفي قائمة عُقد VPN.
  • --region هو رمز دولة وفق معيار ISO 3166-1 alpha-2.
  • --public-vpn ينشر العقدة في مجمّع VPN العام. احذفه لإبقاء العقدة خاصة.

عند ظهور Nodeboard registration code: الصق الرمز واضغط Enter. راجع الخطة، ثم اكتب INSTALL.

عن الأمر الذي يولّده Nodeboard

يضع أمر quickstart الذي يولّده Nodeboard الرمز داخل السطر نفسه، على سبيل المثال AERONYX_REGISTRATION_CODE='<code>' ./deploy/node/aeronyx-node.sh quickstart --repo-dir "$PWD" --branch main --quick. هذا يعمل، لكن الرمز يُحفظ في سجل الصدفة لديك. إذا استخدمته:

  • تحقّق من echo "$HISTCONTROL". إذا كان يحتوي على ignorespace أو ignoreboth، فابدأ الأمر بمسافة ولن يسجّله Bash.
  • وإلا فاحذف الإدخال بعد ذلك باستخدام history -d <number>.

الرمز صالح لاستخدام واحد وتنتهي صلاحيته بعد 15 دقيقة، مما يحدّ من انكشافه، لكن لا تلصقه في التذاكر أو لقطات الشاشة أو المحادثات.

التثبيت غير التفاعلي

لأغراض الأتمتة، اعرض المعاينة أولًا، ثم مرّر الرمز عبر الإدخال القياسي. يُبقي read -rs الرمز بعيدًا عن الشاشة وخارج السجل:

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 كتابة INSTALL. استخدمه فقط بعد أن تراجع الخطة.

الخطوة 4: التحقق من العقدة

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

تُظهر العقدة الجديدة السليمة ما يلي:

  • aeronyx-server في الحالة active، وhealth يُبلغ fail=0
  • طبع المُثبِّت [OK] Node admission accepted مع health=ok وmanagement=fresh وdiscovery=ready (وpublic_pool=online للعقدة العامة)
  • يطبع status القيمة operator_status=ok والخطوة التالية
  • يحتوي سطر JSON الأخير من health --json على "success":true؛ وتظهر التحذيرات تحت checks

في Nodeboard، يظهر الرمز بالحالة completed، وتظهر العقدة تحت Nodes مع اسمها ومنطقتها ومستوى ظهورها ونبضة حديثة. وتعرض صفحة تفاصيل العقدة Capacity Decision بإحدى القيم ready أو watch أو blocked أو waiting.

للفحوصات اليومية والسجلات والترقيات والتراجع، راجع تشغيل عقدة AeroNyx وفحصها.

اختياري: الانضمام إلى المُرحِّل المشفّر

عقدة VPN وعقدة المُرحِّل المشفّر خياران منفصلان. تتكوّن المشاركة في الترحيل من ثلاثة أجزاء: واجهة API عامة للأقران يمكن الوصول إليها، ودور ChatRelay الأعمى للتخزين وإعادة التوجيه، ودور OnionMiddle الذي لا يعمل نقطةَ خروج. كلا الدورين معطّل في الإعداد الافتراضي.

  1. تأكّد من أن 8422/TCP يمكن الوصول إليه من الإنترنت.

  2. حرّر /etc/aeronyx/server.toml (على سبيل المثال nano /etc/aeronyx/server.toml) واضبط هذه المفاتيح في القسم [discovery]، مستخدمًا عنوانك العام:

    toml
    public_endpoint = "http://203.0.113.10:8422"
    public_discovery = true
    region = "DE"
    
  3. تحقّق من صحة الملف:

    bash
    cd /root/open/AeroNyx
    ./target/release/aeronyx-server validate -c /etc/aeronyx/server.toml
    
  4. فعّل ChatRelay دون إعادة التشغيل. تنشئ الأداة المساعدة نسخة احتياطية من الإعداد، وتطلب منك كتابة ENABLE CHATRELAY، وتتحقق من الصحة، وتستعيد النسخة الاحتياطية إذا فشل التحقق:

    bash
    ./deploy/node/aeronyx-node.sh chat-relay --repo-dir "$PWD" --enable-chat-relay
    
  5. فعّل OnionMiddle وأعد التشغيل في خطوة واحدة محمية. تطلب منك كتابة ENABLE ONIONMIDDLE، وترفض إعادة التشغيل إذا كانت لدى العقدة جلسات نشطة أو إذا تعذّر عليها الإبلاغ عن عدد الجلسات:

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

    إذا رفضت، ففعّل Maintenance Mode للعقدة من Settings في Nodeboard، وانتظر حتى يصل عدد الجلسات النشطة إلى الصفر، ثم شغّلها مرة أخرى. لا تُضف --yes: فهو يتخطى التأكيد وحماية الجلسات النشطة.

  6. افحص جاهزية الترحيل:

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

تفعيل دور ما لا يعني أن العقدة تُستخدم في المسارات. لا تصبح العقدة مرشّحة للمسارات إلا بعد أن يراها الأقران قابلة للوصول وتتوفر أدلة حديثة على إثبات المسار. راجع اكتشاف العُقد والمُرحِّل المشفّر.

الانضمام دون Nodeboard

يثبّت join العقدة ويرسل واصفها الموقّع إلى عقدة بذرية (seed) للقبول في المرحلة A، دون رمز تسجيل أو حساب في 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 من 1 إلى 8 عُقد بذرية عامة؛ ويُرسَل الطلب إلى أولاها. أما --public-endpoint فهو واجهة API للأقران الخاصة بعقدتك والقابلة للوصول. يجب أن يكون كلاهما عنوان URL بمخطط http أو https يحتوي على عنوان IP عام، لا على اسم مضيف.
  • يعمل بصلاحيات root على Linux مع systemd، ويحتاج إلى Python 3.11 أو أحدث، أو python3 مع الحزمة tomli.
  • يضبط ست قيم في [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. يعني القبول في المرحلة A أن العقدة البذرية قبلت واصفك. ولا يجعل ذلك العقدة قابلة للتوجيه، ولا يُدرجها في Nodeboard أو في مجمّع VPN، ولا يجعلها مؤهلة للدفع. ينتقل ردّ العقدة البذرية عبر HTTP عادي ما لم تستخدم العقدة البذرية HTTPS، لذا فهو ليس إيصالًا تشفيريًا.

النشر في بيئة TEE باستخدام Docker

يحتوي المستودع أيضًا على نشر قائم على الحاويات للأجهزة الافتراضية السرية التي تشغّل 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 ومع no-new-privileges.
  • يشغّل مُرحِّل البصل (advertise_onion_middle = true) وChatRelay وصندوق البريد المجهول، ولا يكشف إلا المنفذ 8422.
  • تأتي هوية العقدة من خدمة إدارة المفاتيح في dstack ([server_key] source = "dstack"). لا يوجد ملف مفاتيح.
  • البذور المثبّتة. يثبّت server.tee.toml أربع عُقد بذرة عبر discovery.pinned_seeds. العقدة التي لا تملك لقطة من المشغّل ليست لديها نقاط ارتكاز أخرى للثقة، ولا يُتصل بكل عقدة مثبّتة إلا عبر TLS المرتبط بالهوية. أبقِ التثبيتات أو استبدلها؛ راجع اكتشاف العُقد والترحيل المشفّر متعدد القفزات.

للنشر:

  1. اختر صورة إصدار من ghcr.io/aeronyxnetwork/aeronyx-node. يبني نظام CI صور linux/amd64 من وسوم node-v* ويرفق بها شهادة مصدر البناء. اعثر على ملخّص الصورة (digest)، على سبيل المثال باستخدام docker buildx imagetools inspect ghcr.io/aeronyxnetwork/aeronyx-node:<tag>.
  2. في compose.tee.yaml، استبدل IMAGE_DIGEST بذلك الملخّص. ثبّت الصورة دائمًا بالملخّص لا بالوسم؛ ففي الجهاز الافتراضي الذي يشغّل dstack يكون ملف compose جزءًا من النشر المُقاس.
  3. اضبط AERONYX_PUBLIC_ENDPOINT على أصل https:// الذي تخصّصه بوابة dstack للمنفذ 8422. ترفض نقطة الدخول أي مخطط آخر.
  4. اضبط اختياريًا AERONYX_REGION (القيمة الافتراضية tee).
  5. في التشغيل الأول فقط، قدّم AERONYX_REGISTRATION_CODE بوصفه سرًّا مشفّرًا. تمرّره نقطة الدخول عبر أنبوب إلى aeronyx-server register --code-stdin. بعد أن يصبح node_info.json موجودًا في وحدة التخزين /var/lib/aeronyx، لا تعود هناك حاجة إلى الرمز.

لا تتضمن الحاوية aeronyx-node.sh. راقب عقدة TEE في Nodeboard ومن خلال واجهة API العامة للاكتشاف الخاصة بها.

التثبيت باستخدام مساعد برمجة يعمل بالذكاء الاصطناعي

يمكن لمساعدي الطرفية مثل Claude Code وCodex وOpenClaw وHermes تنفيذ هذا الإجراء. يقدّم Nodeboard نص توجيه جاهزًا باسم AI assistant prompt بجوار كل رمز. تنطبق هذه القواعد أيًّا كان المساعد الذي تستخدمه.

المشغّل البشري:

  • يوفّر الخادم ويوافق على كل تغيير على المضيف
  • يكتب INSTALL بنفسه بعد قراءة الخطة
  • يُبقي رمز التسجيل سريًّا. يحتوي نص التوجيه الذي يقدّمه Nodeboard للذكاء الاصطناعي على الرمز، لذا فإن لصقه يعني مشاركة الرمز مع مزوّد المساعد. لتجنّب ذلك، دع المساعد يحدّث المستودع ويشغّل plan الذي لا يحتاج إلى الرمز، ثم شغّل quickstart بنفسك واكتب الرمز في المُطالبة المخفية. بعد ذلك أعِد المهمة إلى المساعد للتحقق.

يجب على المساعد:

  • استخدام deploy/node/aeronyx-node.sh من github.com/AeroNyxNetwork/AeroNyx فقط، وتمرير --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 يعرض العقدة بنبضة حديثة وبقيمة Capacity Decision
  • أن Alerts / Events → Incident Closure لا يحتوي على عنصر open غير مُراجَع للعقدة
  • أنك تعرف صفحة تفاصيل العقدة في Nodeboard

ما الذي تُبلغ عنه العقدة المسجّلة

تطبع التشخيصات المحلية (status وhealth وrelay-probe) قيمًا مجمّعة فقط: حالة الخدمة، والسعة، وعدّادات الحزم، وجاهزية الاكتشاف، ونتائج الإثبات.

كما تُبلغ عقدة VPN المسجّلة الواجهةَ الخلفية لـ AeroNyx عن كل جلسة VPN: معرّف الجلسة، ومفتاح العميل (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".

كيف أُبقي رمز التسجيل خارج سجل الصدفة؟

شغّل quickstart دون الرمز واكتبه في المُطالبة المخفية Nodeboard registration code:. أما في السكربتات، فاقرأه باستخدام read -rs ومرّره عبر أنبوب إلى install --quick --registration-code-stdin.

لماذا يبحث السكربت في /opt/aeronyx/AeroNyx؟

هذه هي القيمة الافتراضية المضمّنة في السكربت لـ --repo-dir، بينما يستنسخ Nodeboard المستودع في /root/open/AeroNyx. مرّر --repo-dir في كل أمر حتى تستخدم أوامر التثبيت والصحة والحالة والترقية جميعها نسخة المستودع التي تعمل منها الخدمة.

ماذا يحدث إذا انتهت صلاحية الرمز أثناء التثبيت؟

تفشل خطوة التسجيل ويتوقف المُثبِّت قبل أن يشغّل الخدمة. يُتحقَّق من الرمز بعد البناء، لذا أنشئ رمزًا جديدًا وشغّل quickstart مرة أخرى؛ إذ يعيد التشغيل الثاني استخدام ذاكرة التخزين المؤقت للبناء.

هل أحتاج إلى Nodeboard لتشغيل عقدة؟

لا، يثبّت join عقدة ويقدّمها للقبول في المرحلة A دون رمز تسجيل. العقدة المنضمّة بهذه الطريقة ليست قابلة للتوجيه، ولا تُدرج في Nodeboard أو في مجمّع VPN، وليست مؤهلة للدفع.

هل يمكنني تشغيل عقدة في جهاز افتراضي سري؟

نعم، يتضمن المستودع نشرًا باستخدام Docker للأجهزة الافتراضية السرية التي تشغّل dstack، ويشغّل مُرحِّل البصل وChatRelay وصندوق البريد المجهول. ولا يقدّم خدمة VPN، ويأخذ هويته من خدمة إدارة المفاتيح في dstack.

<!-- faq:end -->