نشر Fly.io
الهدف: تشغيل OpenClaw Gateway على جهاز Fly.io مع تخزين دائم، وHTTPS تلقائي، وإتاحة الوصول عبر Discord/القنوات.ما الذي تحتاجه
- تثبيت flyctl CLI
- حساب Fly.io (الطبقة المجانية تعمل)
- تفويض النموذج: مفتاح Anthropic API (أو مفاتيح موفّرين آخرين)
- بيانات اعتماد القنوات: رمز بوت Discord، رمز Telegram، إلخ.
المسار السريع للمبتدئين
- استنساخ المستودع → تخصيص
fly.toml - إنشاء التطبيق + وحدة التخزين → تعيين الأسرار
- النشر باستخدام
fly deploy - الدخول عبر SSH لإنشاء التهيئة أو استخدام واجهة التحكم
1) إنشاء تطبيق Fly
lhr (لندن)، iad (فيرجينيا)، sjc (سان خوسيه).
2. تهيئة fly.toml
حرّرfly.toml ليتطابق مع اسم تطبيقك ومتطلباتك.
ملاحظة أمنية: التهيئة الافتراضية تكشف عنوان URL عامًا. لنشر مُحصّن بدون عنوان IP عام، راجع النشر الخاص أو استخدم fly.private.toml.
| الإعداد | السبب |
|---|---|
--bind lan | الربط مع 0.0.0.0 لكي يتمكن وكيل Fly من الوصول إلى Gateway |
--allow-unconfigured | البدء بدون ملف تهيئة (ستنشئ واحدًا لاحقًا) |
internal_port = 3000 | يجب أن يطابق --port 3000 (أو OPENCLAW_GATEWAY_PORT) لفحوصات الصحة في Fly |
memory = "2048mb" | 512MB صغيرة جدًا؛ يُوصى بـ 2GB |
OPENCLAW_STATE_DIR = "/data" | استمرار الحالة على مستوى الصوت |
3. تعيين الأسرار
- الارتباطات غير المحلية (
--bind lan) تتطلبOPENCLAW_GATEWAY_TOKENلأسباب أمنية. - تعامل مع هذه الرموز ككلمات مرور.
- فضّل متغيرات البيئة على ملف التهيئة لجميع مفاتيح API والرموز. هذا يُبقي الأسرار خارج
openclaw.jsonحيث قد تُكشف أو تُسجَّل عن غير قصد.
4.
5. إنشاء ملف التهيئة
ادخل عبر SSH إلى الجهاز لإنشاء تهيئة مناسبة:OPENCLAW_STATE_DIR=/data، يكون مسار التهيئة هو /data/openclaw.json.
ملاحظة: يمكن توفير رمز Discord من أحد الخيارين:
- متغير بيئة:
DISCORD_BOT_TOKEN(مُوصى به للأسرار) - ملف التهيئة:
channels.discord.token
DISCORD_BOT_TOKEN تلقائيًا.
أعد التشغيل للتطبيق:
6. الوصول إلى Gateway
واجهة التحكم
افتح في المتصفح:https://my-openclaw.fly.dev/
الصق رمز Gateway الخاص بك (الذي من OPENCLAW_GATEWAY_TOKEN) للمصادقة.
السجلات
وحدة تحكم SSH
استكشاف الأخطاء وإصلاحها
«التطبيق لا يستمع على العنوان المتوقع»
Gateway يرتبط بـ127.0.0.1 بدلًا من 0.0.0.0.
الحل: أضف --bind lan إلى أمر العملية في fly.toml.
فشل فحوصات الصحة / رفض الاتصال
لا يستطيع Fly الوصول إلى Gateway على المنفذ المُهيّأ. الحل: تأكّد من أنinternal_port يطابق منفذ Gateway (عيّن --port 3000 أو OPENCLAW_GATEWAY_PORT=3000).
مشاكل OOM / الذاكرة
تستمر الحاوية في إعادة التشغيل أو يتم إيقافها. دلائل:SIGABRT، v8::internal::Runtime_AllocateInYoungGeneration، أو إعادة تشغيل صامتة.
الحل: زِد الذاكرة في fly.toml:
مشاكل قفل Gateway
يرفض Gateway البدء مع أخطاء «قيد التشغيل بالفعل». يحدث هذا عندما تُعاد تشغيل الحاوية بينما يبقى ملف قفل PID على وحدة التخزين. الحل: احذف ملف القفل:/data/gateway.*.lock (ليس داخل دليل فرعي).
عدم قراءة التهيئة
إذا كنت تستخدم--allow-unconfigured، ينشئ Gateway تهيئة دنيا. يجب قراءة تهيئتك المخصّصة في /data/openclaw.json عند إعادة التشغيل.
تحقّق من وجود التهيئة:
كتابة التهيئة عبر SSH
أمرfly ssh console -C لا يدعم إعادة توجيه الصدفة. لكتابة ملف تهيئة:
fly sftp إذا كان الملف موجودًا بالفعل. احذفه أولًا:
عدم استمرار الحالة
إذا فقدت بيانات الاعتماد أو الجلسات بعد إعادة التشغيل، فهذا يعني أن دليل الحالة يكتب إلى نظام ملفات الحاوية. الحل: تأكّد من تعيينOPENCLAW_STATE_DIR=/data في fly.toml ثم أعد النشر.
التحديثات
تحديث أمر الجهاز
إذا احتجت إلى تغيير أمر البدء دون إعادة نشر كاملة:fly deploy، قد يُعاد تعيين أمر الجهاز إلى ما هو موجود في fly.toml. إذا أجريت تغييرات يدوية، فأعد تطبيقها بعد النشر.
النشر الخاص (مرتفع)
افتراضيًا، يخصّص Fly عناوين IP عامة، مما يجعل Gateway متاحًا علىhttps://your-app.fly.dev. هذا مريح لكنه يعني أن نشرك قابل للاكتشاف بواسطة ماسحات الإنترنت (Shodan، Censys، إلخ).
لنشر مُحصّن دون تعرّض عام، استخدم القالب الخاص.
متى تستخدم النشر الخاص
- تُجري مكالمات/رسائل صادرة فقط (لا توجد webhooks واردة)
- تستخدم أنفاق ngrok أو Tailscale لأي ردود webhook
- تصل إلى Gateway عبر SSH أو proxy أو WireGuard بدل المتصفح
- تريد نشرًا مخفيًا عن ماسحات الإنترنت
الإعداد
استخدمfly.private.toml بدل التهيئة القياسية:
fly ips list فقط عنوان IP من النوع private:
الوصول إلى نشر خاص
نظرًا لعدم وجود عنوان URL عام، استخدم إحدى الطرق التالية: الخيار 1: proxy محلي (الأبسط)Webhooks مع النشر الخاص
إذا احتجت إلى ردود webhook (Twilio، Telnyx، إلخ) دون تعرّض عام: دون التعرض العلني: دون التعرض العلني:- نفق ngrok — شغّل ngrok داخل الحاوية أو كحاوية جانبية
- Tailscale Funnel — اكشف مسارات محددة عبر Tailscale
- صادر فقط — يعمل بعض المزوّدين (Twilio) جيدًا للمكالمات الصادرة دون webhooks
webhookSecurity.allowedHosts إلى اسم مضيف النفق العام ليتم قبول رؤوس المضيف المُعاد توجيهها.
فوائد أمنية
| الجانب | عامة | خاص |
|---|---|---|
| ماسحات الإنترنت | قابل للاكتشاف | مخفي |
| الهجمات المباشرة | ممكنة | محظور |
| الوصول لواجهة التحكم | متصفح | Proxy/VPN |
| تسليم Webhook | مباشر | عبر نفق |
ملاحظات
- يستخدم Fly.io معمارية x86 (وليس ARM)
- ملف Dockerfile متوافق مع المعماريتين
- لتهيئة WhatsApp/Telegram، استخدم
fly ssh console - توجد البيانات الدائمة على وحدة التخزين في
/data - يتطلب Signal Java + signal-cli؛ استخدم صورة مخصّصة واحتفظ بالذاكرة عند 2GB+.
التكلفة
مع التهيئة المُوصى بها (shared-cpu-2x، ذاكرة 2GB):
- حوالي 10–15 دولارًا شهريًا حسب الاستخدام
- تتضمن الطبقة المجانية بعض المخصصات