التطوير10 دقيقة قراءة

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

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

‏لماذا هذا السؤال ملحّ في 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‏ أم تُسرِّع هجرةً كنت تؤجّلها.

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

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

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

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

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

‏المعيار‏Forgejo / Gitea‏GitLab CE
‏الحد الأدنى للذاكرة‏512 MB – 1 GB‏4 GB (8 GB موصى به)
‏صيغة التوزيع‏ملف ثنائي منفرد أو صورة Docker‏Omnibus (متعدد العمليات) أو Helm chart
‏CI/CD الأصلي‏Forgejo Actions / Gitea Actions (صياغة GitHub Actions)‏GitLab CI/CD، مشغّلات مشتركة أو مخصصة
‏الحوكمة‏Forgejo: جمعية غير ربحية (Codeberg) · Gitea: Gitea Ltd.‏GitLab Inc. (open-core، CE مجاني)
‏سجلّ الحاويات‏نعم (حزم + container registry)‏نعم، أكثر اكتمالاً
‏الاتحاد / ActivityPub‏Forgejo: beta اختياري · Gitea: غير مُخطَّط‏لا
‏الهجرة من Gitea‏Forgejo: نفس مخطط قاعدة البيانات، أمر واحد · GitLab: أداة استيراد عبر API‏استيراد جزئي (مستودعات، issues، PRs)
‏الأنسب لـ‏فِرق من 1 إلى 50 مطوراً، VPS متواضع، CI خفيفة‏مؤسسة تريد كل شيء في تثبيت واحد، ميزانية بنية تحتية متاحة

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

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

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

01

‏تجهيز الـ 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‏ للنظام).

02

‏إنشاء الأدلة وملف 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‏).

03

‏تشغيل Forgejo

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

04

‏إعداد 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‏).

05

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

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

06

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

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

07

‏تفعيل مشغّل 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‏.

08

‏التحقق من الأمان الأساسي

‏تأكّد من أن ‏FORGEJO__server__LOCAL_ROOT_URL‏ لا يشير إلى ‏IP‏ داخلي مكشوف (ناقل ‏SSRF‏). منذ ‏Forgejo v16.0‏، تصليب ‏SSRF‏ مفعَّل افتراضياً لمزامنة ‏Git‏ — راجع ‏FORGEJO__migrations__ALLOW_LOCALNETWORKS‏ في إعداداتك إن احتجت إلى مزامنة مستودعات داخلية.

‏لنسخة ‏Gitea‏ متأثرة بـ ‏CVE-2026-59774‏ (النسخ ‏1.22.1‏ إلى ‏1.27.0‏): الهجرة إلى ‏Forgejo‏ والترقية إلى ‏Gitea 1.27.1‏ كلتاهما تُصلحان الثغرة. إن قرّرت البقاء على ‏Gitea‏، طبِّق الرقعة فوراً. وإن كنت تفكّر في ‏Forgejo‏ منذ فترة، تحلّ الهجرة المشكلتين معاً: رقِّع بالهجرة بدلاً من الترقية ثم الهجرة لاحقاً. في كل الأحوال، ألغِ صلاحية ‏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‏ في الـ webhooks الصادرة — نسختك تستدعي خدمة داخلية بشهادة موقَّعة ذاتياً؛ أضف 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‏ مباشرة

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

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

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

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

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

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