الهدف: تشغيل OpenClaw Gateway على جهاز Fly.io مع تخزين دائم وHTTPS تلقائي وإمكانية وصول Discord/القنوات.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
ما تحتاج إليه
- تثبيت flyctl CLI
- حساب Fly.io (تعمل الطبقة المجانية)
- مصادقة النموذج: مفتاح API لمزوّد النموذج الذي تختاره
- بيانات اعتماد القناة: رمز بوت Discord، رمز Telegram، وما إلى ذلك.
المسار السريع للمبتدئين
- استنسخ المستودع ← خصّص
fly.toml - أنشئ التطبيق + وحدة التخزين ← عيّن الأسرار
- انشر باستخدام
fly deploy - ادخل عبر SSH لإنشاء الإعدادات أو استخدم واجهة التحكم
إنشاء تطبيق Fly
lhr (لندن)، iad (فرجينيا)، sjc (سان خوسيه).تهيئة fly.toml
عدّل تستخدم صورة Docker الخاصة بـ OpenClaw
fly.toml ليتوافق مع اسم تطبيقك ومتطلباتك.ملاحظة أمنية: تعرض الإعدادات الافتراضية عنوان URL عامًا. لنشر محصّن بلا IP عام، راجع النشر الخاص أو استخدم deploy/fly.private.toml.tini كنقطة دخول. تستبدل أوامر عمليات Fly قيمة Docker CMD من دون استبدال ENTRYPOINT، لذلك تظل العملية تعمل تحت tini.الإعدادات الأساسية:| الإعداد | السبب |
|---|---|
--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" | يحافظ على الحالة في وحدة التخزين |
تعيين الأسرار
- تتطلب عمليات الربط غير الاسترجاعية (
--bind lan) مسار مصادقة صالحًا لـ Gateway. يستخدم مثال Fly.io هذاOPENCLAW_GATEWAY_TOKEN، لكنgateway.auth.passwordأو نشرtrusted-proxyغير استرجاعي مهيأ بشكل صحيح يفيان بالمتطلب أيضًا. - تعامل مع هذه الرموز مثل كلمات المرور.
- فضّل متغيرات البيئة على ملف الإعدادات لكل مفاتيح API والرموز. هذا يُبقي الأسرار خارج
openclaw.jsonحيث قد تُكشف أو تُسجّل عن طريق الخطأ.
النشر
إنشاء ملف الإعدادات
ادخل إلى الجهاز عبر SSH لإنشاء إعدادات مناسبة:أنشئ دليل الإعدادات والملف:ملاحظة: مع
OPENCLAW_STATE_DIR=/data، يكون مسار الإعدادات هو /data/openclaw.json.ملاحظة: استبدل https://my-openclaw.fly.dev بمنشأ تطبيق Fly الحقيقي لديك.
يزرع بدء تشغيل Gateway مناشئ واجهة التحكم المحلية من قيم وقت التشغيل
--bind و--port حتى يمكن للإقلاع الأول أن يستمر قبل وجود الإعدادات،
لكن الوصول عبر المتصفح من خلال Fly لا يزال يحتاج إلى إدراج منشأ HTTPS الدقيق في
gateway.controlUi.allowedOrigins.ملاحظة: يمكن أن يأتي رمز Discord من أي مما يلي:- متغير البيئة:
DISCORD_BOT_TOKEN(موصى به للأسرار) - ملف الإعدادات:
channels.discord.token
DISCORD_BOT_TOKEN تلقائيًا.أعد التشغيل للتطبيق:استكشاف الأخطاء وإصلاحها
”التطبيق لا يستمع على العنوان المتوقع”
يرتبط Gateway بـ127.0.0.1 بدلًا من 0.0.0.0.
الإصلاح: أضف --bind lan إلى أمر العملية في fly.toml.
فشل فحوصات الصحة / رفض الاتصال
لا يستطيع Fly الوصول إلى Gateway على المنفذ المهيأ. الإصلاح: تأكد من أنinternal_port يطابق منفذ Gateway (عيّن --port 3000 أو OPENCLAW_GATEWAY_PORT=3000).
نفاد الذاكرة / مشكلات الذاكرة
تستمر الحاوية في إعادة التشغيل أو تُنهى. العلامات:SIGABRT، أو v8::internal::Runtime_AllocateInYoungGeneration، أو عمليات إعادة تشغيل صامتة.
الإصلاح: زد الذاكرة في fly.toml:
مشكلات قفل Gateway
يرفض Gateway البدء مع أخطاء “قيد التشغيل بالفعل”. يحدث هذا عندما تعاد تشغيل الحاوية لكن ملف قفل PID يبقى على وحدة التخزين. الإصلاح: احذف ملف القفل:/data/gateway.*.lock (وليس في دليل فرعي).
عدم قراءة الإعدادات
يتجاوز--allow-unconfigured حارس بدء التشغيل فقط. لا ينشئ أو يصلح /data/openclaw.json، لذا تأكد من وجود إعداداتك الحقيقية وأنها تتضمن gateway.mode="local" عندما تريد بدء Gateway محلي عادي.
تحقّق من وجود الإعدادات:
كتابة الإعدادات عبر 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، وما إلى ذلك).
لنشر محصّن مع عدم وجود تعرّض عام، استخدم القالب الخاص.
متى تستخدم النشر الخاص
- أنت تجري فقط مكالمات/رسائل صادرة (لا توجد Webhook واردة)
- تستخدم أنفاق ngrok أو Tailscale لأي استدعاءات Webhook راجعة
- تصل إلى Gateway عبر SSH أو وكيل أو WireGuard بدلًا من المتصفح
- تريد أن يكون النشر مخفيًا عن ماسحات الإنترنت
الإعداد
استخدمdeploy/fly.private.toml بدلًا من الإعدادات القياسية:
fly ips list عنوان IP واحدًا فقط من النوع private:
الوصول إلى نشر خاص
نظرًا لعدم وجود عنوان URL عام، استخدم إحدى هذه الطرق: الخيار 1: وكيل محلي (الأبسط)Webhook مع النشر الخاص
إذا كنت تحتاج إلى استدعاءات Webhook الراجعة (Twilio وTelnyx وغيرهما) من دون تعريض عام:- نفق ngrok - شغّل ngrok داخل الحاوية أو كحاوية جانبية
- Tailscale Funnel - اعرض مسارات محددة عبر Tailscale
- الصادر فقط - يعمل بعض المزوّدين (Twilio) جيدًا للمكالمات الصادرة من دون Webhook
webhookSecurity.allowedHosts على اسم مضيف النفق العام حتى يتم قبول ترويسات المضيف المُمرَّرة.
مزايا الأمان
| الجانب | عام | خاص |
|---|---|---|
| ماسحات الإنترنت | قابل للاكتشاف | مخفي |
| الهجمات المباشرة | ممكنة | محظورة |
| وصول واجهة التحكم | المتصفح | وكيل/VPN |
| تسليم Webhook | مباشر | عبر نفق |
ملاحظات
- يستخدم Fly.io معمارية x86 (وليس ARM)
- ملف Dockerfile متوافق مع كلتا المعماريتين
- لتهيئة WhatsApp/Telegram، استخدم
fly ssh console - توجد البيانات الدائمة على وحدة التخزين في
/data - يتطلب Signal Java + signal-cli؛ استخدم صورة مخصصة وأبقِ الذاكرة عند 2GB أو أكثر.
التكلفة
مع الإعداد الموصى به (shared-cpu-2x، وذاكرة RAM بسعة 2GB):
- حوالي 10-15 دولارًا شهريًا حسب الاستخدام
- تتضمن الطبقة المجانية بعض الحصة
الخطوات التالية
- إعداد قنوات المراسلة: القنوات
- تهيئة Gateway: إعدادات Gateway
- إبقاء OpenClaw محدّثًا: التحديث