لماذا تختار Forgejo لمخزن Git المستضاف ذاتياً
وُلدت Forgejo عام 2022 كنسخة مجتمعية من Gitea، دافعها مخاوف حول حوكمة المشروع الأصلي. تطويرها مجتمعي بالكامل، مرخصة بـMIT، ولا تعتمد على أي شركة تجارية. للفرق التي تريد السيطرة الكاملة على شيفراتها ومسارات CI/CD والحزم دون الاعتماد على GitHub أو GitLab أو Bitbucket، تمثل Forgejo الخيار الأخف والأكثر اكتفاءً. واجهتها مألوفة لكل مطور استخدم GitHub، والترحيل من Gitea سلس، والتوافق مع GitHub Actions يُخفض عتبة الانتقال.
فوائد ملموسة لـForgejo المستضافة ذاتياً
- سيادة كاملة: شيفرتك لا تغادر بنيتك التحتية أبداً
- متوافقة مع GitHub Actions عبر Forgejo Actions — أعد استخدام سيناريوهاتك الحالية
- بصمة ذاكرة منخفضة جداً (~256 ميغابايت لفريق صغير)
- سجل حزم مدمج: npm، PyPI، Maven، Helm، حاويات OCI
- لا حدود على عدد المستودعات الخاصة أو المتعاونين
- اتحاد ActivityPub قيد التطوير — تشغيل بيني مستقبلي مع منصات أخرى
- مفتوحة المصدر، قابلة للتدقيق، بلا مفاجآت في التسعير
- تحديثات تحت سيطرتك: أنت من يقرر وقت الترقية
المتطلبات المادية والبرمجية بأرقام حقيقية
حدد موارد خادم VPS وفق حجم فريقك الفعلي قبل نشر Forgejo. لـ1–5 مطورين مع عشرات المستودعات، يكفي 1 نواة و1 غيغابايت ذاكرة؛ Forgejo في وضع الخمول تستهلك ~80 ميغابايت. لـ5–20 مطوراً مع CI/CD نشطة، خطط بـ2 نواة و2 غيغابايت. لما يزيد على 20 مطوراً أو لمستودعات ضخمة، 4 نوى و4 غيغابايت تضمن أداءً سلساً. للتخزين، احسب حجم مستودعاتك مضافاً إليه 20% هامش للحزم والنسخ الاحتياطية.
على صعيد الشبكة، يجب فتح ثلاثة منافذ في جدار الحماية: المنفذ 80 لـHTTP (التحقق من Let's Encrypt)، المنفذ 443 لـHTTPS (حركة الويب)، والمنفذ 2222 لـSSH Git (تفادياً للتعارض مع SSH الإداري على المنفذ 22). برمجياً تحتاج Docker Engine إصدار ≥ 24، وDocker Compose الإصدار 2، واسم نطاق يشير إلى خادمك.
نشر Forgejo باستخدام Docker وSSL
تحضير البيئة
أنشئ المجلدات التي ستحتفظ بالبيانات خارج الحاوية:
mkdir -p /opt/forgejo/{data,config,db}
chown -R 1000:1000 /opt/forgejoأنشئ ملف /opt/forgejo/.env بقيمك الخاصة:
FORGEJO_DOMAIN=git.نطاقك.com
FORGEJO_SSH_PORT=2222
POSTGRES_PASSWORD=غيّر_هذه_الكلمةإنشاء ملف docker-compose.yml
services:
forgejo:
image: codeberg.org/forgejo/forgejo:latest
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=postgres
- FORGEJO__database__HOST=db:5432
- FORGEJO__database__NAME=forgejo
- FORGEJO__database__USER=forgejo
- FORGEJO__database__PASSWD=${POSTGRES_PASSWORD}
volumes:
- /opt/forgejo/data:/data
ports:
- "3000:3000"
- "${FORGEJO_SSH_PORT:-2222}:22"
depends_on:
- db
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=forgejo
- POSTGRES_USER=forgejo
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- /opt/forgejo/db:/var/lib/postgresql/dataتشغيل الخدمات
cd /opt/forgejo
docker compose up -d
docker compose logs -f forgejoانتظر حتى يظهر السطر Listen on :3000. تُنفذ Forgejo عمليات ترحيل قاعدة البيانات تلقائياً عند الإطلاق الأول.
إعداد البروكسي العكسي وSSL مع Caddy
Caddy هو الخيار الأبسط للحصول على شهادة Let's Encrypt تلقائية. ثبّته ثم أنشئ ملف /etc/caddy/Caddyfile:
git.نطاقك.com {
reverse_proxy localhost:3000
}شغّل Caddy: systemctl enable --now caddy. تُصدر شهادة TLS وتُجدَّد تلقائياً. إذا فضّلت nginx، استخدم كتلة proxy_pass http://127.0.0.1:3000; مع Certbot.
إتمام إعداد المنصة
افتح https://git.نطاقك.com في متصفحك. يظهر معالج الإعداد مرة واحدة فقط. أدخل النطاق وعنوان SSH (ssh://git.نطاقك.com:2222) وبريد المدير، وأوقف التسجيل العام من هذه الشاشة إذا كانت منصتك خاصة. بعد إرسال المعالج، يُقفل الإعداد في ملف /opt/forgejo/data/gitea/conf/app.ini.
تثبيت runner لـForgejo Actions
على الخادم ذاته أو جهاز مخصص، احصل على الرمز من *إدارة الموقع → Runners*. انشر الـrunner عبر Docker:
services:
runner:
image: code.forgejo.org/forgejo/act_runner:latest
restart: unless-stopped
environment:
- FORGEJO_INSTANCE_URL=https://git.نطاقك.com
- FORGEJO_RUNNER_TOKEN=رمزك_هنا
- FORGEJO_RUNNER_NAME=runner-رئيسي
- FORGEJO_RUNNER_LABELS=ubuntu-latest:docker://node:20,docker:docker://docker:dind
volumes:
- /var/run/docker.sock:/var/run/docker.sockيظهر الـrunner في الواجهة خلال دقيقة. يدعم وضع Docker (عزل كامل، موصى به)، ووضع Process (بدون Docker)، ووضع Auto (يكتشف تلقائياً).
كتابة أول سيناريوهات Forgejo Actions
التوافق مع صياغة GitHub Actions واسع. أنشئ ملف .forgejo/workflows/ci.yml في جذر مستودعك:
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: تشغيل الاختبارات
run: |
npm ci
npm testتتوافق بطاقات runs-on مع البطاقات المعلنة عند تسجيل الـrunner. يمكنك تعريف عدة runners بمختلف البطاقات (مثل arm64، gpu، high-memory) واستهداف البيئة المناسبة لكل مهمة. تعمل الحزم والذاكرة المؤقتة مع الـactions الرسمية ذاتها المستخدمة على GitHub.
أمان ما بعد التثبيت: الإعدادات الأساسية
منصة Forgejo الحديثة التثبيت تعمل لكنها غير مُصلَّبة. إليك الست نقاط الواجبة المعالجة قبل فتحها لفريقك.
تعطيل التسجيل العام. في *إدارة الموقع → الإعدادات → المستخدمون*، أزل تحديد «السماح بتسجيل المستخدمين». لا ينبغي لأحد إنشاء حساب بدون دعوة على منصة داخلية.
تفعيل المصادقة الثنائية 2FA للمديرين. يجب على كل حساب مدير تفعيل 2FA من *الإعدادات → الأمان*. أجبر 2FA على جميع المستخدمين عبر إعداد REQUIRE_SIGNIN_VIEW.
SSH بالمفاتيح فقط. عطّل المصادقة بكلمة المرور في /etc/ssh/sshd_config على الخادم المضيف (PasswordAuthentication no). لـSSH Git على المنفذ 2222، تقبل Forgejo المفاتيح العامة المسجلة في ملفات تعريف المستخدمين فقط — وهذا سلوكها الافتراضي.
أسرار webhooks. عند إنشاء كل webhook، امْلأ دائماً حقل *السر*. توقّع Forgejo الحمولة بـHMAC-SHA256؛ على متلقيك التحقق من هذا التوقيع قبل معالجة الحدث.
الحزم الخاصة. إذا استخدمت السجل المدمج للحزم، عيّن رؤية افتراضية *خاصة* في إعدادات المؤسسة. يجب أن تمتلك الرموز المستخدمة للنشر نطاقاً أدنى (packages:write فقط).
جدار الحماية. أغلق كل المنافذ عدا 80 و443 و2222. يجب ألا يُكشف المنفذ 3000 (Forgejo الداخلي) مباشرة؛ يستهلكه البروكسي العكسي عبر الحلقة المحلية فقط.
تحديث Forgejo دون انقطاع
إجراء تحديث Docker بسيط ولا يتطلب سوى ثوانٍ من الانقطاع.
cd /opt/forgejo
# 1. سحب الصورة الجديدة
docker compose pull forgejo
# 2. نسخ احتياطي لقاعدة البيانات قبل أي ترحيل
docker compose exec db pg_dump -U forgejo forgejo > backup-$(date +%Y%m%d).sql
# 3. إعادة تشغيل الخدمة
docker compose up -d forgejo
# 4. التحقق من عمليات ترحيل المخطط
docker compose logs forgejo | grep -i migratتُنفذ Forgejo عمليات الترحيل تلقائياً عند الإطلاق. تحقق من ظهور السطر Finished successfully في السجلات. عند حدوث خطأ في الترحيل، استعد النسخة الاحتياطية وأبلغ عن المشكلة على متتبع Forgejo. اقرأ ملاحظات الإصدار دائماً قبل القفز بين الإصدارات الرئيسية.
الترحيل من Gitea في خمس دقائق
Forgejo نسخة مباشرة من Gitea: مخطط قاعدة بياناتها متوافق حتى الإصدار 1.21. للترحيل، أوقف Gitea، انسخ مجلد بياناتها إلى /opt/forgejo/data، استبدل الصورة في ملف docker-compose وأعد التشغيل. تكتشف Forgejo مخطط Gitea تلقائياً وتُطبق عمليات الترحيل الخاصة بها. تُحفظ مستودعاتك ومستخدموك ومفاتيح SSH والـwebhooks والإشكاليات بالكامل. للإصدارات الأحدث من Gitea، راجع مصفوفة التوافق على ويكي Forgejo قبل الترحيل.
استكشاف الأخطاء: المشكلات الأكثر شيوعاً
رفض اتصال SSH على المنفذ 2222. تحقق أولاً من أن Docker ينشر المنفذ (docker compose ps → عمود Ports). ثم اختبر من العميل: ssh -p 2222 git@git.نطاقك.com. إذا كانت الإجابة PTY allocation request failed، الاتصال يعمل — Forgejo ترد بـHi <user>! You've successfully authenticated. إذا حصلت على Connection refused، جدار الحماية يحجب المنفذ: ufw allow 2222/tcp.
Runner يظهر غير متصل في الواجهة. يتصل الـrunner بـForgejo عبر HTTPS صادر. تحقق من أن حاوية الـrunner تستطيع الوصول إلى git.نطاقك.com. شهادة موقّعة ذاتياً تستلزم تثبيت مرجع مصادقتك في الحاوية. أعد تشغيل الـrunner بعد إصلاح الاتصال: docker compose restart runner.
رفض push بواسطة hook. قد ترفض Forgejo دفعة إذا كانت قاعدة حماية فرع نشطة (مراجعة مطلوبة، اختبارات CI إلزامية) أو تجاوز ملف حد الحجم. تحتوي رسالة خطأ git على التفاصيل. للملفات الكبيرة (> 100 ميغابايت)، استخدم Git LFS: تدعم Forgejo بروتوكول LFS أصلاً.
واجهة بطيئة بعد أشهر. شغّل جامع مهملات Git من لوحة الإدارة: *الإدارة → المستودعات → تشغيل Git GC*. للأتمتة، هيئ المهمة المجدولة في app.ini تحت [cron.run_task].
اتحاد ActivityPub: ما تبنيه Forgejo
Forgejo هي أول منصة استضافة Git تُطبق الاتحاد عبر بروتوكول ActivityPub (البروتوكول ذاته الذي يستخدمه Mastodon). منذ الإصدار 1.20 يمكنك متابعة مستودع بعيد مستضاف على نسخة Forgejo أخرى متحدة واستقبال إشعارات الإشكاليات وطلبات السحب في جدولك الزمني المحلي. الاتحاد الكامل — التفريع عبر النسخ وطلبات السحب بين المنصات — قيد التقييس ضمن مجموعة عمل ForgeFed. ستتيح هذه التطورات مستقبلاً المساهمة دون إنشاء حساب على كل نسخة.
Forgejo مقابل Gitea مقابل GitLab CE: اختر منصتك
| المعيار | Forgejo | Gitea | GitLab CE |
|---|---|---|---|
| الحوكمة | مجتمعية (Codeberg e.V.) | تجارية (Gitea Ltd) | تجارية (GitLab Inc) |
| الحد الأدنى من الذاكرة | ~80 ميغابايت | ~80 ميغابايت | ~4 غيغابايت |
| توافق GitHub Actions | نعم (Forgejo Actions) | نعم (Gitea Act) | لا (CI خاصة) |
| سجل الحزم | نعم (متعدد الأشكال) | نعم | نعم |
| اتحاد ActivityPub | قيد التطوير (ForgeFed) | لا | لا |
| الترحيل من GitHub | نعم (مرايا + استيراد) | نعم | نعم |
| واجهة الإدارة | بسيطة ومدمجة | بسيطة ومدمجة | كاملة لكن ثقيلة |
| الرخصة | MIT | MIT | MIT (CE) / EE (مدفوع) |
| وتيرة الإصدارات | شهرية | شهرية | شهرية |