دليل النشر

نقل مستودعات GitHub إلى Gitea على خادم VPS خاص

انشر على VPS Cloud ←

دليل عملي

نقل مستودعات GitHub إلى Gitea على خادم VPS خاص

النشر8 دقائق للقراءةعدد الخطوات: 9

دفعت الانقطاعات المتكررة لـ ‪GitHub‬ في أغسطس 2026 وارتفاع تكاليف ‪GitHub Actions‬ آلاف الفِرق إلى البحث عن مخرج عملي. يعمل ‪Gitea‬ على خادم ‪VPS‬ بملف تنفيذي واحد، ويوفر واجهة برمجة متوافقة ومشغِّل ‪CI‬ أصلياً. يأخذك هذا الدليل من تصدير ‪GitHub‬ حتى أول `git push` على منصتك الخاصة في أقل من ساعة.

المحتويات· لماذا الانتقال من GitHub إلى منصة استضافة ذاتية1/7
  1. 01لماذا الانتقال من GitHub إلى منصة استضافة ذاتية
  2. 02ما يقدمه Gitea المستضاف ذاتياً على أرض الواقع
  3. 03المتطلبات الأساسية
  4. 04الهجرة خطوة بخطوة
  5. 05التحقق بعد الهجرة
  6. 06الأخطاء الشائعة وحلولها
  7. 07استضافة Gitea على خادم VPS من ServOrbit

لماذا الانتقال من GitHub إلى منصة استضافة ذاتية

يبقى ‪GitHub‬ المرجع الرئيسي، لكن ثلاثة اتجاهات تقاطعت في 2026 لتجعل الانتقال واقعاً لا مجرد فكرة.

أولاً: الانقطاعات. وثَّق موقع githubstatus.com عدة حوادث أثّرت في عمليات ‪Git‬ و‪Actions‬ في أغسطس 2026. وصل خيط ‪Hacker News‬ « ‪Alternatives to GitHub‬ » إلى 472 نقطة و299 تعليقاً في ‪2026-08-17‬، دليلٌ على أن السؤال لم يعد نظرياً.

ثانياً: تكلفة دقائق ‪CI‬. ‪GitHub Actions‬ مجاني حتى حصة شهرية معينة على المستودعات العامة، لكن أي فريق يتجاوز هذه الحصة في المستودعات الخاصة يدفع بالدقيقة. التفاصيل متاحة على github.com/pricing.

ثالثاً: السيادة على الكود. تُفضِّل بعض الفِرق أن يكون الوصول الوحيد إلى مستوداتها عبر صلاحية ‪root‬ على خادمها الخاص، لا عبر رمز ‪SaaS‬ قابل للإلغاء في أي وقت.

ما يقدمه Gitea المستضاف ذاتياً على أرض الواقع

  • الحفاظ على السجل الكامل: يستهلك استيراد ‪Gitea‬ أرشيف ‪tar.gz‬ من ‪GitHub‬ — الإيداعات والفروع والعلامات سليمة.
  • نقل المشكلات والتسميات: تنقل نقطة النهاية POST /api/v1/repos/migrate المشكلاتِ والمراحلَ والتسمياتِ في مرور واحد.
  • مشغِّل CI أصلي: يفهم ‪gitea-runner‬ صيغة سير عمل ‪GitHub Actions‬ — تعمل معظم خطوط الأنابيب دون إعادة كتابة.
  • تكلفة يمكن التنبؤ بها: يكفي خادم ‪VPS‬ بمعالج افتراضي واحد و‪1 GB‬ لفريق صغير؛ البرنامج مفتوح المصدر.
  • Webhooks متوافقة: تعرض ‪Gitea‬ الأحداث ذاتها مثل ‪GitHub‬ — تبقى تكاملات الأطراف الثالثة مرتبطة دون تعديل.
  • رمز API محلي: تُدار الصلاحيات في واجهتك الخاصة، لا عند طرف ثالث.

المتطلبات الأساسية

قبل البدء، اجمع العناصر التالية.

جانب ‏GitHub: رمز وصول شخصي (Settings → Developer settings → Personal access tokens) بصلاحيتَي repo وread:org.

جانب ‏Gitea: نسخة ‪Gitea‬ مثبَّتة مسبقاً ورمز مشرف (gitea-admin → Settings → Applications → Generate Token). دوِّن عنوان قاعدتك https://git.your-domain.com.

الجهاز المحلي: git الإصدار 2.x وcurl وjq مثبَّتة. خصِّص ذاكرة وصول عشوائي لا تقل عن ‪1 GB‬ على خادم ‪VPS‬.

الهجرة خطوة بخطوة

  1. إنشاء المنظمة في Gitea

    في واجهة ‪Gitea‬، اذهب إلى + → ‪New Organization‬ واختر اسماً مطابقاً لمنظمتك في ‪GitHub‬.

    أو عبر واجهة البرمجة:

    curl -s -X POST https://git.your-domain.com/api/v1/orgs \
      -H "Authorization: token YOUR_GITEA_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"username":"my-org","visibility":"private"}'
  2. استعراض مستودعات GitHub وتصديرها

    curl -s -H "Authorization: token YOUR_GITHUB_TOKEN" \
      "https://api.github.com/orgs/MY_ORG/repos?per_page=100&page=1" \
      | jq -r '.[].name' > repos.txt
  3. استيراد كل مستودع عبر واجهة Gitea البرمجية

    while IFS= read -r REPO; do
      curl -s -X POST https://git.your-domain.com/api/v1/repos/migrate \
        -H "Authorization: token YOUR_GITEA_TOKEN" \
        -H "Content-Type: application/json" \
        -d "{\"clone_addr\": \"https://github.com/MY_ORG/$REPO\", \"auth_token\": \"YOUR_GITHUB_TOKEN\", \"uid\": 2, \"repo_name\": \"$REPO\", \"issues\": true, \"labels\": true, \"milestones\": true, \"mirror\": false}"
    done < repos.txt
  4. تحديث عناوين الاستضافة المحلية

    git remote set-url origin https://git.your-domain.com/my-org/my-repo.git

    أو عبر SSH:

    git remote set-url origin [email protected]:my-org/my-repo.git

    تحقق بـ git remote -v، ثم اختبر بـ git fetch.

  5. تحديث Webhooks

    في ‪Gitea‬، لكل مستودع: ‪Settings → Webhooks → Add Webhook‬. الصق عنوان ‪URL‬ لخدمة ‪CI‬ أو الطرف الثالث، مستبدلاً github.com بـ git.your-domain.com.

  6. نقل خط أنابيب CI إلى gitea-runner

    wget -O gitea-runner https://dl.gitea.com/act_runner/latest/act_runner-latest-linux-amd64
    chmod +x gitea-runner
    ./gitea-runner register --no-interactive \
      --instance https://git.your-domain.com \
      --token YOUR_RUNNER_TOKEN \
      --name vps-runner \
      --labels ubuntu-latest:docker://node:20-bullseye
    ./gitea-runner daemon &

    أعد تسمية .github/workflows/ إلى .gitea/workflows/ للاستخدام المسار الأصلي لـ ‪Gitea‬.

التحقق بعد الهجرة

بعد اكتمال الهجرة، تحقق من ثلاث نقاط قبل إلغاء الوصول إلى ‪GitHub‬.

الاستنساخ عبر SSH: يجب أن يُتمَّ git clone [email protected]:my-org/my-repo.git دون طلب كلمة مرور.

Webhooks النشطة: في كل مستودع، افتح ‪Settings → Webhooks‬ وانقر ‪Test Delivery‬. الكود 200 يؤكد أن ‪CI‬ تستقبل الأحداث.

السجل سليم: يجب أن يعرض git log --oneline -10 الإيداعاتِ العشر الأخيرة بالترتيب نفسه الموجود في ‪GitHub‬.

إن كنت تنقل عشرات المستودعات، شغّل استدعاءات curl للاستيراد بصورة متوازية باستخدام xargs -P 4 لتقليص وقت الانتظار الإجمالي إلى ربعه. تتعامل ‪Gitea‬ مع الاستيرادات المتزامنة دون فقدان بيانات.

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

إليك الحالات الثلاث الأكثر تكراراً أثناء الهجرة.

  1. SSH: `Permission denied (publickey)`

    العَرَض: يفشل git clone [email protected]:… بخطأ Permission denied (publickey).

    التحقق: في ‪Gitea‬، ‪Settings → SSH / GPG Keys‬ — يجب أن يظهر المفتاح العام الذي تستخدمه. أضفه إن لم يكن موجوداً.

  2. Remote: `fatal: repository not found`

    العَرَض: يُعيد git fetch رسالة fatal: repository not found.

    التشخيص: git remote -v — تأكد أن العنوان يشير إلى نسخة ‪Gitea‬ لا إلى github.com.

  3. Webhooks صامتة بعد الهجرة

    العَرَض: لا يُشغِّل git push أي بناء في خدمة ‪CI‬.

    التشخيص: في ‪Gitea‬، ‪Settings → Webhooks → last delivery‬: يعرض حقل «‪Response‬» كود ‪HTTP‬ الذي أعادته خدمة ‪CI‬. 404 يعني مسار غير موجود؛ 401 يعني سر ‪HMAC‬ غير صحيح.

استضافة Gitea على خادم VPS من ServOrbit

تعمل ‪Gitea‬ بكفاءة على خادم ‪VPS‬ بـ معالج افتراضي واحد و‪1 GB‬ ذاكرة لفريق صغير. انشر قالب ‪Gitea‬ من ‪Marketplace‬، اختر نظام التشغيل وحجم خادم ‪VPS‬، وستحصل على نسخة مُعدَّة في دقائق. خطط VPS تبدأ من 99 درهم/شهر.

منصتك الخاصة لاستضافة Git على خادم VPS

خادم VPS بصلاحية root وعنوان IPv4 مخصص وخيار في نظام التشغيل: الأساس لاستضافة Gitea دون الاعتماد على SaaS.

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

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

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