النشر9 دقيقة قراءة

الانتقال بـCI/CD إلى Forgejo بعد انقطاع GitHub 2026

استمر انقطاع GitHub بتاريخ 17 أغسطس 2026 سبع ساعات وسبعًا وأربعين دقيقة. أثّر على github.com والمصادقة وGitHub Actions والـAPIs وطلبات السحب والمشكلات وCopilot. بالنسبة للفرق التي كانت تعتمد على GitHub Actions، فقد استُهلك ميزانية التوافر السنوية كاملةً في يوم واحد. يعمل Forgejo Actions على خادم VPS الخاص بك بنفس صياغة YAML لـGitHub Actions، دون أي اعتماد على بنية تحتية خارجية. يغطي هذا الدليل الانتقال الكامل: التثبيت، ونقل المستودعات، وتكييف سير العمل، والإعداد بعد الانتقال.

لماذا غيّر انقطاع 17 أغسطس 2026 طبيعة السؤال

في 17 أغسطس 2026 عند الساعة 9:40 صباحًا بالتوقيت الشرقي، تعرّضت GitHub لعطل في طاقتها الاستيعابية في مركز البيانات Central US‏. وصلت المنصة إلى ذروة حركة مرور لم تستطع بنيتها التحتية استيعابها: نسبة خطأ بلغت حوالي 20% على تجارب الويب وطلبات API، وارتفعت إلى 50% على تنزيلات الأرشيف. كان GitHub Actions من أكثر الخدمات تضررًا. لم تعد الخدمات إلى طبيعتها إلا في 5:27 مساءً — أي بعد 7 ساعات و47 دقيقة — وقد أقرّت GitHub علنًا بالحادثة في 20 أغسطس 2026.‏

نشرت DanubeData، وهي شركة متخصصة في البنية التحتية للبيانات، تقريرًا تفصيليًا أكدت فيه أن الحادثة كشفت عن تبعية خفية لـGitHub في مستوى التحكم لديهم. استجابةً لذلك، نقلوا 9 مستودعات تضم 333 طلب سحب وما يقارب 400 ميغابايت من تاريخ Git إلى نسخة Forgejo مستضافة ذاتيًا في يوم واحد، وتبعهما خط البناء الرئيسي وسير عمل النشر في الإنتاج.

لم يعد السؤال «هل يمكن أن تتعطل GitHub؟» بل «ما حجم تعرّضنا إذا تعطلت؟». يجيب Forgejo Actions على هذا السؤال بنقل تنفيذ CI/CD إلى بنيتك التحتية الخاصة.

فوائد Forgejo المستضاف ذاتيًا لـCI/CD

  • توافر مستقل عن GitHub — لا يؤثر أي انقطاع في المنصة على عمليات البناء أو النشر.
  • صياغة YAML متوافقة — معظم سير عمل GitHub Actions تعمل دون تعديل على Forgejo Actions.‏
  • تكلفة ثابتة وقابلة للتنبؤ — كل دقيقة في خط الأنابيب هي موردٌ مدفوع مسبقًا على VPS الخاص بك.
  • سرية خطوط الأنابيب — الكود المصدري وأسرار البيئة وملفات البناء لا تغادر بنيتك التحتية.
  • عداءات قابلة للضبط — تشغيل المهام داخل حاوية Docker أو كعملية محلية أو في بيئة LXC غير متوفرة في GitHub.‏
  • حوكمة غير ربحية — تُدار Forgejo من قِبل Codeberg e.V.‏، دون إصدار مدفوع أو خطر تغيير النموذج التجاري.

المتطلبات الأساسية

قبل الشروع في التثبيت، تحقق أن خادم VPS الخاص بك يستوفي المتطلبات التالية.

ذاكرة الوصول العشوائي (RAM): 2 غيغابايت كحدٍّ أدنى للمنصة وحدها مع 5 إلى 20 مطورًا. احسب 4 غيغابايت إذا شغّلت Forgejo Actions مع عداءات تُجري عمليات تصريف محلية (Go أو Rust أو Java).‏

vCPU: يكفي 2 vCPU لفريق مؤلف من 20 مطورًا. أضف 2 vCPU لكل عداء متزامن إضافي إذا كانت عمليات البناء كثيفة الاستخدام لوحدة المعالجة.

القرص: احجز 20 غيغابايت على الأقل من SSD للمستودعات وتاريخ Git وملفات CI والسجلات. خطط لـ50 غيغابايت إذا كنت تستضيف سنوات عديدة من التاريخ أو ملفات ثنائية ضخمة.

الشبكة: يظل المنفذ 22 متاحًا على المضيف (لـSSH النظام)؛ سيُعرض SSH الخاص بـForgejo على منفذ مختلف، عادةً 2222. يجب أن يكون المنفذ 443 مفتوحًا لـreverse proxy.‏

النطاق: جهّز نطاقًا فرعيًا مثل git.yourdomain.com مع سجل A يشير إلى عنوان IP الخاص بـVPS.

البرامج: Docker 24+ مع المكوّن الإضافي Compose مثبَّتًا على الخادم.

الانتقال من GitHub إلى Forgejo Actions: التثبيت والتهيئة

01

تثبيت Forgejo مع Docker وPostgreSQL

أنشئ مجلد العمل /opt/forgejo ومجلدًا فرعيًا data. اكتب ملف docker-compose.yml بخدمتين: forgejo (صورة codeberg.org/forgejo/forgejo:latest، المنفذ الداخلي 3000، SSH محوّل على 2222:22، وحدة تخزين ./data:/data، متغيرات USER_UID=1000 وUSER_GID=1000) وdb (صورة postgres:16، وحدة تخزين مخصصة، متغيرات POSTGRES_USER وPOSTGRES_PASSWORD وPOSTGRES_DB). شغّل docker compose up -d وراقب docker compose logs -f forgejo حتى ترى المنفذ 3000 نشطًا.

02

إعداد reverse proxy وشهادة SSL

مع Caddy يكفي بلوك واحد: git.yourdomain.com { reverse_proxy localhost:3000 }. يتم توفير شهادة Let's Encrypt تلقائيًا. مع Nginx، أنشئ بلوك server يستمع على المنفذ 443 مع proxy_pass http://127.0.0.1:3000; وأضف إلزاميًا proxy_read_timeout 600s; — واجهت DanubeData خطأ 504 بدون هذا الإعداد، مما أوقف استيراد المستودع عند 196 من أصل 333 طلب سحب. حوّل HTTP إلى HTTPS في بلوك منفصل.

03

إتمام الإعداد الأولي

انتقل إلى https://git.yourdomain.com. يطلب معالج الإعداد: محرك قاعدة البيانات (PostgreSQL)، المضيف (db:5432)، بيانات الاعتماد، عنوان URL الأساسي HTTPS، ومنفذ SSH الخارجي (2222). أنشئ حساب المسؤول. لتفعيل الوضع الخاص، عطّل التسجيل التلقائي في الإعدادات أو أضف DISABLE_REGISTRATION=true إلى متغيرات بيئة الخدمة.

04

نقل مستودعات GitHub

في واجهة Forgejo، انقر مستودع جديد → نقل. اختر GitHub كمصدر. أدخل رابط المستودع (https://github.com/your-org/your-repo)، وتوكن وصول شخصي من GitHub بصلاحية repo، وفعّل نقل طلبات السحب والتسميات والمعالم والإصدارات. للمستودعات الضخمة (> 1 غيغابايت أو > 200 طلب سحب)، اختبر أولًا مع ضبط مهلة reverse proxy على 600 ثانية. احذف المستودع غير المكتمل وأعد المحاولة عند حدوث 504. كرّر العملية لكل مستودع.

05

تسجيل عداء Forgejo Actions

في Forgejo، انتقل إلى الإدارة → Actions → العداءات → إنشاء عداء. انسخ رمز التسجيل. أضف خدمة act-runner إلى docker-compose.yml باستخدام صورة codeberg.org/forgejo/runner:latest، مع المتغيرات FORGEJO_INSTANCE_URL (رابط HTTPS للنسخة) وFORGEJO_RUNNER_REGISTRATION_TOKEN. شغّل docker compose up -d act-runner. تحقق من ظهور العداء بحالة متصل في لوحة الإدارة.

06

وضع ملفات سير العمل في المجلد الصحيح

على GitHub، تعيش سير العمل في .github/workflows/. على Forgejo، يجب وضعها في .forgejo/workflows/. أعد تسمية المجلد في كل مستودع منقول وادفع التعديل. يبقى باقي ملف YAML — محفزات on:، المهام، الخطوات، uses: للإجراءات الخارجية المتوافقة — متطابقًا في معظم الحالات. لا تقرأ Forgejo المجلد .github/.

07

تكييف العناصر الخاصة بـGitHub

نقاط التكييف الرئيسية: استبدل الإجراءات التي تستدعي واجهة برمجة GitHub (المبنية على gh) بما يعادلها في Forgejo أو احذفها؛ أزل أي permissions: id-token: write (يستخدم Forgejo enable-openid-connect في ملف سير العمل لـOIDC)؛ إذا احتاج سير عملك لأداة غير موجودة في صورة Debian bookworm الأساسية للعداء، أضف خطوة apt-get install -y <tool>. يتم حل إجراءات actions/checkout وactions/setup-node بشكل أصلي.

08

التحقق من أول خطوط الأنابيب

أنشئ سير عمل بسيطًا .forgejo/workflows/smoke.yml يُطلَق عند push، بمهمة وحيدة تُنفّذ echo "Pipeline OK". تحقق من قسم Actions في واجهة Forgejo. بمجرد نجاح هذا التشغيل الأول، انقل سير عمل الإنتاج واحدًا تلو الآخر وصحّح الفوارق تدريجيًا.

الإعداد بعد الانتقال

بعد التحقق من تشغيل خطوط الأنابيب، ثلاثة عناصر تستوجب الإعداد.

خطافات الويب والإشعارات: إذا كانت أنظمة خارجية (Slack أو Mattermost أو خطاف نشر) تستمع لأحداث GitHub، أعد إنشاءها في Forgejo تحت الإعدادات → خطافات الويب. الحمولة مشابهة لـGitHub لكنها تختلف في بعض الحقول — اضبط نقاط الاستقبال وفق ذلك.

أسرار خطوط الأنابيب: يجب إعادة إنشاء أسرار GitHub تحت إعدادات المستودع → Actions → الأسرار. للأسرار التنظيمية، استخدم الإدارة → المنظمات → [منظمتك] → الإعدادات → Actions → الأسرار. لا تنقل سرًا أبدًا بتضمين قيمته في commit أو ملف مُصدَّر.

صلاحيات العداءات: بشكل افتراضي، يمكن للعداء المسجَّل على مستوى النسخة تنفيذ سير عمل لجميع المستودعات. للتحكم بشكل أدق، قيّد العداء بمنظمة أو مستودع محدد من تبويب العداءات في الإعدادات المقابلة.

تقوية نسخة Forgejo

ثلاثة إجراءات تقلّص بشكل ملحوظ مساحة الهجوم على نسخة مكشوفة للإنترنت.

فعّل التحقق الثنائي الإلزامي لجميع الحسابات، وخاصة حسابات المسؤول: الإدارة → إعدادات المصادقة → طلب التحقق الثنائي.

مرّر مفاتيح SSH المسجَّلة. قد يملك مستخدم منقول من GitHub مفاتيح منقضية في ملفه الشخصي. اطلب من كل عضو مراجعة مفاتيحه في الإعدادات → مفاتيح SSH/GPG وحذف ما لا يقابل جهازًا نشطًا.

فعّل التحقق HMAC على جميع خطافات الويب الصادرة. في كل خطاف، أدخل في حقل السر سلسلة عشوائية تتكون من 32 حرفًا على الأقل. يجب أن تتحقق نقطة الاستقبال من الترويسة X-Gitea-Signature (متطابقة في Forgejo). بدون هذا الفحص، يمكن لأي شخص يعرف عنوان URL لنقطتك تشغيل إجراء نشر.

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

504 Gateway Timeout أثناء نقل مستودع. تُجري Forgejo الاستيراد بشكل متزامن داخل طلب HTTP.‏ إذا قطع reverse proxy الاتصال قبل الانتهاء، يتوقف الاستيراد ويبقى المستودع معلقًا. ارفع proxy_read_timeout إلى 600 ثانية (Nginx) أو أضف timeouts { read_body 10m } (Caddy) قبل بدء النقل. احذف المستودع غير المكتمل وأعد المحاولة.

Runner stays Offline after startup. تحقق أن FORGEJO_INSTANCE_URL يشير إلى عنوان HTTPS العام للنسخة، لا إلى localhost أو IP الداخلي للحاوية. يجب أن يصل العداء إلى Forgejo عبر نفس المسار الذي يستخدمه متصفح خارجي.

Workflow not triggered after push. تحقق أن ملفات سير العمل موجودة في .forgejo/workflows/ وليس في .github/workflows/. لا تقرأ Forgejo المجلد .github/.

Error: this step uses an action, but the runner does not support actions. بعض الإجراءات الخارجية المشار إليها بـuses: تستدعي واجهة برمجة GitHub. استبدلها بما يعادلها على Codeberg أو أنشئ مرآة محلية.

permission denied على سكريبت في نهاية مهمة. صورة العداء الأساسية (Debian bookworm) لا تحوي نفس الأدوات المتوفرة في صورة Ubuntu الخاصة بـGitHub. أضف خطوة apt-get install -y <tool> في بداية المهمة، أو حدد صورة Docker مخصصة عبر container:.

لمزيد من المعرفة

يغطي هذا الدليل التثبيت والانتقال بـCI/CD إلى Forgejo Actions. للتعمق أكثر، تعالج المقالات التالية موضوعات مكمّلة: استضافة Forgejo الأولية على VPS مع Docker وSSL، وإعداد خط أنابيب Woodpecker CI بجانب Forgejo، ونقل مستودعات GitHub إلى منصة Git مستضافة ذاتيًا.

استضافة Forgejo على خادم VPS الخاص بك — تثبيت كامل، reverse proxy وأول عداء.‏

خط أنابيب Woodpecker CI على VPS مع Forgejo — بديل لـForgejo Actions للفرق التي تريد فصل المنصة عن محرك CI.‏

نقل مستودعات GitHub إلى Gitea أو Forgejo على VPS — إجراء النقل خطوة بخطوة باستخدام الأداة الرسمية.

منصة Forgejo وخطوط CI/CD على خادم VPS من ServOrbit

خادم VPS Cloud مع Docker جاهز لاستضافة Forgejo وعداءات الـCI والمستودعات. مستقل عن GitHub، متاح دائمًا.

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

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