Loading blog posts...
Loading blog posts...
جاري التحميل...

معظم الأدلة والشروحات تجعل هذا الأمر معقداً أكثر من اللازم. لقد قمت بإعداد هذا النظام عدة مرات، وإليك نهج Raspberry Pi العملي والمنطقي: تشغيل OpenClaw (Clawbot) داخل Docker مع تخزين دائم (Persistent Storage)، وتقليل التعرض للشبكة افتراضياً، وتحديثات يمكنك تكرارها دون مفاجآت. إذا كنت تريد وكيلاً ذكياً (Agent) يعمل على مدار الساعة طوال أيام الأسبوع دون العبث بجهازك الأساسي، فهذا هو المسار الأنظف عادةً.
yaml## docker-compose.yml services: openclaw: image: ghcr.io/[UPSTREAM_OR_COMMUNITY]/openclaw:latest container_name: openclaw restart: unless-stopped ports: - "127.0.0.1:18789:18789" environment: - TZ=UTC - OPENCLAW_PORT=18789 - OPENCLAW_DATA_DIR=/data volumes: - openclaw-data:/data - /etc/localtime:/etc/localtime:ro logging: driver: "json-file" options: max-size: "10m" max-file: "5" volumes: openclaw-data:
يتعامل ملف Compose هذا بهدوء مع ثلاثة أمور "واقعية" تتجاهلها معظم الشروحات:
127.0.0.1 بحيث لا تكون مكشوفة لشبكتك المحلية (LAN) أو الإنترنت بشكل افتراضي، وهو بالضبط ما تريده في البداية.openclaw-data لضمان بقاء حالة الإعداد، وتكوين المهارات، والرموز (Tokens) حتى بعد إعادة التشغيل.Important
[!IMPORTANT]
يختلف اسم الصورة (Image) بين نسخ OpenClaw المعدلة (Forks) وإصدارات المجتمع. إذا كنت قد نسخت مستودعاً (Repo) يحتوي بالفعل على docker-compose.yml أو docker-setup.sh، فأنصحك باتباع هذا المسار أولاً. راجع دليل Simon Willison حول Docker للحصول على المسار الرسمي: https://til.simonwillison.net/llms/openclaw-docker
قم بتشغيله:
bashdocker compose up -d docker compose logs -f openclaw
إذا بدأت الحاوية (Container) واستمرت في العمل، فأنت جاهز لمرحلة الإعداد وربط القنوات.
bash## Raspberry Pi OS (Debian) quick prep sudo apt-get update sudo apt-get install -y ca-certificates curl git # Docker Engine install (official script) curl -fsSL https://get.docker.com | sudo sh # Allow your user to run docker without sudo sudo usermod -aG docker $USER newgrp docker # Docker Compose v2 is included with modern Docker packages docker version docker compose version
الحد الأدنى من العتاد لتجنب المشاكل (إليك الأمر بوضوح: يمكنك استخدام مواصفات أقل، لكنك ستشعر بتأثير ذلك):
4GB RAM كحد أدنى للوكيل والمهارات. ذاكرة 8GB تجعل الأداء أسلس بشكل ملحوظ بمجرد تشغيل أكثر من شيء في وقت واحد.لماذا يهم هذا؟ تميل الوكلاء من نوع OpenClaw إلى كتابة الحالة (State)، وتخزين المطالبات مؤقتاً، وتسجيل استدعاءات الأدوات. بطاقات SD يمكن أن تتلف -وتتلف فعلاً- مبكراً تحت ضغط الكتابة المستمر.
Tip
[!TIP]
إذا كنت مضطراً لاستخدام microSD، فلا تتخطى تدوير السجلات (الموضح أعلاه) وحافظ على max-size صغيراً. أيضاً، حاول منع المهارات المزعجة (مثل استخراج بيانات الويب أو معالجة الملفات) من إغراق السجلات.
bashgit clone [REPO_URL] cd [REPO_DIR] # Common pattern in guides: a helper script chmod +x docker-setup.sh ./docker-setup.sh
تأتي العديد من أدلة ونسخ OpenClaw مع نص إعداد (Script) يقوم بسحب/بناء الصور، وكتابة ملف .env، وتشغيل Compose. من واقع خبرتي، يميل هذا أيضاً إلى التوافق مع افتراضات المطورين الأصليين (مثل إصدار Node.js الذي يتوقعونه داخل الحاوية)، مما يوفر عليك مشاكل توافق Node.js 22+ على مستوى النظام المضيف.
إذا طلب النص تحديد المنافذ، أنصحك بإبقاء البوابة على 18789 إلا إذا كان لديك شيء آخر يعمل هناك. للحصول على تدفق إعداد Docker كامل (مفاتيح API + قائمة المهارات)، راجع شرح الإعداد على YouTube: https://www.youtube.com/watch?v=-aeR1cQktdM
bashgit clone [REPO_URL] cd [REPO_DIR] # Typical Docker build flow docker build -t openclaw:pi . # Run with a persistent data directory docker run -d \ --name openclaw \ --restart unless-stopped \ -p 127.0.0.1:18789:18789 \ -e OPENCLAW_DATA_DIR=/data \ -v openclaw-data:/data \ openclaw:pi
يساعد البناء المحلي في الحالات التالية:
amd64 فقط وأنت بحاجة لـ arm64.المقايضة: عمليات البناء أبطأ على Pi. إذا كنت تفعل ذلك بشكل متكرر، قم بالبناء على جهاز أسرع باستخدام buildx وادفع صورة arm64 إلى السجل الخاص بك.
bash# Open a shell in the running container docker exec -it openclaw sh
تتم خطوات الإعداد الشائعة داخل الحاوية:
/data).إذا كانت النسخة التي تستخدمها توفر واجهة سطر أوامر (CLI)، فغالباً ما تكون شيئاً مثل:
bash## Example pattern: start wizard or open dashboard openclaw wizard openclaw gateway --port 18789
إذا لم ترَ هذه الأوامر، تحقق من مساعدة الحاوية (في الواقع: تحقق من أسماء متعددة، لأن النسخ المعدلة تحب تغيير أسماء الملفات التنفيذية):
bashopenclaw --help || clawbot --help || ls -la
المفهوم الأساسي: يجب أن يكتب الإعداد حالته داخل وحدة التخزين المثبتة (/data). إذا قمت بالإعداد بدون وحدة تخزين دائمة، فستقوم بإعادة الإعداد بالكامل بعد كل عملية إعادة بناء.
bash## Example approve command pattern found in Docker walkthroughs docker compose run --rm openclaw-cli pairing approve telegram [CODE]
يحظى Telegram بشعبية لأنه منخفض التأخير (Low-latency) ويناسب تماماً طبيعة "الوكيل الذي يعمل في الخلفية". خطوة الموافقة على الربط موجودة لسبب وجيه: فهي تمنع الحسابات العشوائية من التحكم في وكيلك إذا عثروا على البوت الخاص بك بالصدفة.
القواعد التشغيلية لتقليل المخاطر (هذه هي القواعد المملة التي تنقذك لاحقاً):
127.0.0.1.تتضمن ملاحظات Simon Willison تدفق الربط والوصول إلى لوحة التحكم: https://til.simonwillison.net/llms/openclaw-docker
Warning
[!WARNING] يساعد عزل Docker، لكنه ليس حداً أمنياً مطلقاً. تعامل مع OpenClaw ككود يمكنه تنفيذ أدوات. ابقه بعيداً عن الإنترنت العام ما لم تضف مصادقة قوية وضوابط شبكة محكمة.
yaml# docker-compose.yml snippet ports: - "192.168.1.50:18789:18789"
هذا يربط البوابة بعنوان IP محلي واحد. يساعد في منع التعرض العرضي على واجهات أخرى، لكن أي شخص على الشبكة المحلية لا يزال بإمكانه الوصول إليه ما لم يكن التطبيق يحتوي على مصادقة.
bash## Install Tailscale on the Pi (official docs recommended) curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up
ثم اترك Compose على 127.0.0.1 وادخل إليه عبر Tailscale. مما رأيته، هذا هو أبسط نهج "عن بعد ولكن خاص" لأنك لست مضطراً لفتح منافذ في الراوتر.
nginx# /etc/nginx/sites-available/openclaw.conf server { listen 443 ssl; server_name [YOUR_DOMAIN]; location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:18789; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } }
إذا قمت بكشف OpenClaw عبر Nginx، أضف TLS والمصادقة. فكر أيضاً في قوائم السماح لعناوين IP - إنه عمل إضافي، لكنه يستحق العناء.
bash## See where Docker stored your named volume docker volume inspect openclaw-data # Backup the entire volume to a tarball docker run --rm \ -v openclaw-data:/data \ -v "$PWD":/backup \ alpine sh -c "cd /data && tar -czf /backup/openclaw-data.tgz ."
النسخ الاحتياطي لوحدات التخزين هو الفرق بين "إعادة البناء في دقيقتين" و"إعادة الإعداد لمدة ساعة". كما أنها تجعل الترقيات أقل توتراً لأنه يمكنك التراجع بسرعة.
نمط عملي للتراجع (Rollback):
bash# Stop the service docker compose down # Restore volume from backup docker run --rm \ -v openclaw-data:/data \ -v "$PWD":/backup \ alpine sh -c "rm -rf /data/* && tar -xzf /backup/openclaw-data.tgz -C /data" # Start again docker compose up -d
bash## Check memory pressure and swap usage free -h vmstat 1 # Check container CPU and memory live docker stats
ثلاثة تغييرات تهم استقرار Pi (إذا كنت ستفعل القليل فقط، فافعل هذه):
/var/lib/docker ووحدات التخزين. Docker يكتب كثيراً.إذا بدأ Pi في استخدام الذاكرة البديلة (Swap) أثناء تشغيل الوكيل، فسترتفع أزمنة الاستجابة (Latency). ستلاحظ ذلك كبطء في تنفيذ المهارات وانتهاء مهلة الاتصال في مكالمات الويب.
Note
[!NOTE] إذا كنت تخطط لتشغيل نماذج محلية على Pi، فتوقع بعض التنازلات. يمكن لـ Pi 5 تشغيل نماذج صغيرة، لكن معظم الفرق تلتزم بـ Cloud LLM APIs وتستخدم Pi للتنسيق فقط.
bash# Example pattern: list skills and enable one openclaw skills list openclaw skills enable [SKILL_NAME] # Run a single skill test (dry run if supported) openclaw skills run [SKILL_NAME] --dry-run
المهارات هي المكان الذي يصبح فيه OpenClaw مفيداً ومحفوفاً بالمخاطر في آن واحد. المهارة التي يمكنها كتابة الملفات، أو استدعاء Webhooks، أو الوصول إلى جسر أتمتة المنزل تحتاج إلى حدود - وإلا فأنت تمنحها مفاتيح منزلك حرفياً.
ثلاثة قيود تعمل بشكل جيد في Docker:
مثال: تركيب مجلد عمل فقط:
yaml## docker-compose.yml snippet volumes: - openclaw-data:/data - /home/pi/openclaw-workspace:/workspace environment: - OPENCLAW_WORKSPACE=/workspace
للحصول على قائمة منسقة من مهارات المجتمع، استخدم مجموعة GitHub هذه: https://github.com/VoltAgent/awesome-openclaw-skills
ملاحظة داخلية: إذا كنت لا تزال تقرر ما إذا كان الوكيل يستحق التشغيل على مدار الساعة، راجع Clawdbot AI Agent: What It Is & Why It Matters.
bashdocker compose ps docker compose logs --tail=200 openclaw
الحلول التي تنطبق عادةً:
amd64 على arm64).إذا كان عدم تطابق في المعمارية، تأكد من ذلك:
bashuname -m docker image inspect [IMAGE] --format '{{.Architecture}}'
bash# Check what address it is bound to ss -lntp | grep 18789
إذا كانت مرتبطة بـ 127.0.0.1، فلن تقبل حركة مرور الشبكة المحلية. هذا مقصود للأمان. إذا كنت بحاجة إلى وصول LAN، اربطها بـ IP محلي كما هو موضح سابقاً.
bashdocker compose down docker volume ls | grep openclaw
يحدث هذا عادة عندما:
الحل القياسي: استخدم وحدات تخزين مسماة وحافظ على استقرار اسم مشروع Compose. وبالتأكيد، احتفظ بنسخة احتياطية مضغوطة من وحدة التخزين.
bash# Look for channel handler errors docker compose logs --tail=300 openclaw | grep -i telegram
الأسباب الشائعة:
pairing approve telegram [CODE]).إذا كنت بحاجة إلى أساس آمن لـ Pi قبل البدء بـ Telegram والمهارات، راجع OpenClaw (Clawdbot) on Raspberry Pi: Safe Setup Guide.
bash## Pull latest image and restart docker compose pull docker compose up -d # Confirm version and health docker compose logs --tail=100 openclaw docker exec -it openclaw sh -c "openclaw --version || clawbot --version"
نمط أكثر أماناً من استخدام "latest" (وبصراحة، هذا ما سأفعله إذا كان وقت التشغيل مهماً):
openclaw-stable مثبت على وسم (Tag) معروف.openclaw-canary على أحدث وسم لمدة يوم.مثال لخدمة الكناري:
yamlservices: openclaw-stable: image: ghcr.io/[UPSTREAM_OR_COMMUNITY]/openclaw:[PINNED_TAG] ports: - "127.0.0.1:18789:18789" volumes: - openclaw-stable-data:/data openclaw-canary: image: ghcr.io/[UPSTREAM_OR_COMMUNITY]/openclaw:latest ports: - "127.0.0.1:28789:18789" volumes: - openclaw-canary-data:/data volumes: openclaw-stable-data: openclaw-canary-data:
هذا يعزل الحالة أيضاً. إذا أفسدت نسخة الكناري التكوين، تظل النسخة المستقرة نظيفة.
| النهج | الإيجابيات | السلبيات | الأفضل لـ |
|---|---|---|---|
| Docker Compose | قابل للتكرار، تبعيات معزولة، تراجع سهل، وحدات تخزين دائمة | عبء طفيف، حلقة تطوير داخلية أبطأ | نشر Pi على مدار الساعة |
| التثبيت الأصلي (Native) | تكرار تطوير سريع، وصول مباشر للمضيف | فوضى تبعيات المضيف، تنظيف أصعب، اختلاف إصدارات Node/الأدوات | المساهمين والتعديل السريع |
| VPS + Docker | وقت تشغيل أعلى، CPU/RAM أفضل، وصول عام أسهل | تكلفة شهرية، البيانات والمفاتيح بعيدة | سير عمل الأعمال الدائم |
عادةً ما يكون Docker هو الحل الوسط: مستقر بما يكفي لمهام الوكيل طويلة الأمد، ولكنه لا يزال سهل إعادة البناء.
حققت Netflix انخفاضاً بنسبة 50% في تكاليف التخزين من خلال الانتقال إلى AV1 لتشفير الفيديو، مما يوضح كيف يمكن للأتمتة وتصميم النظام الدقيق تقليل النفقات التشغيلية على نطاق واسع. قللت Spotify وقت بناء CI بنسبة 40% من خلال تحسين سير عمل البناء والتخزين المؤقت، وهو مثال ملموس على كيف تتفوق خطوط الأنابيب القابلة للتكرار على الإعدادات العشوائية. خفضت Stripe زمن استجابة API (p99) بنسبة 40% في أجزاء من بنيتها التحتية من خلال تحسين الأداء، وهو تذكير بضرورة قياس زمن الاستجابة الأقصى عندما يكون Pi تحت ضغط الذاكرة.
هذه الأمثلة ليست خاصة بـ OpenClaw، لكن المبدأ واحد: الأتمتة المستقرة تأتي من القابلية للتكرار، والقياس، والتغيير المنضبط.
ابدأ من هنا (خطوتك الأولى)
أنشئ docker-compose.yml مع 127.0.0.1:18789:18789 ووحدة تخزين مسماة، ثم شغل:
bashdocker compose up -d docker compose logs -f openclaw
مكاسب سريعة (تأثير فوري)
max-size=10m, max-file=5) وتأكد من توقف السجلات عن النمو بلا حدود.openclaw-data.tgz وخزنها خارج Pi.تعمق أكثر (لمن يريد المزيد)
28789 وشغلها لمدة 24 ساعة قبل ترقية النسخة المستقرة.127.0.0.1.127.0.0.1، واستخدم وحدات تخزين دائمة، وقم بتدوير السجلات. هذه الخيارات الثلاثة تمنع معظم مشاكل Pi الغريبة.