دليل عملي

‏Gitea أم Forgejo أم GitLab CE: أيّ منصة Git في 2026؟

التطوير10 دقائق للقراءةعدد الخطوات: 8

‏في عام 2026، لم تعد استضافة منصة ‏Git‏ ذاتياً ممارسةً محدودة. غير أنّ ‏CVE-2026-59774‏ كشفت عن ثغرة خطيرة في نسخ ‏Gitea‏ غير المُرقَّعة تتيح قراءة ملفات تعسفية وتنفيذ تعليمات برمجية عن بُعد، مما دفع كثيراً من الفِرق إلى حسم سؤال كانت تؤجّله: ‏Gitea‏ أم ‏Forgejo‏ أم ‏GitLab CE‏؟ تقارن هذه المقالة الأدوات الثلاثة وفق المعايير التي تهمّ في بيئة الإنتاج — الموارد، ‏CI/CD‏، الحوكمة، والهجرة — مع مستجدات ‏Forgejo v16.0‏ (يوليو 2026).

المحتويات· ‏لماذا هذا السؤال ملحّ في 2026؟1/9
  1. 01‏لماذا هذا السؤال ملحّ في 2026؟
  2. 02‏ما الذي تغيّر منذ 2024 وما أثره على هذا الاختيار
  3. 03‏المتطلبات الأساسية حسب خيارك
  4. 04‏Forgejo مقابل Gitea مقابل GitLab CE — جدول مقارنة 2026
  5. 05‏الهجرة من Gitea إلى Forgejo: ما هي فعلاً؟
  6. 06نشر Forgejo على VPS باستخدام Docker وNginx
  7. 07‏استكشاف الأخطاء: أخطاء التثبيت الشائعة
  8. 08‏الأخطاء الشائعة وحلولها
  9. 09‏أيّ أداة تختار حسب وضعك؟

‏لماذا هذا السؤال ملحّ في 2026؟

‏نُشرت ‏CVE-2026-59774‏ في الرابع من أغسطس 2026. تطال نسخ ‏Gitea‏ من ‏1.22.1‏ إلى ‏1.27.0‏ — درجة ‏CVSS‏ تبلغ ‏9.9‏ (حرجة). يتمثّل الناقل في توجيه ‏#+INCLUDE‏ ضمن محرّك عرض ‏Org-mode‏، إذ يتيح لمهاجم غير مصادَق قراءة ملفات اعتباطية يصل إليها حساب خدمة ‏Gitea‏، بما فيها ‏app.ini‏ والرموز الداخلية. ويُفضي كشف ‏INTERNAL_TOKEN‏ إلى حقن ‏Git hook‏ وتنفيذ تعليمات برمجية عن بُعد. الإصلاح متوفر في النسخة ‏1.27.1‏. إن كانت نسختك أقدم ولا تُعزَل عن الشبكة العامة، فالترقيع هو الخطوة الأولى. والثانية هي تحديد ما إذا كنت ستبقى على ‏Gitea‏ أم تُسرِّع هجرةً كنت تؤجّلها. نشر ‏Forgejo‏ — الذي يُصدر تصحيحاته الأمنية باستقلالية عن ‏Gitea Ltd.‏ — تصحيحه الخاص في اليوم ذاته عبر فرعه الأمني.

‏ما الذي تغيّر منذ 2024 وما أثره على هذا الاختيار

  • ‏Forgejo‏ فرعٌ صارم منذ مطلع 2024 — انفصلت قاعدة الكود عن ‏Gitea‏؛ لا يزال المشروعان يتشاركان معظم أساسياتهما، لكنّ مسارَي التطوير باتا يتباعدان بوضوح
  • حوكمة مجتمعية في ‏Forgejo — تُدار بواسطة جمعية غير ربحية دون اتفاقيات مساهمة مع شركة أم؛ إصلاحات الأمان تصدر باستقلالية
  • ‏Forgejo Actions‏ في الإنتاج — نفس صياغة ‏Gitea Actions‏ (متوافقة مع ‏GitHub Actions‏)، تدعم ‏Woodpecker CI‏ ومشغّلات ‏Docker‏، منشورة في ‏Codeberg‏ منذ 2024
  • ‏Forgejo v16.0‏ في يوليو 2026 — تعليقات مراجعة متعددة الأسطر (تحديد نطاق الأسطر في الفرق، خيوط نقاش inline)، مصادقة ‏JWT‏ خارجية للـ ‏API‏ (تتيح تكامل ‏SSO‏ دون رمز دائم)، تصليب ‏SSRF‏ مفعّل افتراضياً لميرورينغ ‏Git‏، تقليص استهلاك النطاق الترددي للصور الرمزية
  • ‏Forgejo v15.0‏ في أبريل 2026 — سير عمل مُبسَّط لتسجيل المشغّل عبر الواجهة، رموز مقيّدة بالمستودع، الإصدار المئة من ‏Forgejo
  • ‏GitLab CE‏ شاملة لكن ثقيلة — تتضمّن النسخة المجتمعية ‏CI/CD‏ ومسجّل الحاويات وفحص الأمان والصفحات؛ الثمن: ‏4‏ جيجابايت كحد أدنى للذاكرة، ‏8‏ جيجابايت موصى به
  • خمسة مقارنات مستقلة نُشرت في 2026 تتقارب نحو الترتيب ذاته: ‏Forgejo‏ للتثبيت الجديد، ‏Gitea‏ إن كنت تستخدمها بنسخة مُرقَّعة، ‏GitLab CE‏ إن احتجت إلى منصة ‏DevOps‏ متكاملة في تثبيت واحد

‏المتطلبات الأساسية حسب خيارك

‏كتب ‏Forgejo‏ و‏Gitea‏ بلغة ‏Go‏ ويُشحَنان كملف ثنائي واحد ثابت. تعمل نسخة متواضعة (حتى عشرين مستودعاً، بضعة مشغّلات CI) بشكل مريح على ‏1‏ نواة و‏1‏ جيجابايت من الذاكرة؛ أما نسخة الفريق (مشغّلات ‏CI‏ نشطة، ‏LFS‏، سجل الحزم) فتفضّل نواتين و‏2‏ إلى ‏4‏ جيجابايت. ‏GitLab CE‏ في مستوى آخر تماماً: ‏4‏ جيجابايت هو الحد الأدنى المطلق للتشغيل، و‏8‏ جيجابايت للاستخدام المريح، مع تشغيل ‏Postgres‏ و‏Redis‏ و‏Gitaly‏ و‏Sidekiq‏ في آنٍ واحد. خطّط لأربعة أنوية على الأقل و‏50‏ جيجابايت من تخزين ‏SSD‏. للأدوات الثلاثة، ستحتاج إلى نطاق يشير إلى ‏VPS‏ الخاص بك، والمنافذ ‏22‏ (SSH Git) و‏80‏ و‏443‏ مفتوحة، وبروكسي عكسي (‏Nginx‏ أو ‏Caddy‏) لـ‏HTTPS‏.

‏Forgejo مقابل Gitea مقابل GitLab CE — جدول مقارنة 2026

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

‏المعيار‏Forgejo / Gitea‏GitLab CE
‏الحد الأدنى للذاكرة‏512 ميجابايت – 1 جيجابايت‏4 جيجابايت (8 جيجابايت موصى به)
‏صيغة التوزيع‏ملف ثنائي واحد أو صورة Docker‏Omnibus (متعدد العمليات) أو Helm chart
‏CI/CD الأصلية‏Forgejo Actions / Gitea Actions (صياغة GitHub Actions)‏GitLab CI/CD المدمجة، مشغّلات مشتركة أو مخصصة
‏الحوكمة‏Forgejo: جمعية غير ربحية (Codeberg) · Gitea: Gitea Ltd.‏GitLab Inc. (مفتوح المصدر الجوهري، CE مجاني)
‏سجل الحاويات‏نعم (حزم + سجل حاويات)‏نعم، أكثر اكتمالاً
‏الفيدرالية / ActivityPub‏Forgejo: تجريبية اختيارية · Gitea: غير مخطط لها‏لا
‏إصلاحات الأمان المستقلة‏Forgejo: نعم (CVE-2026-59774 في اليوم صفر) · Gitea: عبر Gitea Ltd.‏عبر GitLab Inc.
‏مستجدات v16 (يوليو 2026)‏Forgejo: مراجعات متعددة الأسطر، JWT خارجي، SSRF افتراضياً · Gitea: تصحيح 1.27.1 فقط‏غير ذات صلة
‏الهجرة من Gitea‏Forgejo: نفس مخطط قاعدة البيانات، أمر واحد · GitLab: أداة استيراد API أو migrator‏استيراد جزئي (مستودعات، إشكاليات، طلبات دمج)
‏مثالي لـ‏فرق من 1 إلى 50 مطوراً، VPS متواضع، CI خفيفة‏مؤسسة تريد كل شيء في تثبيت واحد، ميزانية بنية تحتية متاحة

‏الهجرة من Gitea إلى Forgejo: ما هي فعلاً؟

‏كثيراً ما تُوصف الهجرة من ‏Gitea‏ إلى ‏Forgejo‏ بأنها «أمر واحد» — وهذا صحيح في الحالة البسيطة. تشترك الأداتان في نفس مخطط قاعدة البيانات منذ البداية، ويحافظ ‏Forgejo‏ على التوافق مع الإصدارات السابقة. تتلخّص العملية في إيقاف حاوية ‏Gitea‏، وتوجيه نفس وحدة تخزين البيانات إلى حاوية ‏Forgejo‏، ثم التشغيل. يكتشف ‏Forgejo‏ المخطط الموجود ويُطبّق ترحيلاته الخاصة. بضعة نقاط للتحقق قبل البدء: احتفظ بنسخة احتياطية من ‏app.ini‏ وقاعدة البيانات، لاحظ نسخة ‏Gitea‏ الحالية (الهجرة مختبرة من النسخ الحديثة — قد تحتاج نسخة قديمة جداً إلى تحديث وسيط)، وتحقق من أن مشغّلات ‏CI‏ الخاصة بك تستخدم الصياغة ذاتها (‏Forgejo Actions‏ و‏Gitea Actions‏ متوافقتان). الهجرة في الاتجاه الآخر — نحو ‏GitLab CE‏ — أطول: يوفر ‏GitLab‏ أداة استيراد عبر ‏API‏ (مستودعات، إشكاليات، طلبات دمج، تسميات)، لكن يجب إعادة كتابة خطوط أنابيب ‏CI‏ بصياغة ‏GitLab CI‏.

نشر Forgejo على VPS باستخدام Docker وNginx

  1. تجهيز خادم VPS

    حدّث النظام وثبّت Docker وDocker Compose: apt update && apt install -y docker.io docker-compose-plugin. افتح المنافذ الضرورية: ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw allow 2222/tcp (‎2222 لـ SSH Git إذا كنت لا تريد كشف منفذ 22 للنظام).

  2. إنشاء المجلدات وملف Compose

    أنشئ مجلدًا مخصصًا: mkdir -p /opt/forgejo && cd /opt/forgejo. ثم أنشئ ملف compose.yml يتضمن خدمة forgejo تشير إلى الصورة codeberg.org/forgejo/forgejo:latest، مع وحدة تخزين دائمة لـ /data، والمنافذ 3000:3000 (HTTP) و2222:22 (SSH)، ومتغيرات بيئة أساسية (FORGEJO__server__DOMAIN=git.your-domain.com، FORGEJO__server__SSH_PORT=2222).

  3. تشغيل Forgejo

    شغّل الخدمة: docker compose up -d. تحقق من تشغيل الحاوية بـ docker compose ps، وراجع السجلات بـ docker compose logs -f forgejo. تتوفر واجهة التثبيت على http://<ip-du-vps>:3000.

  4. ضبط Nginx كوكيل عكسي HTTPS

    ثبّت Nginx وCertbot: apt install -y nginx python3-certbot-nginx. أنشئ مضيفًا افتراضيًا لـ git.your-domain.com يُوجّه الطلبات إلى http://localhost:3000 مع الترويسات القياسية (proxy_set_header Host $host، proxy_set_header X-Real-IP $remote_addr، proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for، proxy_set_header X-Forwarded-Proto $scheme).

  5. الحصول على شهادة TLS

    نفّذ certbot --nginx -d git.your-domain.com. يقوم Certbot بضبط إعادة التوجيه HTTP→HTTPS وجدولة التجديد التلقائي. تحقق بـ curl -I https://git.your-domain.com من أن رمز الاستجابة هو 200.

  6. إتمام التثبيت عبر الواجهة الويب

    افتح https://git.your-domain.com في متصفحك. يطلب معالج التثبيت نوع قاعدة البيانات (SQLite للبداية، PostgreSQL للإنتاج)، ورابط النسخة، وإعدادات SSH. أنشئ حساب المسؤول، ثم أوقف التسجيل العام إذا كانت النسخة خاصة (FORGEJO__service__DISABLE_REGISTRATION=true في compose.yml).

  7. تفعيل عامل CI (اختياري)

    قدّمت Forgejo v15.0 ‏(أبريل 2026) سير عمل مبسّطًا لتسجيل العامل عبر الواجهة الويب. انتقل إلى إدارة الموقع ← Actions ← Runners، انقر إنشاء عامل وانسخ أمر التسجيل. شغّل العامل في حاوية ثانية: docker run -d --name forgejo-runner -v /var/run/docker.sock:/var/run/docker.sock codeberg.org/forgejo/runner:latest daemon --config config.yml.

  8. التحقق من الأمان الأساسي (تحديث v16)

    منذ Forgejo v16.0، يكون تصلّب SSRF نشطًا بشكل افتراضي لنسخ Git المرآتية — FORGEJO__migrations__ALLOW_LOCALNETWORKS معطَّل افتراضيًا. إذا احتجت إلى عكس مستودعات داخلية، فعّله صراحةً وقيّم الأثر. تحقق أيضًا من أن FORGEJO__server__LOCAL_ROOT_URL لا يشير إلى عنوان IP داخلي مكشوف. للنسخ المُهاجَرة من Gitea المتأثرة بـ CVE-2026-59774: أبطِل INTERNAL_TOKEN وSECRET_KEY في app.ini، ثم أعِد توليد رموز الوصول الشخصية للمستخدمين.

‏لمنصة ‏Gitea‏ متأثرة بـ‏CVE-2026-59774‏ (النسخ من ‏1.22.1‏ إلى ‏1.27.0‏): الهجرة إلى ‏Forgejo‏ والترقية إلى ‏Gitea 1.27.1‏ كلاهما يُصلّحان الثغرة. إن اخترت البقاء على ‏Gitea‏، طبّق التصحيح فوراً. إن كنت تفكر في ‏Forgejo‏ منذ فترة، فالهجرة تحلّ المشكلتين في عملية واحدة. بالهجرة إلى ‏Forgejo v16.0+‏، تستفيد أيضاً من تصليب ‏SSRF‏ افتراضياً، وتعليقات المراجعة متعددة الأسطر، والمصادقة ‏JWT‏ الخارجية — ميزات غير متاحة في ‏Gitea 1.27.1‏. في جميع الحالات، أبطل صلاحية ‏INTERNAL_TOKEN‏ و‏SECRET_KEY‏ في ‏app.ini‏ بعد أي تعرّض مشتبه به، ودوِّر رموز الوصول الشخصية لمستخدميك.

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

‏تغطي الأخطاء أدناه الحالات الأكثر شيوعاً عند النشر الأول أو الهجرة.

‏الأخطاء الشائعة وحلولها

  • level=fatal msg="Failed to initialize ORM engine" error="Error 1071: Specified key was too long" (MySQL/MariaDB) — تجميع قاعدة البيانات ليس ‏utf8mb4‏: أنشئ قاعدة البيانات بـ‏CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci‏ ثم أعد التشغيل
  • Failed to initialize SSH: ssh: no key found — يبحث ‏Forgejo‏ عن مفاتيح ‏SSH‏ في ‏/data/gitea/.ssh‏؛ إن لم تكن وحدة التخزين مُركَّبة أو كانت الأذونات غير صحيحة، شغِّل ‏docker compose exec forgejo forgejo admin regenerate keys‏ لإعادة توليدها
  • x509: certificate signed by unknown authority‏ على خطافات الويب الصادرة — نسختك تستدعي خدمة داخلية بشهادة موقّعة ذاتياً؛ أضف ‏FORGEJO__webhook__SKIP_TLS_VERIFY=true‏ في بيئة التطوير فقط، أو ركِّب شهادة ‏CA‏ في الحاوية عبر ‏SSL_CERT_FILE
  • Error response from daemon: conflict: unable to delete image‏ عند التحديث — أوقف الحاوية أولاً (docker compose down)، احذف الصورة (docker image rm codeberg.org/forgejo/forgejo)، ثم أعد السحب (docker compose pull) قبل إعادة التشغيل
  • مشغّلات ‏CI‏ عالقة على ‏waiting for available runner‏ بعد التسجيل — تحقق من أن المشغّل يستطيع الوصول إلى نسخة ‏Forgejo‏: curl -s https://git.your-domain.com/api/v1/version‏ من حاوية المشغّل يجب أن يُعيد ‏JSON‏ يحتوي النسخة؛ إن لم يُحَل اسم النطاق من الحاوية، أضف إدخال ‏extra_hosts‏ في ‏Compose‏ أو استخدم عنوان ‏IP‏ لـ‏VPS
  • رفض ميرورينغ المستودع بعد الهجرة إلى v16 — يحجب ‏Forgejo v16.0‏ افتراضياً الميرورينغ نحو عناوين الشبكة المحلية (‏FORGEJO__migrations__ALLOW_LOCALNETWORKS=false‏)؛ إن كان ميرورك يستهدف ‏GitLab‏ أو ‏Gitea‏ داخلياً، فعِّل الخيار صراحةً وقيِّده بقائمة بيضاء من ‏IP

‏أيّ أداة تختار حسب وضعك؟

‏للتثبيت الجديد في 2026: ‏Forgejo‏ هو الخيار الافتراضي في جميع المقارنات المستقلة تقريباً المنشورة هذا العام. تجمع الحوكمة المجتمعية، وإصلاحات الأمان المستقلة عن ‏Gitea Ltd.‏ (كما يتجلّى في الاستجابة لـ‏CVE-2026-59774‏ في يوم النشر)، والتوافق مع الأدوات الموجودة (مشغّلات، خطافات ويب، رموز)، ونفس بصمة الذاكرة كـ‏Gitea‏ — كل هذه العوامل لصالح ‏Forgejo‏ دون مقايضات تُذكر لمشروع جديد. مع ‏Forgejo v16.0‏، تسدّ تعليقات المراجعة متعددة الأسطر والمصادقة ‏JWT‏ الخارجية فجوتين وظيفيتين كانتا أحياناً تُبرّران اختيار ‏GitLab CE‏. إن كنت تشغّل نسخة ‏Gitea‏ محدّثة (‏1.27.1+‏) وتلبّي احتياجاتك، فالهجرة ليست ملحّة — لكن في المرة القادمة التي تفكر فيها بتحديث رئيسي، قيِّم ‏Forgejo‏ في تلك اللحظة. يُفرض ‏GitLab CE‏ عندما يحتاج فريقك إلى سلسلة ‏DevOps‏ بأكملها في تثبيت واحد — فحص الأمان، الصفحات، بيئات النشر، مقاييس ‏DORA‏ — وتملك البنية التحتية لتشغيله بشكل مريح. على ‏VPS‏ متواضع، إنه ليس الأداة المناسبة.

‏منصتك تعمل على بنية تحتية تتحكم فيها أنت

‏بمجرد اختيار منصتك، تعمل على ‏VPS‏ من ‏ServOrbit‏: وصول ‏root‏، عنوان ‏IPv4‏ مخصص، اختيار نظام التشغيل، بدون قيود تعسفية — بنية تحتية لا تعترض مسيرتك.

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

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

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة