[{"data":1,"prerenderedAt":147},["ShallowReactive",2],{"seo-verification":3,"blog-الانتقال-بـcicd-إلى-forgejo-بعد-انقطاع-github-2026-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":23,"featuredImage":25,"bgImage":26,"posterImage":27,"relatedSolution":25,"intro":28,"sections":29,"ctaTitle":88,"ctaBody":89,"ctaButton":90,"ctaUrl":91,"relatedPosts":92},303,"الانتقال-بـcicd-إلى-forgejo-بعد-انقطاع-github-2026",{"fr":10,"en":11,"ar":8},"migrer-ci-cd-forgejo-apres-panne-github-2026","move-your-cicd-to-forgejo-after-the-github-outage-of-2026","الانتقال بـCI\u002FCD إلى Forgejo بعد انقطاع GitHub 2026","انقطع GitHub‏ 17 أغسطس 2026 لمدة 7 س 47 دقيقة، ما استنفد ميزانية التوافر السنوية. انقل CI\u002FCD إلى Forgejo Actions بنفس ملفات YAML على VPS خاص.",9,0,false,"2026-08-26T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},3,"النشر","deploiement","bg-success\u002F10 text-success",[24],{"id":19,"name":20,"slug":21,"color":22,"icon":21},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fmigrer-ci-cd-forgejo-apres-panne-github-2026-poster.svg","استمر انقطاع GitHub بتاريخ 17 أغسطس 2026 سبع ساعات وسبعًا وأربعين دقيقة. أثّر على github.com والمصادقة وGitHub Actions والـAPIs وطلبات السحب والمشكلات وCopilot. بالنسبة للفرق التي كانت تعتمد على GitHub Actions، فقد استُهلك ميزانية التوافر السنوية كاملةً في يوم واحد. يعمل Forgejo Actions على خادم VPS الخاص بك بنفس صياغة YAML لـGitHub Actions، دون أي اعتماد على بنية تحتية خارجية. يغطي هذا الدليل الانتقال الكامل: التثبيت، ونقل المستودعات، وتكييف سير العمل، والإعداد بعد الانتقال.",[30,34,44,47,75,78,82,85],{"type":31,"title":32,"body":33},"h2","لماذا غيّر انقطاع 17 أغسطس 2026 طبيعة السؤال","في 17 أغسطس 2026 عند الساعة 9:40 صباحًا بالتوقيت الشرقي، تعرّضت GitHub لعطل في طاقتها الاستيعابية في مركز البيانات Central US‏. وصلت المنصة إلى ذروة حركة مرور لم تستطع بنيتها التحتية استيعابها: نسبة خطأ بلغت حوالي 20% على تجارب الويب وطلبات API، وارتفعت إلى 50% على تنزيلات الأرشيف. كان GitHub Actions من أكثر الخدمات تضررًا. لم تعد الخدمات إلى طبيعتها إلا في 5:27 مساءً — أي بعد 7 ساعات و47 دقيقة — وقد \u003Ca href=\"https:\u002F\u002Fgithub.blog\u002Fnews-insights\u002Fcompany-news\u002Fthe-august-17-outage-and-the-work-ahead\u002F\">أقرّت GitHub علنًا بالحادثة في 20 أغسطس 2026\u003C\u002Fa>.‏\n\nنشرت DanubeData، وهي شركة متخصصة في البنية التحتية للبيانات، تقريرًا تفصيليًا أكدت فيه أن الحادثة كشفت عن تبعية خفية لـGitHub في مستوى التحكم لديهم. استجابةً لذلك، نقلوا 9 مستودعات تضم 333 طلب سحب وما يقارب 400 ميغابايت من تاريخ Git إلى نسخة Forgejo مستضافة ذاتيًا في يوم واحد، وتبعهما خط البناء الرئيسي وسير عمل النشر في الإنتاج.\n\nلم يعد السؤال «هل يمكن أن تتعطل GitHub؟» بل «ما حجم تعرّضنا إذا تعطلت؟». يجيب Forgejo Actions على هذا السؤال بنقل تنفيذ CI\u002FCD إلى بنيتك التحتية الخاصة.",{"type":35,"title":36,"items":37},"ul","فوائد Forgejo المستضاف ذاتيًا لـCI\u002FCD",[38,39,40,41,42,43],"**توافر مستقل عن GitHub** — لا يؤثر أي انقطاع في المنصة على عمليات البناء أو النشر.","**صياغة YAML متوافقة** — معظم سير عمل GitHub Actions تعمل دون تعديل على Forgejo Actions.‏","**تكلفة ثابتة وقابلة للتنبؤ** — كل دقيقة في خط الأنابيب هي موردٌ مدفوع مسبقًا على VPS الخاص بك.","**سرية خطوط الأنابيب** — الكود المصدري وأسرار البيئة وملفات البناء لا تغادر بنيتك التحتية.","**عداءات قابلة للضبط** — تشغيل المهام داخل حاوية Docker أو كعملية محلية أو في بيئة LXC غير متوفرة في GitHub.‏","**حوكمة غير ربحية** — تُدار Forgejo من قِبل Codeberg e.V.‏، دون إصدار مدفوع أو خطر تغيير النموذج التجاري.",{"type":31,"title":45,"body":46},"المتطلبات الأساسية","قبل الشروع في التثبيت، تحقق أن خادم VPS الخاص بك يستوفي المتطلبات التالية.\n\n**ذاكرة الوصول العشوائي (RAM)**: 2 غيغابايت كحدٍّ أدنى للمنصة وحدها مع 5 إلى 20 مطورًا. احسب 4 غيغابايت إذا شغّلت Forgejo Actions مع عداءات تُجري عمليات تصريف محلية (Go أو Rust أو Java).‏\n\n**vCPU**: يكفي 2 vCPU لفريق مؤلف من 20 مطورًا. أضف 2 vCPU لكل عداء متزامن إضافي إذا كانت عمليات البناء كثيفة الاستخدام لوحدة المعالجة.\n\n**القرص**: احجز 20 غيغابايت على الأقل من SSD للمستودعات وتاريخ Git وملفات CI والسجلات. خطط لـ50 غيغابايت إذا كنت تستضيف سنوات عديدة من التاريخ أو ملفات ثنائية ضخمة.\n\n**الشبكة**: يظل المنفذ 22 متاحًا على المضيف (لـSSH النظام)؛ سيُعرض SSH الخاص بـForgejo على منفذ مختلف، عادةً 2222. يجب أن يكون المنفذ 443 مفتوحًا لـreverse proxy.‏\n\n**النطاق**: جهّز نطاقًا فرعيًا مثل `git.yourdomain.com` مع سجل A يشير إلى عنوان IP الخاص بـVPS.\n\n**البرامج**: Docker 24+ مع المكوّن الإضافي Compose مثبَّتًا على الخادم.",{"type":48,"title":49,"steps":50},"steps","الانتقال من GitHub إلى Forgejo Actions: التثبيت والتهيئة",[51,54,57,60,63,66,69,72],{"title":52,"body":53},"تثبيت Forgejo مع Docker وPostgreSQL","أنشئ مجلد العمل `\u002Fopt\u002Fforgejo` ومجلدًا فرعيًا `data`. اكتب ملف `docker-compose.yml` بخدمتين: `forgejo` (صورة `codeberg.org\u002Fforgejo\u002Fforgejo:latest`، المنفذ الداخلي 3000، SSH محوّل على `2222:22`، وحدة تخزين `.\u002Fdata:\u002Fdata`، متغيرات `USER_UID=1000` و`USER_GID=1000`) و`db` (صورة `postgres:16`، وحدة تخزين مخصصة، متغيرات `POSTGRES_USER` و`POSTGRES_PASSWORD` و`POSTGRES_DB`). شغّل `docker compose up -d` وراقب `docker compose logs -f forgejo` حتى ترى المنفذ 3000 نشطًا.",{"title":55,"body":56},"إعداد reverse proxy وشهادة SSL","مع Caddy يكفي بلوك واحد: `git.yourdomain.com { reverse_proxy localhost:3000 }`. يتم توفير شهادة Let's Encrypt تلقائيًا. مع Nginx، أنشئ بلوك `server` يستمع على المنفذ 443 مع `proxy_pass http:\u002F\u002F127.0.0.1:3000;` وأضف **إلزاميًا** `proxy_read_timeout 600s;` — واجهت DanubeData خطأ 504 بدون هذا الإعداد، مما أوقف استيراد المستودع عند 196 من أصل 333 طلب سحب. حوّل HTTP إلى HTTPS في بلوك منفصل.",{"title":58,"body":59},"إتمام الإعداد الأولي","انتقل إلى `https:\u002F\u002Fgit.yourdomain.com`. يطلب معالج الإعداد: محرك قاعدة البيانات (PostgreSQL)، المضيف (`db:5432`)، بيانات الاعتماد، عنوان URL الأساسي HTTPS، ومنفذ SSH الخارجي (2222). أنشئ حساب المسؤول. لتفعيل الوضع الخاص، عطّل التسجيل التلقائي في الإعدادات أو أضف `DISABLE_REGISTRATION=true` إلى متغيرات بيئة الخدمة.",{"title":61,"body":62},"نقل مستودعات GitHub","في واجهة Forgejo، انقر **مستودع جديد → نقل**. اختر GitHub كمصدر. أدخل رابط المستودع (`https:\u002F\u002Fgithub.com\u002Fyour-org\u002Fyour-repo`)، وتوكن وصول شخصي من GitHub بصلاحية `repo`، وفعّل نقل طلبات السحب والتسميات والمعالم والإصدارات. للمستودعات الضخمة (> 1 غيغابايت أو > 200 طلب سحب)، اختبر أولًا مع ضبط مهلة reverse proxy على 600 ثانية. احذف المستودع غير المكتمل وأعد المحاولة عند حدوث 504. كرّر العملية لكل مستودع.",{"title":64,"body":65},"تسجيل عداء Forgejo Actions","في Forgejo، انتقل إلى **الإدارة → Actions → العداءات → إنشاء عداء**. انسخ رمز التسجيل. أضف خدمة `act-runner` إلى `docker-compose.yml` باستخدام صورة `codeberg.org\u002Fforgejo\u002Frunner:latest`، مع المتغيرات `FORGEJO_INSTANCE_URL` (رابط HTTPS للنسخة) و`FORGEJO_RUNNER_REGISTRATION_TOKEN`. شغّل `docker compose up -d act-runner`. تحقق من ظهور العداء بحالة **متصل** في لوحة الإدارة.",{"title":67,"body":68},"وضع ملفات سير العمل في المجلد الصحيح","على GitHub، تعيش سير العمل في `.github\u002Fworkflows\u002F`. على Forgejo، يجب وضعها في `.forgejo\u002Fworkflows\u002F`. أعد تسمية المجلد في كل مستودع منقول وادفع التعديل. يبقى باقي ملف YAML — محفزات `on:`، المهام، الخطوات، `uses:` للإجراءات الخارجية المتوافقة — متطابقًا في معظم الحالات. لا تقرأ Forgejo المجلد `.github\u002F`.",{"title":70,"body":71},"تكييف العناصر الخاصة بـGitHub","نقاط التكييف الرئيسية: استبدل الإجراءات التي تستدعي واجهة برمجة GitHub (المبنية على `gh`) بما يعادلها في Forgejo أو احذفها؛ أزل أي `permissions: id-token: write` (يستخدم Forgejo `enable-openid-connect` في ملف سير العمل لـOIDC)؛ إذا احتاج سير عملك لأداة غير موجودة في صورة Debian bookworm الأساسية للعداء، أضف خطوة `apt-get install -y \u003Ctool>`. يتم حل إجراءات `actions\u002Fcheckout` و`actions\u002Fsetup-node` بشكل أصلي.",{"title":73,"body":74},"التحقق من أول خطوط الأنابيب","أنشئ سير عمل بسيطًا `.forgejo\u002Fworkflows\u002Fsmoke.yml` يُطلَق عند `push`، بمهمة وحيدة تُنفّذ `echo \"Pipeline OK\"`. تحقق من قسم **Actions** في واجهة Forgejo. بمجرد نجاح هذا التشغيل الأول، انقل سير عمل الإنتاج واحدًا تلو الآخر وصحّح الفوارق تدريجيًا.",{"type":31,"title":76,"body":77},"الإعداد بعد الانتقال","بعد التحقق من تشغيل خطوط الأنابيب، ثلاثة عناصر تستوجب الإعداد.\n\n**خطافات الويب والإشعارات**: إذا كانت أنظمة خارجية (Slack أو Mattermost أو خطاف نشر) تستمع لأحداث GitHub، أعد إنشاءها في Forgejo تحت **الإعدادات → خطافات الويب**. الحمولة مشابهة لـGitHub لكنها تختلف في بعض الحقول — اضبط نقاط الاستقبال وفق ذلك.\n\n**أسرار خطوط الأنابيب**: يجب إعادة إنشاء أسرار GitHub تحت **إعدادات المستودع → Actions → الأسرار**. للأسرار التنظيمية، استخدم **الإدارة → المنظمات → [منظمتك] → الإعدادات → Actions → الأسرار**. لا تنقل سرًا أبدًا بتضمين قيمته في commit أو ملف مُصدَّر.\n\n**صلاحيات العداءات**: بشكل افتراضي، يمكن للعداء المسجَّل على مستوى النسخة تنفيذ سير عمل لجميع المستودعات. للتحكم بشكل أدق، قيّد العداء بمنظمة أو مستودع محدد من تبويب **العداءات** في الإعدادات المقابلة.",{"type":79,"title":80,"body":81},"tip","تقوية نسخة Forgejo","ثلاثة إجراءات تقلّص بشكل ملحوظ مساحة الهجوم على نسخة مكشوفة للإنترنت.\n\n**فعّل التحقق الثنائي الإلزامي** لجميع الحسابات، وخاصة حسابات المسؤول: **الإدارة → إعدادات المصادقة → طلب التحقق الثنائي**.\n\n**مرّر مفاتيح SSH المسجَّلة.** قد يملك مستخدم منقول من GitHub مفاتيح منقضية في ملفه الشخصي. اطلب من كل عضو مراجعة مفاتيحه في **الإعدادات → مفاتيح SSH\u002FGPG** وحذف ما لا يقابل جهازًا نشطًا.\n\n**فعّل التحقق HMAC على جميع خطافات الويب الصادرة.** في كل خطاف، أدخل في حقل **السر** سلسلة عشوائية تتكون من 32 حرفًا على الأقل. يجب أن تتحقق نقطة الاستقبال من الترويسة `X-Gitea-Signature` (متطابقة في Forgejo). بدون هذا الفحص، يمكن لأي شخص يعرف عنوان URL لنقطتك تشغيل إجراء نشر.",{"type":31,"title":83,"body":84},"استكشاف الأخطاء الشائعة","`504 Gateway Timeout` أثناء نقل مستودع. تُجري Forgejo الاستيراد بشكل متزامن داخل طلب HTTP.‏ إذا قطع reverse proxy الاتصال قبل الانتهاء، يتوقف الاستيراد ويبقى المستودع معلقًا. ارفع `proxy_read_timeout` إلى 600 ثانية (Nginx) أو أضف `timeouts { read_body 10m }` (Caddy) **قبل** بدء النقل. احذف المستودع غير المكتمل وأعد المحاولة.\n\n`Runner stays Offline after startup`. تحقق أن `FORGEJO_INSTANCE_URL` يشير إلى عنوان HTTPS العام للنسخة، لا إلى `localhost` أو IP الداخلي للحاوية. يجب أن يصل العداء إلى Forgejo عبر نفس المسار الذي يستخدمه متصفح خارجي.\n\n`Workflow not triggered after push`. تحقق أن ملفات سير العمل موجودة في `.forgejo\u002Fworkflows\u002F` وليس في `.github\u002Fworkflows\u002F`. لا تقرأ Forgejo المجلد `.github\u002F`.\n\n`Error: this step uses an action, but the runner does not support actions`. بعض الإجراءات الخارجية المشار إليها بـ`uses:` تستدعي واجهة برمجة GitHub. استبدلها بما يعادلها على Codeberg أو أنشئ مرآة محلية.\n\n`permission denied` على سكريبت في نهاية مهمة. صورة العداء الأساسية (Debian bookworm) لا تحوي نفس الأدوات المتوفرة في صورة Ubuntu الخاصة بـGitHub. أضف خطوة `apt-get install -y \u003Ctool>` في بداية المهمة، أو حدد صورة Docker مخصصة عبر `container:`.",{"type":31,"title":86,"body":87},"لمزيد من المعرفة","يغطي هذا الدليل التثبيت والانتقال بـCI\u002FCD إلى Forgejo Actions. للتعمق أكثر، تعالج المقالات التالية موضوعات مكمّلة: استضافة Forgejo الأولية على VPS مع Docker وSSL، وإعداد خط أنابيب Woodpecker CI بجانب Forgejo، ونقل مستودعات GitHub إلى منصة Git مستضافة ذاتيًا.\n\n\u003Ca href=\"\u002Fblog\u002Fheberger-forgejo\">استضافة Forgejo على خادم VPS الخاص بك\u003C\u002Fa> — تثبيت كامل، reverse proxy وأول عداء.‏\n\n\u003Ca href=\"\u002Fblog\u002Fwoodpecker-ci-pipeline-vps-forgejo\">خط أنابيب Woodpecker CI على VPS مع Forgejo\u003C\u002Fa> — بديل لـForgejo Actions للفرق التي تريد فصل المنصة عن محرك CI.‏\n\n\u003Ca href=\"\u002Fblog\u002Fmigrer-depots-github-vers-gitea-vps\">نقل مستودعات GitHub إلى Gitea أو Forgejo على VPS\u003C\u002Fa> — إجراء النقل خطوة بخطوة باستخدام الأداة الرسمية.","منصة Forgejo وخطوط CI\u002FCD على خادم VPS من ServOrbit","خادم VPS Cloud مع Docker جاهز لاستضافة Forgejo وعداءات الـCI والمستودعات. مستقل عن GitHub، متاح دائمًا.","استكشاف حلول المطورين","\u002Fsolutions\u002Fdeveloppeurs",[93,113,131],{"id":94,"slug":95,"slugs":96,"title":99,"excerpt":100,"readTime":101,"views":102,"isPinned":16,"publishedAt":103,"category":104,"categories":110,"featuredImage":25,"bgImage":26,"posterImage":112,"relatedSolution":25},75,"استضافة-forgejo-على-خادم-vps-الخاص-بك",{"fr":97,"en":98,"ar":95},"heberger-forgejo","host-forgejo-on-your-own-vps","استضافة ‎Forgejo‎ على خادم VPS: دليل شامل 2025","انشر ‎Forgejo‎ على خادم ‎VPS‎ باستخدام ‎Docker‎ و‎SSL‎ و‎Actions runners‎ مع تأمين متقدم. دليل خطوة بخطوة لإقامة مخزن ‎Git‎ مستقل.",10,1,"2026-04-06T00:00:00+00:00",{"id":105,"name":106,"slug":107,"color":108,"icon":109},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[111],{"id":105,"name":106,"slug":107,"color":108,"icon":109},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"id":114,"slug":115,"slugs":116,"title":119,"excerpt":120,"readTime":121,"views":102,"isPinned":16,"publishedAt":122,"category":123,"categories":128,"featuredImage":25,"bgImage":26,"posterImage":130,"relatedSolution":25},212,"woodpecker-ci-وforgejo-خط-أنابيب-cicd-على-خادم-vps",{"fr":117,"en":118,"ar":115},"woodpecker-ci-pipeline-vps-forgejo","woodpecker-ci-and-forgejo-cicd-pipeline-on-a-vps","Woodpecker CI وForgejo: خط أنابيب CI\u002FCD على خادم VPS","انشر Woodpecker CI مع Forgejo على خادم VPS لخط أنابيب CI\u002FCD مفتوح المصدر، مستضاف ذاتيًا وخفيف وسيادي. دليل Docker خطوة بخطوة.",4,"2026-08-02T00:00:00+00:00",{"id":124,"name":125,"slug":126,"color":127,"icon":126},2,"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[129],{"id":124,"name":125,"slug":126,"color":127,"icon":126},"\u002Fblog\u002Fcovers\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg",{"id":132,"slug":133,"slugs":134,"title":137,"excerpt":138,"readTime":14,"views":15,"isPinned":16,"publishedAt":139,"category":140,"categories":141,"featuredImage":25,"bgImage":26,"posterImage":143,"relatedSolution":144},279,"نقل-مستودعات-github-إلى-gitea-على-خادم-vps-خاص",{"fr":135,"en":136,"ar":133},"migrer-depots-github-vers-gitea-vps","migrate-your-github-repos-to-self-hosted-gitea-on-a-vps","نقل مستودعات GitHub إلى Gitea على خادم VPS خاص","صدِّر مستوداتك والمشكلات والتسميات عبر واجهة برمجة GitHub، واستوردها إلى Gitea في أقل من ساعة، وحدِّث عناوين الاستضافة المحلية — دون فقدان السجل ودون الاعتماد على خدمة SaaS.","2026-08-18T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},[142],{"id":19,"name":20,"slug":21,"color":22,"icon":21},"\u002Fblog\u002Fcovers\u002Fmigrer-depots-github-vers-gitea-vps-poster.svg",{"categorySlug":145,"appSlug":146},"التطوير","gitea",1787744378164]