دليل النشر

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

انشر على VPS Cloud →

النشر9 دقيقة قراءة

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

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

لماذا الانتقال من 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‬.

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

01

إنشاء المنظمة في 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"}'
02

استعراض مستودعات 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
03

استيراد كل مستودع عبر واجهة 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
04

تحديث عناوين الاستضافة المحلية

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.

05

تحديث Webhooks

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

06

نقل خط أنابيب 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‬ مع الاستيرادات المتزامنة دون فقدان بيانات.

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

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

01

SSH: `Permission denied (publickey)`

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

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

02

Remote: `fatal: repository not found`

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

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

03

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 تبدأ من {{vps.start.price}}.

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

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

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

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