الأتمتة5 دقيقة قراءة

‎Apache Airflow sur ‎VPS : guide ‎Docker et ‎CVE-2026-58076

‎Apache Airflow هو المرجع مفتوح المصدر لتنسيق أنابيب البيانات على شكل ‎DAG مكتوبة بلغة ‎Python. تجعله الـ ‎Schedulers والمُشغِّلات (‎operators) والـ ‎sensors وواجهة غنية المعيارَ الفعلي لـ ‎ETL ومعالجة البيانات الدُّفعية (‎batch). باستضافته الذاتية على خادم ‎VPS، يصبح مجدولك المركزي، دون الاعتماد على خدمة مُدارة مكلفة.

لماذا تستضيف Apache Airflow ذاتيًا على خادم VPS

‎Airflow هو الأداة التي تختارها فرق البيانات عندما تريد وصف أنابيبها بلغة ‎Python صرفة: كل ‎DAG هو ملف ‎.py يعرّف المهام وتبعياتها وجدولتها. منظومة الـ ‎providers هائلة (قواعد بيانات ‎SQL، و‎S3، و‎BigQuery، و‎dbt، و‎Spark…)، والمجتمع ضخم. تفرض الخدمات المُدارة (‎Cloud Composer، ‎MWAA) رسومًا مرتفعة على البيئة بالساعة؛ وباستضافة ‎Airflow ذاتيًا على خادم ‎VPS، تحصل على المحرّك نفسه بتكلفة خادم واحد، وتُنفَّذ ‎DAG لديك أقرب ما يكون إلى مصادر بياناتك الداخلية. إنها أيضًا مسألة تحكّم: إصدارات الـ ‎providers، وتبعيات ‎Python المخصّصة، والمتغيرات والاتصالات، يبقى كل ذلك بين يديك. يعيد نشر ‎Docker Compose الرسمي (‎CeleryExecutor) إنتاج بنية إنتاجية بأمانة: ‎webserver، و‎scheduler، و‎workers، و‎Redis، و‎PostgreSQL.

الفوائد الملموسة للاستضافة الذاتية

  • ‎DAG بلغة ‎Python صرفة، مُدارة بالإصدارات في ‎Git، مع تبعيات و‎providers تحت السيطرة.
  • منظومة ضخمة من المُشغِّلات: ‎SQL، وسحابة، و‎dbt، و‎Spark، و‎HTTP، وأكثر.
  • ‎scheduler متين: ‎cron، وتبعيات بين المهام، و‎backfill و‎catchup.
  • ‎workers من ‎Celery قابلة للتوسّع لاستيعاب مئات المهام بالتوازي.
  • تنفيذ قريب من قواعد بياناتك الداخلية، دون مرور عبر سحابة طرف ثالث.
  • تكلفة خادم ‎VPS بدلًا من بيئة مُدارة تُفوتَر بالساعة.

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

‎Airflow هو الأداة الأكثر استهلاكًا للموارد في هذه السلسلة عند إعداد ‎CeleryExecutor، لأنه يشغّل في آنٍ واحد ‎webserver و‎scheduler و‎worker(s) و‎triggerer و‎Redis و‎PostgreSQL. يوصي التوثيق الرسمي بما لا يقل عن 4 غيغابايت ‎RAM، لكن لإنتاج مريح استهدف 4 ‎vCPU و8 غيغابايت ‎RAM؛ و16 غيغابايت إن كانت ‎DAG لديك تُحمّل ‎pandas أو أحجامًا كبيرة. جهّز 40 غيغابايت من القرص، و‎Docker و‎Docker Compose، ونطاقًا (airflow.yourdomain.com). يخفّف وضع ‎LocalExecutor الحزمة (دون ‎Celery أو ‎Redis) ويمكن أن يعمل على 4 غيغابايت إن بقيت احتياجاتك متواضعة.

نشر Apache Airflow باستخدام Docker Compose

01

الحصول على ملف compose الرسمي

أنشئ /opt/airflow، ثم نزّل الملف المرجعي: curl -LfO https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml. أنشئ المجلدات الفرعية المطلوبة: mkdir -p ./dags ./logs ./plugins ./config.

02

ضبط الأذونات وUID

يتطلّب ‎Airflow قيمة ‎UID متّسقة لوحدات التخزين المُثبَّتة. ولّد ملف البيئة: echo -e "AIRFLOW_UID=$(id -u)" > .env. من دون ذلك، لن يتمكّن الـ ‎scheduler من كتابة سجلاته وسيتعطّل عند بدء التشغيل.

03

تهيئة قاعدة البيانات

أطلق الترحيل وإنشاء حساب المسؤول: docker compose up airflow-init. يجهّز هذا الأمر ‎PostgreSQL، ويطبّق عمليات الترحيل، وينشئ المستخدم الافتراضي airflow / airflow، الذي يجب تغييره لاحقًا.

04

تشغيل الحزمة الكاملة

أطلق جميع الخدمات: docker compose up -d. تحقّق من أن ‎webserver و‎scheduler و‎worker و‎triggerer في حالة healthy باستخدام docker compose ps. يستمع الـ ‎webserver على المنفذ 8080.

05

الوكيل العكسي وHTTPS

ضع ‎Caddy أمام الـ ‎webserver: airflow.yourdomain.com { reverse_proxy localhost:8080 }. يحمي ‎HTTPS الوصول إلى واجهة ‎Airflow، التي تكشف اتصالات ومتغيرات وسجلات قد تكون حسّاسة.

06

إيداع DAG وتنفيذه

ضع ملف hello.py بسيطًا في ./dags (وهو DAG مع BashOperator أو PythonOperator). يكتشفه الـ ‎scheduler خلال بضع ثوانٍ. فعّله في الواجهة، وأطلق تنفيذًا يدويًا، وافحص سجلات المهمة.

لا تضع أبدًا منطقًا ثقيلًا مباشرةً في ملف ‎DAG: يحلّل الـ ‎scheduler جميع ملفات ‎.py على فترات منتظمة (min_file_process_interval)، ويؤدّي استيراد مكلف على مستوى الوحدة (‎module) إلى إبطاء المجدول بأكمله. أبقِ شيفرة التحليل خفيفة وأزِح العمل إلى المهام. ولإدارة تبعيات ‎Python المخصّصة، ابنِ صورتك الخاصة المشتقّة من apache/airflow مع ملف requirements.txt بدلًا من تثبيت الحزم أثناء التشغيل: تبدأ ‎workers لديك أسرع وتبقى قابلة لإعادة الإنتاج. أخيرًا، راقب نمو مجلد ./logs ونظّفه دوريًا.

CVE-2026-58076: ثغرة أمنية حرجة والتحديث إلى ‎Airflow 2.10.4

‎CVE-2026-58076 (‎CVSS 9.1) ثغرة تنفيذ كود عن بُعد في مكوّن ‎DAG serialization في ‎Apache Airflow، تؤثر على الإصدارات السابقة لـ ‎2.10.4. يمكن لمهاجم مُصادق تشغيل كائن عشوائي أثناء عملية ‎deserialization عبر حقن ‎payload في بيانات ‎DAG. الإصلاح متاح في ‎Airflow 2.10.4. لتحديث نسختك من ‎Docker Compose: عدّل التاغ في ملف docker-compose.yml إلى apache/airflow:2.10.4، ثم نفّذ docker compose pull && docker compose up -d. تحقّق من الإصدار بـ docker compose exec airflow-webserver airflow version. تتحدّث جداول ‎migration تلقائيًا عند أول تشغيل. إن احتجت تعطيل الوصول إلى ‎DAG serialization في انتظار التحديث، عيّن AIRFLOW__CORE__DAG_SERIALIZATION=True (مُفعَّل افتراضيًا منذ ‎2.1.0) واحجب الوصول إلى ‎worker من خارج شبكة ‎Docker.

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

المنفذ 8080 قيد الاستخدام: إن فشل docker compose up -d بخطأ port is already allocated، غيّر المنفذ في docker-compose.yml أو أوقف الخدمة التي تشغله (lsof -i :8080). ‎Scheduler في حالة running دون تنفيذ ‎DAG: تحقق من أن مجلد ./dags مُثبَّت بشكل صحيح (docker compose config | grep dags) وأن ملفات .py الخاصة بـ ‎DAG صحيحة نحويًا (python3 -c "import dag_file"). ‎DAG غير مرئي في الواجهة بعد إضافته: فترة فحص مجلد ‎DAG هي 30 ثانية افتراضيًا؛ أجبر إعادة التحميل بـ docker compose restart airflow-scheduler. للملفات المعدّلة بعد التشغيل، يلتقطها الـ ‎Scheduler تلقائيًا في دورته التالية.

خادم ‎VPS Cloud المثالي لـ‎Airflow

يتطلّب ‎Airflow في وضع ‎Celery ذاكرة ‎RAM وعدة حاويات: يوفّر خادم ‎VPS Cloud من ‎ServOrbit الموارد، و‎Docker مُعدًّا مسبقًا، و‎SSL تلقائيًا لاستضافة مجدول البيانات لديك بالاستضافة الذاتية، بتكلفة تحت السيطرة.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـ العربية والفرنسية والإنجليزية.