لماذا تستضيف منصة Git ذاتيًا على VPS
منصة Git المستضافة ذاتيًا تُبقي ملكيتك الفكرية بعيدًا عن المنصات العامة وتزيل أي حد تعسّفي على عدد المستودعات الخاصة أو المتعاونين أو دقائق CI. على VPS، تتحكّم في موقع البيانات والنسخ الاحتياطي والتكامل مع خط الإنتاج الداخلي الخاص بك. Gitea (وفرعه Forgejo) مكتوب بلغة Go: ثنائي (binary) واحد، إقلاع فوري، بصمة ذاكرة ضئيلة، مثالي لـ VPS متواضع. أما GitLab CE فهو حزمة متكاملة (المشكلات وCI/CD وسجل Docker وسجل الحزم وويكي والبيئات) لكنه يستهلك ذاكرة (RAM) أكبر بكثير.
فوائد منصة مستضافة ذاتيًا
- مستودعات خاصة غير محدودة من دون اشتراك لكل مقعد
- CI/CD تحت سيطرتك، مع مُشغِّلاتك الخاصة على VPS
- الأسرار والرموز (tokens) مخزَّنة لديك، خارج أي منصة طرف ثالث
- سجل صور Docker والحزم مدمج، قريب من عمليات نشرك
- الامتثال وتوطين البيانات تحت السيطرة الكاملة
- مع Gitea: ثنائي واحد، ونسخ احتياطي بنسخ مجلد وقاعدة بيانات
Gitea مقابل GitLab: اختلافات الرخصة في 2026
Gitea مُصدَر بموجب رخصة MIT: يمكنك قراءة الشيفرة وتعديلها وإعادة توزيعها واستضافتها دون قيود تجارية. Forgejo، فرعه المجتمعي الذي وُلد عام 2022، يطبّق الرخصة ذاتها. GitLab CE أيضًا MIT — لكن طبقة Community Edition فقط. GitLab EE (Enterprise Edition) ملكي: الميزات المميزة (SAML SSO المتقدم، موافقات MR المتعددة، SAST/DAST المدمج، الملاحم، خرائط الطريق) محجوبة خلف اشتراك مدفوع يبدأ بمئات اليوروهات لكل مستخدم سنويًا. الخطر الحقيقي لفريق يستضيف GitLab CE ليس في الرخصة بل في تأثير الترقية: الميزات الغائبة في CE تدفع تدريجيًا نحو EE المدفوع. مع Gitea أو Forgejo، جميع الميزات المتاحة مُدرجة في النسخة المجانية دون أي مستوى مدفوع.
الأداء وموارد الخادم
يستهلك Gitea نحو 100 إلى 150 ميغابايت من الذاكرة في وضع الخمول في نشر Docker قياسي مع PostgreSQL. مع نحو عشرة مُشغِّلات نشطة وبضعة خطوط أنابيب متزامنة، تبقى دون 400 ميغابايت للمنصة وحدها. GitLab CE في صيغة omnibus في فئة مختلفة: يعمل PostgreSQL وRedis وSidekiq وGitaly وPuma وNGINX بالتوازي. في وضع الخمول، يتجاوز المجموع عادةً 3 إلى 4 غيغابايت، ويمكن أن يرتفع إلى 6 إلى 8 غيغابايت تحت حمل CI. يوصي GitLab رسميًا بـ 8 غيغابايت من الذاكرة للاستخدام الإنتاجي مع تفعيل CI.
Gitea مقابل GitLab CE: جدول مقارنة شامل
مرّر الجدول أفقيًا
| المعيار | Gitea / Forgejo | GitLab CE |
|---|---|---|
| الذاكرة في وضع الخمول | ~128 ميغابايت (المنصة وحدها) | 3 إلى 4 غيغابايت (omnibus كامل) |
| الذاكرة المُوصى بها للإنتاج | 1 إلى 2 غيغابايت | 8 غيغابايت |
| البنية | ثنائي Go واحد | حزمة متعددة الخدمات (omnibus) |
| زمن الإقلاع | شبه فوري | عدة دقائق |
| الرخصة | MIT (Gitea) / MIT (Forgejo) | MIT (CE) / ملكي (EE) |
| CI/CD مدمج | Gitea Actions (بأسلوب GitHub) | GitLab CI/CD، متكامل جدًا |
| مُشغِّلات موزّعة | أساسية (act runner) | متقدمة (مُشغِّلات موزّعة، مُنفِّذ k8s) |
| SAST / DAST مدمج | لا (عبر إضافات CI) | EE فقط |
| موافقات MR المتعددة | بسيطة | متقدمة (EE) |
| سجل Docker / الحزم | مُضمَّن وخفيف | مُضمَّن وغني |
| إدارة المشاريع (المشكلات، اللوحات) | أساسية | متقدمة (epics حسب الإصدار) |
| سهولة النسخ الاحتياطي | مجلد + تفريغ SQL | إجراء omnibus مخصص |
| مثالي لـ | VPS متواضع، فرق من 1 إلى 30 مطوّرًا | منصة DevOps للمؤسسات |
مقارنة ميزات CI/CD
ظهر Gitea Actions في Gitea 1.19 (2023) ويُعيد استخدام صياغة سير عمل GitHub Actions بالضبط: ملفات .github/workflows/*.yml الموجودة قابلة لإعادة الاستخدام دون تعديل في معظم الحالات. هذا كافٍ لغالبية خطوط الأنابيب: البناء والاختبار والفحص ودفع الصور والنشر عبر SSH. تظهر القيود في الحالات المتقدمة: لا ذاكرة تخزين مؤقتة مشتركة بين المُشغِّلات على نطاق واسع، ولا بيئات مراجعة أصيلة. GitLab CI أكثر نضجًا في هذه النقاط: مُشغِّلات موزّعة على أجهزة متعددة، مُنفِّذات Kubernetes، ذاكرة تخزين مؤقتة مشتركة، بيئات ديناميكية، تطبيقات مراجعة. القاعدة العملية: Gitea Actions يكفي لفرق من 1 إلى 20 مطوّرًا بخطوط أنابيب قياسية؛ GitLab CI يصبح ضروريًا عندما تكون نضج خط الأنابيب معيار اختيار بحد ذاته.
الهجرة من GitLab إلى Gitea: ما تغطيه CVE-2026-85706
CVE-2026-85706 هي ثغرة أمنية من نوع Server-Side Request Forgery (SSRF) اكتُشفت في GitLab CE وEE، وتؤثر في الإصدارات السابقة لتصحيح مارس 2026. تتيح لمهاجم مصادَق عليه إجبار GitLab على تنفيذ طلبات HTTP نحو موارد الشبكة الداخلية عبر ميزة استيراد المستودع البعيد. على VPS حيث يشارك GitLab الشبكة الداخلية مع خدمات أخرى (قواعد بيانات، سجلات، واجهات برمجية)، يكون التعرّض حقيقيًا. Gitea غير متأثر بهذه الثغرة تحديدًا. الهجرة GitLab → Gitea موثّقة ومغطّاة بأداة gitea-migration-tool: تستورد المستودعات والمشكلات والتسميات والمعالم وطلبات السحب والتعليقات من API GitLab. إذا كنت تشغّل نسخة GitLab CE غير مُرقَّعة على VPS مكشوف، فالهجرة إلى Gitea أو الترقية العاجلة هما الخياران الوحيدان المعقولان.
متى تختار GitLab CE رغم تكلفة الموارد
- فرق تضم أكثر من 50 مطوّرًا نشطًا: إدارة الأذونات الدقيقة والمجموعات المتداخلة في GitLab تبرّر التعقيد
- الامتثال المؤسسي أو شهادة ISO 27001: سجلات التدقيق وموافقات MR بنصاب قانوني وسياسات حماية الدفع أكثر نضجًا
- SAST / DAST مدمج في خط الأنابيب (يتطلب GitLab EE، لكن بعض الفرق تفضّل توحيد أدواتها في منتج مدفوع واحد)
- تطبيقات المراجعة والبيئات الديناميكية لكل MR: GitLab CI يتعامل مع هذا أصيلًا؛ Gitea Actions يتطلب أدوات خارجية
- مُشغِّلات Kubernetes مع التوسّع التلقائي: GitLab لديه مُشغِّل K8s مخصص ومُنفِّذ أصيل
- ويكي مرتبط بالمستودع مع سجل Git وعروض Mermaid / PlantUML مدمجة في الواجهة
المتطلبات حسب المنصة المختارة
Gitea اقتصادي: يكفي 1 vCPU و1 غيغابايت من الذاكرة لفريق صغير، و2 غيغابايت مع قاعدة البيانات وبضعة مُشغِّلات. أما GitLab CE فأكثر نهمًا بكثير: استهدف 4 غيغابايت من الذاكرة كحد أدنى (يُوصى بـ 8 غيغابايت في الاستخدام الفعلي مع CI)، و4 vCPU وقرصًا سريعًا. في كلتا الحالتين تحتاج إلى Docker وCompose، ونطاق فرعي، وبروكسي عكسي لأجل TLS. خصّص وحدة تخزين مخصصة للمستودعات واستراتيجية للنسخ الاحتياطي.
تثبيت Gitea على VPS ServOrbit في 4 خطوات
إعداد وحدة التخزين وشبكة Docker
على VPS ServOrbit الخاص بك، أنشئ مجلدات البيانات وشبكة Docker معزولة:
mkdir -p /srv/gitea/{data,db} && docker network create forge. تتيح هذه الشبكة لـ Gitea وPostgreSQL التواصل دون كشف قاعدة البيانات للواجهة العامة.كتابة ملف docker-compose.yml
عرِّف خدمتين:
gitea/gitea:latest مُركَّبة على /srv/gitea/data وpostgres:16-alpine مُركَّبة على /srv/gitea/db. اكشف المنفذ 3000 داخليًا ومنفذ SSH Git2222 خارجيًا. مرِّر GITEA__database__DB_TYPE=postgres وGITEA__server__DOMAIN وGITEA__server__ROOT_URL كمتغيرات بيئة.ضبط النطاق وSSL
في مساحة عميل ServOrbit، أنشئ سجل DNS لـ
git.yourdomain.com يشير إلى IP الـ VPS. وجِّه هذا النطاق الفرعي باستخدام Caddy أو Nginx نحو منفذ Gitea3000. تحقق من أن X-Forwarded-Proto: https مُمرَّر كي تكون روابط الاستنساخ صحيحة.إنشاء أول مستودع وتوصيل مُشغِّل CI
نفِّذ
docker compose up -d، ثم انتقل إلى https://git.yourdomain.com. معالج التثبيت يفتح عند أول اتصال: حدّد نوع قاعدة البيانات (PostgreSQL)، أكِّد النطاق، وأنشئ حساب المشرف. للـ CI، ثبِّت act_runner وسجِّله في إدارة موقع Gitea (الإدارة → المُشغِّلات).
نشر Gitea (أو GitLab) على VPS باستخدام Docker
إنشاء وحدات التخزين والشبكة
جهّز
mkdir -p /srv/gitea/{data,db} وشبكة Docker مخصصة docker network create forge. يسهّل الفصل بين data/db النسخ الاحتياطي المستقل للشيفرة ولقاعدة البيانات.تعريف ملف docker-compose.yml
بالنسبة إلى Gitea، عرِّف خدمة
gitea/gitea إضافةً إلى postgres، وركِّب وحدات التخزين، واكشف منفذ HTTP3000 ومنفذ SSH الخاص بـ Git2222 محليًا. أما بالنسبة إلى GitLab، فاستخدم gitlab/gitlab-ce مع المتغير GITLAB_OMNIBUS_CONFIG لتعيين external_url.التشغيل وإنهاء التثبيت
نفِّذ
docker compose up -d. يعرض Gitea معالج تثبيت عند أول اتصال (أدخِل نوع قاعدة البيانات والنطاق)؛ أما GitLab فيستغرق عدة دقائق للتهيئة، فاحصل على كلمة مرور root المُولَّدة من السجلات (logs).ضبط البروكسي العكسي وSSL
وجِّه git.yourdomain.com إلى منفذ HTTP الخاص بالمنصة باستخدام Caddy أو Nginx للحصول على شهادة Let's Encrypt. احرص على تمرير
X-Forwarded-Proto الصحيح كي تكون روابط الاستنساخ عبر HTTPS صحيحة.تفعيل SSH الخاص بـ Git
اربط منفذ SSH الخاص بالحاوية بمنفذ على الـ VPS (مثل 2222) واضبط مفاتيحك. عيِّن
SSH_DOMAIN كي تكون أوامر git clone التي تقترحها الواجهة دقيقة.توصيل CI/CD
سجِّل مُشغِّلًا (runner): إما Gitea Actions (متوافق مع صياغة GitHub Actions) أو GitLab Runner عبر Docker. حُدّ من موارده واعزله في حاويته الخاصة كي لا تُسقط مهمة ثقيلة المنصة.
Gitea مقابل GitLab CE: جدول المقارنة
مرّر الجدول أفقيًا
| المعيار | Gitea | GitLab CE |
|---|---|---|
| الحد الأدنى المُوصى به من الذاكرة | 1 إلى 2 غيغابايت | 4 إلى 8 غيغابايت |
| البنية | ثنائي Go واحد | حزمة متعددة الخدمات (omnibus) |
| زمن الإقلاع | شبه فوري | عدة دقائق |
| CI/CD مدمج | Gitea Actions (بأسلوب GitHub) | GitLab CI/CD، متكامل جدًا |
| سجل Docker / الحزم | مُضمَّن وخفيف | مُضمَّن وغني |
| إدارة المشاريع (المشكلات، اللوحات) | أساسية | متقدمة (epics حسب الإصدار) |
| سهولة النسخ الاحتياطي | مجلد + تفريغ SQL | إجراء omnibus مخصص |
| مثالي لـ | VPS متواضع، فريق صغير/متوسط | منصة DevOps متكاملة |
Gitea + Woodpecker CI: المجموعة الخفيفة لفرق من 1 إلى 15
إذا كانت Gitea Actions تبدو قريبة جدًا من منظومة GitHub وتريد CI مستضافة ذاتيًا بالكامل دون اعتماد على act، فانظر إلى Woodpecker CI (فرع من Drone CI، رخصة Apache 2.0). يتكامل أصيلًا مع Gitea عبر OAuth، يعمل على Docker، وصياغة YAML الخاصة به أكثر وضوحًا من GitHub Actions. تستهلك مجموعة Gitea + Woodpecker CI أقل من 300 ميغابايت من الذاكرة في وضع الخمول على VPS بـ 2 غيغابايت.
في GitLab، تجنّب الـ OOM-kill على VPS صغير بتقليل التزامن: اضبط puma['worker_processes'] على 2 وsidekiq['max_concurrency'] على 10 في إعدادات omnibus. وإذا ظلّت الذاكرة مشكلة، فانظر إلى Forgejo (فرع مجتمعي من Gitea) الذي يحافظ على الخفّة مع تغطية 90% من احتياجات الفريق، بما في ذلك السجل وActions.