دليل عملي

الاستضافة الذاتية

استضافة ‎Forgejo‎ على خادم VPS: دليل شامل 2025

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

10 دقائق للقراءةعدد الخطوات: 6
المحتويات· لماذا تختار ‎Forgejo‎ لمخزن ‎Git‎ المستضاف ذاتياً1/11
  1. 01لماذا تختار ‎Forgejo‎ لمخزن ‎Git‎ المستضاف ذاتياً
  2. 02فوائد ملموسة لـ‎Forgejo‎ المستضافة ذاتياً
  3. 03المتطلبات المادية والبرمجية بأرقام حقيقية
  4. 04نشر ‎Forgejo‎ باستخدام ‎Docker‎ و‎SSL‎
  5. 05كتابة أول سيناريوهات ‎Forgejo Actions‎
  6. 06أمان ما بعد التثبيت: الإعدادات الأساسية
  7. 07تحديث ‎Forgejo‎ دون انقطاع
  8. 08الترحيل من ‎Gitea‎ في خمس دقائق
  9. 09استكشاف الأخطاء: المشكلات الأكثر شيوعاً
  10. 10اتحاد ‎ActivityPub‎: ما تبنيه ‎Forgejo‎
  11. 11‎Forgejo‎ مقابل ‎Gitea‎ مقابل ‎GitLab CE‎: اختر منصتك

لماذا تختار ‎Forgejo‎ لمخزن ‎Git‎ المستضاف ذاتياً

وُلدت ‎Forgejo‎ عام 2022 كنسخة مجتمعية من ‎Gitea‎، دافعها مخاوف حول حوكمة المشروع الأصلي. تطويرها مجتمعي بالكامل، مرخصة بـ‎GPLv3+‎ منذ الإصدار ‎v9.0‎ (أغسطس 2024؛ وبـ‎MIT‎ قبل ذلك)، ولا تعتمد على أي شركة تجارية. للفرق التي تريد السيطرة الكاملة على شيفراتها ومسارات ‎CI/CD‎ والحزم دون الاعتماد على ‎GitHub‎ أو ‎GitLab‎ أو ‎Bitbucket‎، تُعد ‎Forgejo‎ من أخف الخيارات المتاحة. واجهتها مألوفة لكل مطور استخدم ‎GitHub‎، والترحيل من ‎Gitea‎ سلس، والتوافق مع ‎GitHub Actions‎ يُخفض عتبة الانتقال.

فوائد ملموسة لـ‎Forgejo‎ المستضافة ذاتياً

  • سيادة كاملة: شيفرتك لا تغادر بنيتك التحتية أبداً
  • متوافقة مع ‎GitHub Actions‎ عبر ‎Forgejo Actions‎ — أعد استخدام سيناريوهاتك الحالية
  • بصمة ذاكرة منخفضة: يكفي خادم ‎VPS‎ صغير لفريق صغير
  • سجل حزم مدمج: ‎npm‎، ‎PyPI‎، ‎Maven‎، ‎Helm‎، حاويات ‎OCI‎
  • لا حدود على عدد المستودعات الخاصة أو المتعاونين
  • اتحاد ‎ActivityPub‎ قيد التطوير — تشغيل بيني مستقبلي مع منصات أخرى
  • مفتوحة المصدر، قابلة للتدقيق، بلا مفاجآت في التسعير
  • تحديثات تحت سيطرتك: أنت من يقرر وقت الترقية

المتطلبات المادية والبرمجية بأرقام حقيقية

حدد موارد خادم ‎VPS‎ وفق حجم فريقك الفعلي قبل نشر ‎Forgejo‎. لـ1–5 مطورين مع عشرات المستودعات، يكفي 1 نواة و1 غيغابايت ذاكرة. لـ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‎

  1. تحضير البيئة

    أنشئ المجلدات التي ستحتفظ بالبيانات خارج الحاوية:

    mkdir -p /opt/forgejo/{data,config,db}
    chown -R 1000:1000 /opt/forgejo

    أنشئ ملف /opt/forgejo/.env بقيمك الخاصة:

    FORGEJO_DOMAIN=git.نطاقك.com
    FORGEJO_SSH_PORT=2222

    أضف إليه كلمة مرور مولَّدة لقاعدة البيانات، لا كلمة مرور مثال أبدًا، ثم احمِ الملف:

    echo "POSTGRES_PASSWORD=$(openssl rand -hex 32)" >> /opt/forgejo/.env
    chmod 600 /opt/forgejo/.env
  2. إنشاء ملف ‎docker-compose.yml‎

    services:
      forgejo:
        image: codeberg.org/forgejo/forgejo:17
        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:
          - "127.0.0.1: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
  3. تشغيل الخدمات

    cd /opt/forgejo
    docker compose up -d
    docker compose logs -f forgejo

    انتظر حتى تُظهر السجلات أن خادم الويب يستمع على المنفذ 3000. تُنفذ ‎Forgejo‎ عمليات ترحيل قاعدة البيانات تلقائياً عند الإطلاق الأول.

  4. إعداد البروكسي العكسي و‎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‎.

  5. إتمام إعداد المنصة

    افتح https://git.نطاقك.com في متصفحك. يظهر معالج الإعداد مرة واحدة فقط. أدخل النطاق وعنوان ‎SSH‎ (ssh://git.نطاقك.com:2222) وبريد المدير، وأوقف التسجيل العام من هذه الشاشة إذا كانت منصتك خاصة. بعد إرسال المعالج، يُقفل الإعداد في ملف /opt/forgejo/data/gitea/conf/app.ini.

  6. تثبيت ‎runner‎ لـ‎Forgejo Actions‎

    ينفّذ الـ‎runner‎ شيفرة سيناريوهاتك: ثبّته على جهاز مخصص إن أمكن. في *إدارة الموقع → Actions → Runners* (/admin/actions/runners)، انقر على *إنشاء runner جديد*: تعرض ‎Forgejo‎ معرّفًا ‎UUID‎ ورمزًا سريًا. ولّد ملف الإعداد (docker run --rm data.forgejo.org/forgejo/runner:13 forgejo-runner generate-config > data/runner-config.yml)، وانسخ عنوان المنصة والمعرّف والرمز في القسم server.connections، وصرّح بالبطاقات (مثل ubuntu-latest:docker://node:20) في القسم runner. ثم انشر الـ‎runner‎ مع خادم ‎Docker‎ خاص به (‎docker-in-docker‎) بدل تركيب /var/run/docker.sock الخاص بالمضيف، الذي يمنح كل مهمة صلاحيات ‎root‎ على الخادم:

    services:
      docker-in-docker:
        image: docker:dind
        privileged: true
        command: ["dockerd", "-H", "tcp://0.0.0.0:2375", "--tls=false"]
        restart: unless-stopped
    
      runner:
        image: data.forgejo.org/forgejo/runner:13
        depends_on:
          - docker-in-docker
        environment:
          DOCKER_HOST: tcp://docker-in-docker:2375
        user: "1001:1001"
        volumes:
          - ./data:/data
        command: forgejo-runner daemon --config runner-config.yml
        restart: unless-stopped

    يبقى المنفذ 2375 لخادم ‎docker-in-docker‎ على الشبكة الداخلية لـ‎Compose‎: لا تنشره أبدًا. يظهر الـ‎runner‎ في الواجهة فور اتصاله. تحدد كل بطاقة وضع التنفيذ: docker:// (حاوية، موصى به)، وlxc:// (حاوية ‎LXC‎)، وhost (مباشرة على الجهاز دون أي عزل: يُحصر في المهام الموثوقة).

كتابة أول سيناريوهات ‎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‎ الحديثة التثبيت تعمل لكنها غير مُصلَّبة. إليك الست نقاط الواجبة المعالجة قبل فتحها لفريقك.

تعطيل التسجيل العام. إن لم تفعل ذلك في المعالج، أضف FORGEJO__service__DISABLE_REGISTRATION=true إلى متغيرات بيئة الحاوية (أو DISABLE_REGISTRATION = true في القسم [service] من app.ini): عندها لا يستطيع إنشاء الحسابات إلا المدير. لا ينبغي لأحد إنشاء حساب بدون دعوة على منصة داخلية.

تفعيل المصادقة الثنائية ‎2FA‎ للمديرين. يجب على كل حساب مدير تفعيل ‎2FA‎ من *الإعدادات → الأمان*. لفرضها، اضبط GLOBAL_TWO_FACTOR_REQUIREMENT في القسم [security] من app.ini (admin للمديرين، all لجميع المستخدمين). أما REQUIRE_SIGNIN_VIEW فيفرض تسجيل الدخول لتصفح المنصة فقط.

‎SSH‎ بالمفاتيح فقط. عطّل المصادقة بكلمة المرور في /etc/ssh/sshd_config على الخادم المضيف (PasswordAuthentication no). لـ‎SSH Git‎ على المنفذ 2222، تقبل ‎Forgejo‎ المفاتيح العامة المسجلة في ملفات تعريف المستخدمين فقط — وهذا سلوكها الافتراضي.

أسرار ‎webhooks‎. عند إنشاء كل ‎webhook‎، امْلأ دائماً حقل *السر*. توقّع ‎Forgejo‎ الحمولة بـ‎HMAC-SHA256‎؛ على متلقيك التحقق من هذا التوقيع قبل معالجة الحدث.

الحزم الخاصة. إذا استخدمت السجل المدمج للحزم، تذكّر أن الحزمة ترث رؤية مالكها: انشرها تحت مؤسسة أو حساب خاص لحصرها في أعضائه. يجب أن تمتلك الرموز المستخدمة للنشر نطاقًا أدنى (write:package فقط).

جدار الحماية. أغلق كل المنافذ عدا 80 و443 و2222. يجب ألا يُكشف المنفذ 3000 (‎Forgejo‎ الداخلي) مباشرة؛ يستهلكه البروكسي العكسي عبر الحلقة المحلية فقط، ولهذا ينشره ملف ‎compose‎ على 127.0.0.1:3000. المنفذ الذي ينشره ‎Docker‎ يتجاوز قواعد ‎ufw‎: وحده هذا الربط بـ127.0.0.1 يُبقيه بعيدًا عن الإنترنت.

تحديث ‎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‎ عمليات الترحيل تلقائياً عند الإطلاق. تحقق من أن السجلات لا تُظهر أي خطأ في الترحيل. عند حدوث خطأ في الترحيل، استعد النسخة الاحتياطية وأبلغ عن المشكلة على متتبع ‎Forgejo‎. الوسم 17 لا يتبع إلا إصدارات 17.x: للانتقال إلى الإصدار الرئيسي التالي، غيّر الوسم في ملف ‎compose‎ بعد نسخة احتياطية كاملة، واقرأ ملاحظات الإصدار دائمًا قبل القفز بين الإصدارات الرئيسية. ترفض ‎Forgejo‎ الإقلاع على قاعدة بيانات أحدث منها: التراجع يمر باستعادة النسخة الاحتياطية.

الترحيل من ‎Gitea‎ في خمس دقائق

‎Forgejo‎ نسخة مباشرة من ‎Gitea‎: الترقية من ‎Gitea‎ مدعومة حتى الإصدار 1.22 ضمنًا، مرورًا أولًا بـ‎Forgejo v10.0.x‎. للترحيل، أوقف ‎Gitea‎، انسخ مجلد بياناتها إلى /opt/forgejo/data، استبدل الصورة بـcodeberg.org/forgejo/forgejo:10 في ملف ‎docker-compose‎ وأعد التشغيل، ثم ارتقِ إلى الإصدار الحالي. تكتشف ‎Forgejo‎ مخطط ‎Gitea‎ تلقائياً وتُطبق عمليات الترحيل الخاصة بها. تُحفظ مستودعاتك ومستخدموك ومفاتيح ‎SSH‎ والـ‎webhooks‎ والإشكاليات بالكامل. إصدارات ‎Gitea‎ اللاحقة لـ1.22 لا يغطيها دليل الترقية الرسمي لـ‎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‎ من لوحة الإدارة: *إدارة الموقع → لوحة التحكم → عمليات الصيانة*، مهمة جمع المهملات للمستودعات. للأتمتة، فعّل المهمة المجدولة [cron.git_gc_repos] في app.ini (ENABLED = true؛ تعمل كل 72 ساعة افتراضيًا).

اتحاد ‎ActivityPub‎: ما تبنيه ‎Forgejo‎

تطوّر ‎Forgejo‎ الاتحاد بين المنصات عبر ‎ForgeFed‎، وهو امتداد لبروتوكول ‎ActivityPub‎ (البروتوكول ذاته الذي يستخدمه ‎Mastodon‎). لا يزال تجريبيًا ومعطّلًا افتراضيًا ([federation] ENABLED = false): لم تُطوَّر بعد أدوات الإشراف والتحكم في الوصول، وينبّه المشروع إلى أن تغييرًا غير متوافق قد «يحرق» نطاق المنصة لأي اتحاد مستقبلي. لا تفعّله على منصة إنتاج. الاتحاد الكامل — التفريع عبر النسخ وطلبات السحب بين المنصات — قيد التقييس ضمن مجموعة عمل ‎ForgeFed‎. ستتيح هذه التطورات مستقبلاً المساهمة دون إنشاء حساب على كل نسخة.

‎Forgejo‎ مقابل ‎Gitea‎ مقابل ‎GitLab CE‎: اختر منصتك

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

المعيار‎Forgejo‎‎Gitea‎‎GitLab CE‎
الحوكمةمجتمعية (‎Codeberg e.V.‎)تجارية (‎CommitGo‎)تجارية (‎GitLab Inc‎)
الحد الأدنى من الذاكرةمنخفضة (‎VPS‎ صغير)منخفضة (‎VPS‎ صغير)8 غيغابايت (16 موصى بها)
توافق ‎GitHub Actions‎نعم (‎Forgejo Actions‎)نعم (‎Gitea Actions‎)لا (‎GitLab CI‎ بصياغة خاصة)
سجل الحزمنعم (متعدد الأشكال)نعمنعم
اتحاد ‎ActivityPub‎قيد التطوير (‎ForgeFed‎)لالا
الترحيل من ‎GitHub‎نعم (مرايا + استيراد)نعمنعم
واجهة الإدارةبسيطة ومدمجةبسيطة ومدمجةكاملة لكن ثقيلة
الرخصة‎GPLv3+‎ (منذ ‎v9.0‎)‎MIT‎‎MIT‎ (CE) / ‎EE‎ (مدفوع)
وتيرة الإصداراتفصلية (+ ‎LTS‎)عدة إصدارات سنويًاشهرية

خادم VPS جاهز لـ‎Forgejo‎ في دقائق

تمنحك مجموعة ‎VPS Cloud‎ لدينا خادماً نظيفاً بنظام ‎Debian‎ أو ‎Ubuntu‎، وتخزيناً على ‎SSD‎، وعنوان ‎IP‎ مخصصاً. أمر `docker compose up` واحد وتصبح منصتك حية.