دليل عملي

الأتمتة

تثبيت Temporal على خادم VPS: أتمتة ذاتية الاستضافة

Temporal محرّك لتنسيق سير عمل دائم: تصمد عملياتك الطويلة أمام إعادة التشغيل والأعطال والأخطاء، لأن حالتها تُحفَظ عند كل خطوة. مُصمَّم للمطوّرين عبر حِزم SDK (Go وJava وPython وTypeScript)، وهو مثالي للمعاملات المعقّدة والـ sagas. إليك كيفية تثبيته بالاستضافة الذاتية على خادم VPS.

10 دقائق للقراءةعدد الخطوات: 10
المحتويات· ‏لماذا استضافة ‏Temporal‏ ذاتياً على ‏VPS1/11
  1. 01‏لماذا استضافة ‏Temporal‏ ذاتياً على ‏VPS
  2. 02‏حالات استخدام ‏Temporal
  3. 03‏معمارية ‏Temporal ‏المستضاف ذاتياً
  4. 04‏Temporal ‏مقابل ‏BullMQ ‏مقابل ‏Celery
  5. 05‏المتطلبات التقنية
  6. 06‏نشر ‏Temporal‏ باستخدام ‏Docker Compose
  7. 07‏تهيئة ‏Worker ‏بسيط بـ‏Go ‏أو ‏TypeScript
  8. 08‏واجهة مستخدم ‎Temporal‎ — مراقبة سير العمل وتصحيحه
  9. 09‎نسخ احتياطي لـ PostgreSQL والاستمرارية
  10. 10استكشاف الأخطاء — الأخطاء الشائعة
  11. 11‏الأمان: لا تعرض ‏Frontend Service‏ بدون مصادقة

‏لماذا استضافة ‏Temporal‏ ذاتياً على ‏VPS

‏‏Temporal Cloud‏ متاح، لكن الاستضافة الذاتية تبقى وثيقة الصلة لأسباب عديدة: التكلفة المتوقعة ابتداءً من ‏99 درهم/شهر‏، وسيادة البيانات، والتحكم الكامل في الإصدار والسياسات.

‏حالات استخدام ‏Temporal

‏يتألق ‏Temporal‏ حيث تظهر حدود مهام ‏cron‏ وقوائم الانتظار البسيطة. فيما يلي أكثر حالات الاستخدام شيوعاً في بيئات الإنتاج.

‏معمارية ‏Temporal ‏المستضاف ذاتياً

‏إن فهم المكونات الداخلية يساعدك على تحديد مواصفات ‏VPS ‏الخاص بك وتشخيص المشكلات. يتكون ‏Temporal ‏من أربعة خدمات رئيسية يمكن تشغيلها في نفس العملية (‏temporalio/auto-setup) أو نشرها بشكل منفصل على نطاق واسع.

‏Temporal ‏مقابل ‏BullMQ ‏مقابل ‏Celery

مرّر الجدول أفقيًا

‏المعيار‏Temporal‏BullMQ‏Celery
استدامة الحالةسجل كامل محفوظ في قاعدة البيانات — يستأنف سير العمل المنقطع من حيث توقف تماماً‏الحالة في ‏Redis — ‏فقدان ‏Redis ‏يعني فقدان المهام (قابل للتخفيف باستخدام ‏AOF/RDB)‏نتائج اختيارية في الواجهة الخلفية (‏Redis، قاعدة البيانات) — لا يوجد سجل تنفيذ أصلي
الإعادة والحتمية‏إعادة تشغيل تلقائية من السجل — يجب أن يكون كود سير العمل حتمياً، و‏Temporal ‏يتكفل بالباقي‏لا إعادة تشغيل أصلية — إعادة محاولة بسيطة عند الفشل، دون إعادة الخطوات السابقةإعادة المحاولة قابلة للتخصيص لكل مهمة، لا إعادة تشغيل لسير عمل متعدد الخطوات
واجهة المراقبةواجهة مستخدم غنية مدمجة: قائمة سير العمل، تفاصيل كل خطوة، البحث، الإجراءات اليدوية‏Bull Board ‏كإضافة خارجية — وظيفي لكن محدود‏Flower ‏كأداة منفصلة — مقاييس أساسية، لا سجل للخطوات
اللغات المدعومة‏Go، ‏TypeScript/JavaScript، ‏Python، ‏Java، ‏‎.NET، ‏PHP ‏(SDKs ‏رسمية)‏Node.js ‏فقط‏Python ‏فقط (تكاملات خفيفة للغات أخرى)
تعقيد التثبيت‏مجموعة من 4 خدمات + ‏PostgreSQL + ‏Worker — أثقل من ‏Redis، مبرر لسير العمل الطويلة‏نسخة ‏Redis ‏واحدة — سهل الانطلاق جداً‏وسيط (‏Redis ‏أو ‏RabbitMQ) + واجهة خلفية اختيارية — في حده الأدنى
حالة الاستخدام المثاليةسير العمل الطويلة، متعددة الخطوات، مع إعادة المحاولة والتعويض — المدفوعات، الإعداد، خطوط معالجة البياناتالمهام القصيرة والمتوازية — إرسال البريد الإلكتروني، تغيير حجم الصور، الإشعارات‏مهام ‏Python ‏الدُفعية — التعلم الآلي، الاستخراج، معالجة الملفات

‏المتطلبات التقنية

‏نشر ‏Temporal‏ باستخدام ‏Docker Compose

  1. ‏إنشاء دليل العمل

    ‏أنشئ دليلًا مخصصًا وانتقل إليه.

    mkdir -p /opt/temporal && cd /opt/temporal
  2. ‏تنزيل ملف ‏Docker Compose‏ الرسمي

    ‏يوفّر ‏Temporal ملف ‏Compose مرجعيًا في مستودعه على ‏GitHub. نزّل نسخة ‏PostgreSQL مع تعطيل ‏Elasticsearch لبداية بسيطة.

    curl -L https://raw.githubusercontent.com/temporalio/docker-compose/main/docker-compose-postgres.yml -o docker-compose.yml
  3. ‏إنشاء ملف متغيرات البيئة

    أنشئ ملف .env لتخصيص ‏credentials الخاصة بـ‏PostgreSQL. لا تترك كلمات مرور افتراضية أبدًا في بيئة الإنتاج.

    cat > .env << 'EOF'
    DB=postgresql
    DB_PORT=5432
    POSTGRES_USER=temporal
    POSTGRES_PWD=changeme_strong_password
    POSTGRES_SEEDS=postgresql
    TEMPORAL_ADDRESS=temporal:7233
    EOF
  4. ‏تقييد صلاحيات ملف ‏‎.env

    ‏ملف ‏.env يحتوي على ‏credentials — قيّد الوصول إليه.

    chmod 600 .env
  5. ‏تشغيل المكدس

    ‏شغّل جميع الخدمات في الخلفية. يستغرق التشغيل الأول بضع دقائق: تهيّئ auto-setup مخطط ‏PostgreSQL تلقائيًا.

    docker compose up -d
  6. ‏التحقق من صحة الخدمات

    ‏انتظر من 60 إلى 90 ثانية، ثم تحقّق من أن الحاويات في حالة healthy أو running.

    docker compose ps
  7. ‏التحقق من الاتصال بـ‏Frontend Service

    ‏استخدم ‏temporal CLI للتأكد من أن الخادم يستجيب على منفذ ‏gRPC.

    docker exec temporal-admin-tools temporal operator cluster health
  8. ‏إنشاء ‏namespace‏ الإنتاج

    ‏يستخدم ‏Temporal مساحات أسماء (namespaces) لعزل ‏workflows. أنشئ مساحة أسماء مخصصة لتطبيقك مع مدة احتفاظ تبلغ 30 يومًا.

    docker exec temporal-admin-tools temporal operator namespace create --retention 30d myapp
  9. ‏الوصول إلى واجهة ‏Temporal

    ‏واجهة الويب متاحة على المنفذ 8080. في الإنتاج، ضع ‏reverse proxy ‏nginx مع ‏HTTPS أمام هذا المنفذ.

    curl -s http://localhost:8080 | grep -o '<title>[^<]*</title>'
  10. ‏تهيئة التشغيل التلقائي

    ‏فعّل تشغيل ‏Docker عند إقلاع ‏VPS. لا تعود الحاويات معه إلا إذا منحها ملف ‏Compose سياسة restart (مثل restart: unless-stopped): تحقّق منها بالأمر grep -n restart docker-compose.yml.

    systemctl enable docker

‏تهيئة ‏Worker ‏بسيط بـ‏Go ‏أو ‏TypeScript

‏Worker ‏هو العملية التي تنفذ فعلياً كود الأعمال الخاص بك. يتصل بـ‏Frontend Service، ويستطلع ‏task queue ‏وينفذ سير العمل والأنشطة التي يوزعها عليه ‏Temporal. ‏إليك مثال بسيط بأكثر لغتين استخداماً.

‏واجهة مستخدم ‎Temporal‎ — مراقبة سير العمل وتصحيحه

‏واجهة مستخدم ‎Temporal‎ (متاحة على المنفذ 8080) هي الأداة الأساسية لمراقبة سير عملك في الإنتاج. تتيح لك:

‎نسخ احتياطي لـ PostgreSQL والاستمرارية

تعتمد متانة ‎Temporal‎ كليًا على ‎PostgreSQL‎. نسخة بلا نسخ احتياطي تعني خسارة كاملة لسجل سير العمل عند أي عطل في الـ ‎VPS‎.

استكشاف الأخطاء — الأخطاء الشائعة

فيما يلي الأخطاء الأربعة الأكثر شيوعًا عند تثبيت ‎Temporal‎ على ‎VPS‎ وطريقة معالجتها.

‏الأمان: لا تعرض ‏Frontend Service‏ بدون مصادقة

يجب ألا يُعرَّض المنفذ 7233 (‎gRPC Frontend‎) والمنفذ 8080 (‎UI‎) مباشرةً للإنترنت دون حماية. لا يتضمن ‎Frontend Service‎ أي مصادقة أصلية في الإصدارات مفتوحة المصدر: كل من يستطيع الاتصال به يمكنه بدء سير العمل وإيقافها وقراءة جميع بياناتها. الإجراءات الموصى بها: (1) أغلق المنفذ 7233 في ‎ufw‎ وأتِح الوصول فقط لعناوين ‎IP‎ الخاصة بـ ‎Workers‎ (ufw allow from 10.0.0.0/8 to any port 7233)؛ (2) ضع الـ ‎UI‎ خلف ‎proxy‎ عكسي ‎nginx‎ مع مصادقة ‎HTTP‎ أساسية أو ‎SSO‎؛ (3) استخدم ‎VPN‎ أو شبكة خاصة بين ‎VPS‎ الخاص بـ ‎Temporal‎ و‎VPS‎ الخاصة بـ ‎Workers‎. في بيئة الإنتاج، فكّر في استخدام ‎mTLS‎ (متاح في ‎Temporal‎ الإصدار 1.x) لتشفير اتصال ‎gRPC‎ والتحقق منه.

بنية تحتية من خادم VPS لـ Temporal

يتطلّب Temporal موارد قوية: يوفّر خادم VPS Cloud من ServOrbit ما يلزم من vCPU وRAM وقرص سريع، مع Docker جاهز للاستخدام وSSL تلقائي لتأمين الـ Web UI. أطلق تنسيقك الدائم بالاستضافة الذاتية.