تثبيت عقدة AeroNyx وتسجيلها
ثبّت عقدة AeroNyx مفتوحة المصدر على خادم Linux باستخدام أمر quickstart الموجود في المستودع، وسجّلها برمز Nodeboard صالح لمرة واحدة، وتحقّق من قبولها في الشبكة. يتناول الدليل أيضًا أدوار الترحيل، والانضمام دون إذن، والنشر في بيئة TEE، والتثبيت بمساعدة الذكاء الاصطناعي.
يشرح هذا الدليل تثبيت برنامج عقدة AeroNyx مفتوح المصدر على خادم Linux، وتسجيله في حساب المشغّل الخاص بك في Nodeboard باستخدام رمز صالح لمرة واحدة، والتحقق من أن الشبكة قد قبلت العقدة. المسار المدعوم هو سكربت المستودع deploy/node/aeronyx-node.sh quickstart، وهو الأمر نفسه الذي يولّده Nodeboard لك.
- لوحة تحكم المشغّلين: app.aeronyx.network
- الشيفرة المصدرية (AGPL-3.0): github.com/AeroNyxNetwork/AeroNyx
قبل أن تشغّل عقدة، اقرأ سياسة مشغّلي العُقد.
قبل أن تبدأ
| البند | المتطلَّب |
|---|---|
| نظام التشغيل | 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 أربع خطوات، ويتوقف قبل أي تغيير على المضيف إلى أن توافق:
- يطبع خطة التثبيت بعد تحديد قيمها (للقراءة فقط).
- ينتظر أن تكتب
INSTALL. الضغط على Enter يوقفه بأمان. - يُجري فحوصات ما قبل التثبيت، ويثبّت الحزم وسلسلة أدوات Rust المحدّدة إصدارها في المستودع، ويكتب
/etc/aeronyx/server.tomlإن لم يكن موجودًا (ويُحتفظ بالملف الموجود)، ويُعدّ تمرير IP وNAT، ويبني العقدة، ويثبّت وحدة systemd المسمّاةaeronyx-server، ويسجّل هوية العقدة باستخدام رمزك، ويشغّل الخدمة، وينتظر حتى 120 ثانية للقبول في الشبكة. - يطبع
statusوملخصًا لـhealth --json.
يتحقق انتظار القبول من أن الصحة المحلية تُبلغ ok، وأن الواجهة الخلفية أعادت سياسة حديثة (أي أن دورة النبضة ذهابًا وإيابًا تعمل)، وأن لدى الاكتشاف قرينًا موقّعًا واحدًا على الأقل جرى التحقق منه وأنه أكمل جولة تناقل (gossip)، ومن أن العقدة، في حالة العُقد العامة، مُدرجة في المجمّع العام.
الخطوة 1: إنشاء رمز تسجيل
- سجّل الدخول إلى Nodeboard وافتح Registration Codes.
- اختر Generate Code.
- أبقِ الرمز سريًّا. تنتهي صلاحيته بعد 15 دقيقة، ويعمل مرة واحدة، ويربط العقدة الجديدة بالحساب الذي أنشأه.
بعد ذلك يعرض Nodeboard أمر quickstart، وأوامر المعاينة والتثبيت خطوة بخطوة، وأمرًا لعرض الحالة، ونص توجيه لمساعد الذكاء الاصطناعي. ويتتبّع العمود Install Progress سير المُثبِّت عبر 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 دون تمرير الرمز في سطر الأوامر. عندما يعمل في طرفية، يطلب الرمز عبر مُطالبة مخفية، فلا يظهر الرمز على الشاشة، ولا يُخزَّن في سجل الصدفة، ولا يُمرَّر وسيطًا للعملية:
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 الرمز بعيدًا عن الشاشة وخارج السجل:
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والخطوة التالية - يحتوي سطر JSON الأخير من
health --jsonعلى"success":true؛ وتظهر التحذيرات تحتchecks
في Nodeboard، يظهر الرمز بالحالة completed، وتظهر العقدة تحت Nodes مع اسمها ومنطقتها ومستوى ظهورها ونبضة حديثة. وتعرض صفحة تفاصيل العقدة Capacity Decision بإحدى القيم 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إذا رفضت، ففعّل Maintenance Mode للعقدة من Settings في Nodeboard، وانتظر حتى يصل عدد الجلسات النشطة إلى الصفر، ثم شغّلها مرة أخرى. لا تُضف
--yes: فهو يتخطى التأكيد وحماية الجلسات النشطة. -
افحص جاهزية الترحيل:
bash./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --two-hop --json
تفعيل دور ما لا يعني أن العقدة تُستخدم في المسارات. لا تصبح العقدة مرشّحة للمسارات إلا بعد أن يراها الأقران قابلة للوصول وتتوفر أدلة حديثة على إثبات المسار. راجع اكتشاف العُقد والمُرحِّل المشفّر.
الانضمام دون Nodeboard
يثبّت join العقدة ويرسل واصفها الموقّع إلى عقدة بذرية (seed) للقبول في المرحلة 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 للأقران الخاصة بعقدتك والقابلة للوصول. يجب أن يكون كلاهما عنوان 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 المرتبط بالهوية. أبقِ التثبيتات أو استبدلها؛ راجع اكتشاف العُقد والترحيل المشفّر متعدد القفزات.
للنشر:
- اختر صورة إصدار من
ghcr.io/aeronyxnetwork/aeronyx-node. يبني نظام CI صورlinux/amd64من وسومnode-v*ويرفق بها شهادة مصدر البناء. اعثر على ملخّص الصورة (digest)، على سبيل المثال باستخدامdocker buildx imagetools inspect ghcr.io/aeronyxnetwork/aeronyx-node:<tag>. - في
compose.tee.yaml، استبدلIMAGE_DIGESTبذلك الملخّص. ثبّت الصورة دائمًا بالملخّص لا بالوسم؛ ففي الجهاز الافتراضي الذي يشغّل dstack يكون ملف compose جزءًا من النشر المُقاس. - اضبط
AERONYX_PUBLIC_ENDPOINTعلى أصلhttps://الذي تخصّصه بوابة dstack للمنفذ 8422. ترفض نقطة الدخول أي مخطط آخر. - اضبط اختياريًا
AERONYX_REGION(القيمة الافتراضيةtee). - في التشغيل الأول فقط، قدّم
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، تتعامل العقدة نفسها مع حركة مرور العملاء بنص صريح عند نقطة الخروج، لذا يجب على المشغّلين الالتزام بـ سياسة مشغّلي العُقد.
صفحات ذات صلة
- تشغيل عقدة AeroNyx وفحصها
- دليل لوحة تحكم المشغّلين Nodeboard
- اكتشاف العُقد والمُرحِّل المشفّر
- إحصاءات الشبكة وحدود الخصوصية
الأسئلة الشائعة
من أين يأتي 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 -->