[{"data":1,"prerenderedAt":232},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-gitea-على-خادم-vps-الخاص-بك-ma-ar":6,"promo-bar-likely":231},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-gitea-على-خادم-vps-الخاص-بك-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":170,"ctaBody":171,"ctaButton":172,"ctaUrl":173,"relatedPosts":174},74,"استضافة-gitea-على-خادم-vps-الخاص-بك",{"fr":12,"en":13,"ar":10,"es":14},"heberger-gitea","host-gitea-on-your-own-vps","alojar-gitea-en-un-vps","استضافة Gitea على خادم VPS الخاص بك في 2026","انشُر ‏Gitea 1.25‏ على خادم VPS مع Docker وSSL. دليل شامل: CI\u002FCD مع ‏Gitea Actions‏، مقارنة ‏Gitea‏ مقابل ‏Forgejo v16‏، إدارة يومية، استكشاف أخطاء SSH وHTTPS.",13,1,false,"2026-04-07T00:00:00+00:00","2026-11-08T16:32:50+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":34,"appSlug":35},"التطوير","gitea","‏Gitea‏ هي منصة Git ذاتية الاستضافة مكتوبة بلغة Go، معروفة بخفّتها وسرعتها. نشرها على خادم VPS الخاص بك يمنحك GitHub خاصًا دون اشتراك لكل مستخدم ودون حدّ على المستودعات الخاصة. في عام 2026، ‏Gitea 1.25‏ هي الإصدار الحالي و‏Forgejo v16‏ رسّخ نفسه بوصفه الفرع المجتمعي المرجعي — يغطّي هذا الدليل تثبيت ‏Gitea‏ وإعداد مسارات CI\u002FCD مع ‏Gitea Actions‏ والمقارنة مع ‏Forgejo‏ والإدارة اليومية واستكشاف أكثر الأخطاء شيوعًا.",[38,42,52,55,77,80,83,123,144,147,150,153,156,159,162,164,167],{"type":39,"title":40,"body":41},"h2","لماذا تستضيف Gitea ذاتيًا على خادم VPS","تستهلك Gitea بالكاد من 200 إلى 300 ميغابايت من الذاكرة (RAM) في وضع الخمول، ما يجعلها من أكفأ منصات Git للاستضافة الذاتية. على خادم VPS، تحتفظ بالسيطرة الكاملة على شيفرتك المصدرية: لا يحلّ أي طرف ثالث ببيانتك، ولا حدّ اعتباطي على عدد المستودعات الخاصة أو المتعاونين، ولا تكلفة تتصاعد مع فريقك. لوكالة أو مطوّر مستقل، يمكن لخادم VPS واحد أن يستضيف مجمل مشاريع العملاء بأذونات مقسَّمة حسب المؤسسة. تتضمّن Gitea أصلًا نظام CI\u002FCD متوافقًا مع مسارات عمل GitHub Actions (Gitea Actions)، وسجلّ حزم، ومحرّرًا عبر الويب، ما يغطّي شبه كامل دورة التطوير دون تبعية خارجية.",{"type":43,"title":44,"items":45},"ul","فوائد ملموسة لـ Gitea ذاتية الاستضافة",[46,47,48,49,50,51],"بصمة ذاكرة ضئيلة: تعمل بأريحية على خادم VPS بذاكرة 2 غيغابايت حتى مع عشرات المستخدمين.","مستودعات خاصة دون فوترة لكل مقعد أو حدود مفروضة، خلافًا لعروض SaaS.","‏Gitea Actions مدمج لتشغيل مسارات CI\u002FCD الخاصة بك دون خدمة خارجية.","سجلّ حزم (‏Docker و npm و Composer و Maven) مستضاف على المنصة نفسها.","مصادقة دقيقة: ‏LDAP و OAuth2 ورموز وصول شخصية ومفاتيح SSH لكل مستخدم.","نسخ احتياطي بسيط للغاية: كل شيء يتّسع في وحدة تخزين بيانات وقاعدة بيانات.",{"type":39,"title":53,"body":54},"المتطلبات العتادية والبرمجية","Gitea مقتصدة للغاية. لفريق صغير (حتى 20 مستخدمًا)، يكفي خادم VPS بمعالجَين افتراضيَّين (2 vCPU) و 2 غيغابايت من الذاكرة (RAM)؛ احسب 4 غيغابايت إذا فعّلت Gitea Actions مع runners محلية تصرّف الشيفرة. خصّص ما لا يقل عن 20 إلى 40 غيغابايت من تخزين SSD بحسب حجم مستودعاتك. على الجانب البرمجي: Docker Engine وإضافة Docker Compose مثبتتان، واسم نطاق (أو نطاق فرعي مثل `git.yourdomain.com`) يشير إلى عنوان IP الخاص بخادم VPS عبر سجل A، والمنفذ 22 محجوز لـ SSH الخادم — إذ ستعرض Gitea خدمة SSH خاصة بها على منفذ آخر لتفادي التعارض.",{"type":56,"title":57,"steps":58},"steps","نشر Gitea مع Docker و SSL",[59,62,65,68,71,74],{"title":60,"body":61},"تجهيز خادم VPS و Docker","اتصل عبر SSH، وحدّث النظام ثم ثبّت Docker وإضافة Compose. أنشئ مجلدًا مخصصًا: `mkdir -p \u002Fopt\u002Fgitea && cd \u002Fopt\u002Fgitea`. أنشئ أيضًا وحدة تخزين بيانات تبقى بعد تحديثات الحاوية.",{"title":63,"body":64},"كتابة ملف docker-compose.yml","عرّف خدمتين: `gitea` (الصورة `gitea\u002Fgitea:1.25`) وقاعدة بيانات `postgres:16`. ركّب `.\u002F gitea:\u002F data` للاستمرارية، واضبط `USER_UID`\u002F`USER_GID` على 1000، وارط SSH الخاصة بـ Gitea بمنفذ المضيف 2222: `\"2222:22\"`. اترك منفذ HTTP رقم 3000 داخليًا، فسيخدمه reverse proxy.",{"title":66,"body":67},"تشغيل الحاويات","نفّذ `docker compose up -d` ثم `docker compose logs -f gitea` لمتابعة عملية التهيئة. تحقّق من نجاح الاتصال بـ PostgreSQL قبل المتابعة.",{"title":69,"body":70},"إعداد reverse proxy","مع Caddy، يكفي سطر واحد: `git.yourdomain.com { reverse_proxy localhost:3000 }`. يحصل Caddy تلقائيًا على شهادة Let's Encrypt ويجدّدها. مع Nginx، أنشئ كتلة `server` تمرّر الطلبات إلى `http:\u002F\u002F127.0.0.1:3000` واستخدم `certbot --nginx` لـ SSL.",{"title":72,"body":73},"إنهاء التثبيت عبر الويب","افتح `https:\u002F\u002Fgit.yourdomain.com`، وأكمِل المعالج بإدخال عنوان URL الأساسي بصيغة HTTPS ومضيف قاعدة البيانات (`db:5432`). اضبط ROOT_URL بشكل صحيح، وإلا ستكون روابط الاستنساخ خاطئة. وسّع قسم «Optional Settings > Administrator Account Settings»، وأنشئ فيه حساب المسؤول الخاص بك، ثم أكّد.",{"title":75,"body":76},"تأمين SSH الخاص بالمستودعات","اضبط عملاءك للاستنساخ عبر `ssh:\u002F\u002Fgit@git.yourdomain.com:2222\u002F...`، أو أضِف كتلة Host في `~\u002F.ssh\u002Fconfig` لإخفاء المنفذ. عطّل التسجيل العام في لوحة الإدارة إذا كانت المنصة خاصة.",{"type":39,"title":78,"body":79},"Gitea Actions: نظام CI\u002FCD ذاتي الاستضافة على VPS","‏Gitea Actions هو محرك CI\u002FCD الأصلي لـ Gitea، متوافق مع صيغة مسارات عمل GitHub Actions. يتيح تشغيل المسارات مباشرة على بنيتك التحتية دون أي تبعية لخدمة خارجية.\n\nلتفعيله، أضِف إلى ملف `app.ini`:\n\n```ini\n[actions]\nENABLED = true\n```\n\nثم سجّل runner باسم `act_runner` في حاوية منفصلة على خادم VPS نفسه. حُدّ ذاكرته عبر `mem_limit` كي لا يخنق بناء ثقيل Gitea نفسها. للمسارات الثقيلة (التصريف واختبارات التكامل)، خصّص بدلًا من ذلك خادم VPS ثانيًا للـ runner.\n\nمسار عمل أدنى لمشروع Node.js يُوضع في `.gitea\u002Fworkflows\u002Fci.yml`:\n\n```yaml\non: [push, pull_request]\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: '22'\n      - run: npm ci\n      - run: npm test\n```\n\nيُنفِّذ الـ runner هذا المسار عند كل push. يمكنك الجمع بين مهام متعددة، واستخدام مصفوفات الإصدارات، ومشاركة القطع الأخرى بين الخطوات — تمامًا كـ GitHub Actions، لكن على خادمك الخاص.",{"type":81,"body":82},"tip","حُدّ ذاكرة الحاوية `act_runner` بـ 2 غيغابايت عبر `mem_limit: 2g` في ملف `docker-compose.yml` إذا كان خادم VPS يمتلك 4 غيغابايت إجمالًا. بهذه الطريقة، حتى لو استنفد بناء ما كل الذاكرة المخصصة له، تبقى 2 غيغابايت لـ Gitea — كافية لمواصلة استقبال عمليات الدفع وطلبات السحب أثناء التصريف. للبناءات التي تنتج قطعًا أثرية ضخمة (صور Docker وملفات ثنائية)، أضِف وحدة تخزين منفصلة مثبتة على `\u002Fhome\u002Frunner\u002Fwork` تفاديًا لامتلاء وحدة تخزين Gitea الرئيسية.",{"type":84,"title":85,"headers":86,"rows":90},"comparison","Gitea أم Forgejo في 2026: أيهما تختار؟",[87,88,89],"المعيار","‏Gitea 1.25","‏Forgejo v16",[91,95,99,103,107,111,115,119],[92,93,94],"الحوكمة","شركة تجارية (‏Gitea Ltd)","جمعية غير ربحية (‏Codeberg e.V.)",[96,97,98],"الرخصة","‏MIT","‏MIT — برمجيات حرة 100% دون إصدار مؤسسي",[100,101,102],"موصى به من Awesome-Selfhosted","لا (حُذف في 2022)","نعم — التوصية الافتراضية منذ 2024",[104,105,106],"تفدير ActivityPub","غير مخطط","يُنشر تدريجيًا منذ ‏Forgejo v7 (أبريل 2024)، ‏GA في v16",[108,109,110],"توافق واجهة برمجة Gitea","المرجع","متوافق: نفس الـ API ونفس الـ webhooks ونفس تنسيق البيانات",[112,113,114],"الأمان — تدقيقات علنية","نادرة","تدقيقات شيفرة منشورة من مجتمع Codeberg",[116,117,118],"خارطة الطريق المجتمعية","تقودها Gitea Ltd","حوكمة مفتوحة، ‏RFC علنية، تصويت المساهمين",[120,121,122],"الهجرة من Gitea","—","دون فقدان بيانات: نفس مخطط القاعدة ونفس تنسيق الحجم",{"type":56,"title":124,"steps":125},"الهجرة من Gitea إلى Forgejo",[126,129,132,135,138,141],{"title":127,"body":128},"نسخ احتياطي كامل لـ Gitea","قبل أي عملية، أنجز dump كاملًا: `docker exec -u git gitea gitea admin dump -c \u002Fdata\u002Fgitea\u002Fconf\u002Fapp.ini`. استرجع الأرشيف المُنتَج خارج الحاوية وتحقّق من أن الحجم `.\u002F gitea` مُدرج في لقطة (snapshot) خادم VPS.",{"title":130,"body":131},"التحقق من توافق الإصدار","‏يدعم Forgejo v16 الهجرة من Gitea 1.20 وما بعده. إذا كانت منصتك تشغّل إصدارًا أقدم، فارق أولًا إلى Gitea 1.21 أو 1.22 عبر `docker compose pull && docker compose up -d`، ثم تحقّق من غياب الأخطاء في السجلات قبل المتابعة.",{"title":133,"body":134},"استبدال صورة Docker","في ملف `docker-compose.yml`، استبدل `image: gitea\u002Fgitea:latest` بـ `image: codeberg.org\u002Fforgejo\u002Fforgejo:latest`. يبقى حجم البيانات (`.\u002F gitea:\u002F data`) وقاعدة PostgreSQL دون تغيير — يقرأ Forgejo نفس المخطط ونفس `app.ini`.",{"title":136,"body":137},"إعادة التشغيل والسماح بالهجرة","نفّذ `docker compose pull && docker compose up -d`. يطبّق Forgejo تلقائيًا ترحيلات المخطط اللازمة عند بدء التشغيل. تابع `docker compose logs -f forgejo` حتى تظهر رسالة تفيد بأن خادم HTTP يستمع على المنفذ 3000.",{"title":139,"body":140},"إعادة توليد مفاتيح SSH","كما في أي ترقية تغيّر الملف التنفيذي المُشار إليه في `authorized_keys`، أعِد توليد المدخلات: `docker exec -u git forgejo forgejo admin regenerate keys`. تحقّق بعد ذلك من نجاح `git clone` عبر SSH من جهاز عميل.",{"title":142,"body":143},"الاختبار والتحقق","افتح واجهة الويب، وتحقّق من المستودعات والـ webhooks وعمليات Forgejo Actions. تُعدّ runners الـ `act_runner` المسجّلة تحت Gitea متوافقة — أعِد ربطها برمز التسجيل الجديد إذا تغيّر المفتاح.",{"type":81,"title":145,"body":146},"Forgejo v16: أبرز المستجدات (يوليو 2026)","‏يُتيح Forgejo v16.0.0 تفدير ActivityPub بشكل عام للـ issues وطلبات السحب: يمكن لـ issue مفتوحة على منصة Forgejo أن تستقبل تعليقات من مستخدمي منصة أخرى دون حساب مشترك. يتضمّن الإصدار أيضًا مدير أسرار على مستوى النسخة (تشفير AES-256 أثناء التخزين)، ومحرك بحث جديد في الشيفرة مبني على Bleve v2 مع دعم التعبيرات النمطية، وتحسينات جوهرية في مجدول المهام الخلفية. على صعيد الأمان، تُخزَّن رموز API الآن بشكل مُجزَّأ في قاعدة البيانات (bcrypt) بدلًا من النص الصريح — ترحيل تلقائي عند بدء التشغيل يحوّل الرموز الموجودة.",{"type":39,"title":148,"body":149},"الإدارة اليومية: الـ webhooks والمستودعات وحذف الأيتام","بمجرد أن تعمل Gitea في الإنتاج، تعود بعض عمليات الصيانة بانتظام.\n\n**إدارة الـ webhooks.** تسجّل Gitea تاريخ كل إرسال في «إعدادات المستودع → Webhooks → آخر التسليمات». يمكن إعادة تشغيل webhook فاشل (مهلة انتهت أو خطأ HTTP 5xx) يدويًا من هذا السجل. إذا كانت runners تعمل على الشبكة الخاصة نفسها لـ Gitea، أضِف نطاقاتها IP إلى `ALLOWED_HOST_LIST` في قسم `[webhook]` من `app.ini` — وإلا تُحجب الاستدعاءات نحو `localhost` افتراضيًا منذ Gitea 1.20.\n\n**حذف المستودعات الأيتام.** مستودع محذوف عبر الواجهة يترك بيانات Git الخاصة به (`objects\u002F`) على القرص حتى تشغيل مهام الخلفية التالية. أجبر التشغيل الفوري من لوحة الإدارة: «إدارة الموقع → مهام الخلفية → تشغيل: حذف المستودعات المحذوفة». لا يظهر الفضاء المحرّر إلا بعد `docker exec -u git gitea gitea admin storage --remove-unlisted`.\n\n**حصة التخزين لكل مؤسسة.** للنسخ متعددة المستأجرين، حدّد حصة مستودعات لكل مؤسسة في `app.ini` ضمن `[repository]`: `MAX_CREATION_LIMIT = 50`. هذا يمنع حسابًا من إنشاء مئات المستودعات دون رقابة وملء وحدة التخزين.",{"type":39,"title":151,"body":152},"استكشاف أخطاء متقدم: SSH واستنساخ HTTPS","**`Permission denied (publickey)` بعد ترقية.** تغيّر مسار الملف التنفيذي المُشار إليه في `authorized_keys` (ثابت في الإصدار 1.27). تستجيب خدمة Gitea بشكل طبيعي عبر HTTPS مما يُخفي المشكلة. الإصلاح: `docker exec -u git gitea gitea admin regenerate keys`. تحقّق من نجاح `git clone` عبر SSH قبل إعلان اكتمال الترقية.\n\n**مهلة أو خطأ SSL عند الاستنساخ عبر HTTPS.** ثلاثة أسباب شائعة: لا يتطابق `ROOT_URL` في `app.ini` مع النطاق الفعلي (روابط معطوبة + حلقة إعادة توجيه محتملة)، أو لا يمرّر الـ reverse proxy ترويسة `X-Forwarded-Proto: https` (فتولّد Gitea عناوين URL بـ HTTP)، أو انتهت صلاحية شهادة Let's Encrypt (يجدّدها Caddy و certbot تلقائيًا لكن فقط إذا كان DNS يشير إلى VPS). تحقّق من `ROOT_URL` أولًا: هو السبب الأكثر شيوعًا بعد هجرة النطاق.\n\n**استنساخ SSH بطيء أو يتعلّق.** يستخدم upload-pack عبر SSH نفس عملية Git التي تخدم العمليات عبر الويب. إذا كان `act_runner` يشغل كل أنوية المعالج المتاحة أثناء بناء، قد تجد عمليات Git نفسها في انتظار الموارد. أضِف `cpus: '1.5'` للـ runner في ملف compose لتخصيص أنوية له دون حرمانه كليًا.\n\n**`Database migration failed: column already exists`.** تلقّت قاعدة البيانات ترحيلًا جزئيًا (توقف في منتصف الترقية). استعِد الـ dump المُنجَز قبل الترقية، ابدأ من حجم نظيف، ثم أعِد التشغيل.",{"type":39,"title":154,"body":155},"‎Gitea 28.1.0: فشل مقارنة PR مع exit 128","بعد الترقية إلى ‎Gitea 28.1.0، تفشل واجهة مقارنة طلبات السحب (PR) بصمت على المستودعات الكبيرة (أكبر من 1.4 غيغابايت) مع الخطأ `exit 128 \"unable to fetch head branch\"`. السبب الجذري هو ملف قفل منتهٍ (`commit-graph.lock`) خلّفه أمر `git fetch` شُغِّل دون الخيار `--no-write-commit-graph` — سلوك ظهر في هذا الإصدار (‏issue #39795 في المستودع الأصلي، أُبلغ عنها في 15 أكتوبر 2026).\n\n**التشخيص.** تحقّق من وجود ملف القفل في المستودع المتأثر:\n\n```bash\ndocker exec -u git gitea find \u002Fdata\u002Fgitea\u002Frepositories -name 'commit-graph.lock'\n```\n\n**الإصلاح الفوري.** احذف ملف القفل المنتهي:\n\n```bash\ndocker exec -u git gitea find \u002Fdata\u002Fgitea\u002Frepositories -name 'commit-graph.lock' -delete\n```\n\nتُستعاد مقارنة PR فورًا دون إعادة تشغيل الحاوية.\n\n**التوصية.** اندمج الإصلاح الجذري في ‏PR #39798 وأُدرج في ‏Gitea 28.1.1 وما بعده. خطّط للترقية إلى 28.1.1 أو أحدث في أقرب وقت ممكن؛ تتأثر بانتظام المنصات التي تدير مستودعات كبيرة بعد كل fetch متزامن.",{"type":39,"title":157,"body":158},"‎Gitea Actions: تلف القيم متعددة الأسطر في YAML منذ v28","منذ ‎Gitea v28، تُعالَج محددات الكتلة المطوية في ‏YAML (`>`) المستخدمة في حقول `with:` لخطوات سير العمل بشكل خاطئ عند التنفيذ: تُجمَّع القيم متعددة الأسطر أو تُقتطع دون فواصل أسطر، ما يُنتج أخطاء صامتة يصعب تشخيصها (‏issue #39775 في المستودع الأصلي، أُبلغ عنها في 15 أكتوبر 2026).\n\n**عرض نموذجي للمشكلة.** معامل `with:` محدَّد عبر أسطر متعددة بـ `>`:\n\n```yaml\n- uses: some-action@v1\n  with:\n    config: >\n      السطر الأول\n      السطر الثاني\n      السطر الثالث\n```\n\n…تستلمه الإجراء على شكل `السطر الأول السطر الثاني السطر الثالث` (تضيع فواصل الأسطر)، بدلًا من القيمة المتوقعة مع فصل بالأسطر.\n\n**الحلول البديلة.** نهجان متكافئان:\n\n1. استبدل `>` (مطوي) بـ `|` (حرفي) — تُحفظ فواصل الأسطر كما هي:\n\n```yaml\n  with:\n    config: |\n      السطر الأول\n      السطر الثاني\n      السطر الثالث\n```\n\n2. استخدم سلسلة نصية بين علامات اقتباس مع `\\n` صريح إذا كانت القيمة يجب أن تبقى على سطر منطقي واحد.\n\nيؤثر هذا السلوك على جميع سير العمل التي تستخدم كتل `>` داخل `with:` منذ الترقية إلى v28؛ كتل `|` والمحددات المضمّنة غير متأثرة. يجري تقييم إصلاح رسمي في المستودع الأصلي.",{"type":39,"title":160,"body":161},"الترقية إلى Gitea 1.27 دون فقدان وصول SSH","يغيّر الإصدار 1.27 المسار الداخلي للملف التنفيذي `gitea` المُدرج في `authorized_keys`. عند الترقية، تشير المدخلات الموجودة إلى المسار القديم: يفشل كل استنساخ أو دفع عبر SSH برسالة `Permission denied (publickey)`، دون أي رسالة خطأ من جهة الخادم تشير إلى الترقية. بعد كل ترقية إلى الإصدار 1.27 (أو إلى أي إصدار يغيّر هذا المسار)، نفّذ داخل الحاوية: `docker exec -u git gitea gitea admin regenerate keys`. تُعيد هذه الأمر كتابة جميع مدخلات `authorized_keys` بالمسار الصحيح للملف التنفيذي. تحقّق بعد ذلك من نجاح `git clone` عبر SSH قبل إعلان اكتمال الترقية.",{"type":81,"body":163},"لا يجوز أن يتعايش `JWT_SECRET_URI` و `JWT_SECRET` في ملف `app.ini`. إذا كان كلا المفتاحَين موجودَين، يحمّل Gitea أو Forgejo أحدهما أو الآخر بحسب ترتيب القراءة، فيُبطل بصمت جميع رموز OAuth2 وأعمال Actions الصادرة قبل الترقية. يرى المستخدمون أخطاء مصادقة متقطعة دون أي رسالة تُشير إلى `app.ini` بوصفه السبب. اختَر آلية واحدة: `JWT_SECRET` (قيمة نصية صريحة) أو `JWT_SECRET_URI` (مسار إلى ملف سري)، ثم احذف الأخرى. أعِد تشغيل الحاوية بعد التعديل.",{"type":39,"title":165,"body":166},"للمضي أبعد: Forgejo و CI\u002FCD المتقدم","إذا أردت توسيع الأتمتة حول منصة Git الخاصة بك، يُفصّل مقال استضافة Forgejo على خادم VPS إعداد نسخة Forgejo مع runners مخصصة لـ Actions، وضبط سجل OCI المدمج، وتصليب الأمان (fail2ban، تقييد نطاقات IP). للفرق التي تريد سلسلة نشر مستمر متكاملة، هذا المقال هو الامتداد الطبيعي لهذا الدليل.",{"type":81,"title":168,"body":169},"الوثائق الرسمية","للإعداد المتقدّم والخيارات الخاصة بالأداة، ارجع إلى الوثائق الرسمية لـ Gitea أو وثائق Forgejo. يغطّي هذا الدليل النشر على خادم VPS والهجرة؛ وتبقى وثائق الناشرَين المرجع للضبط الدقيق وحالات الاستخدام الخاصة.","انشُر Gitea أو Forgejo في دقائق على خادم VPS Cloud من ServOrbit","يتيح لك خادمنا VPS Cloud المزوَّد بـDocker مُعَدًّا مسبقًا إقامة منصة Git الخاصة بك مع SSL تلقائي، دون عبث بالنظام. موارد مخصّصة ولقطات (snapshots) وعنوان IP ثابت مضمَّنة.","أطلِق خادم VPS Cloud الخاص بي","\u002Fvps-cloud",[175,192,209],{"id":176,"slug":177,"slugs":178,"title":182,"excerpt":183,"readTime":184,"views":185,"isPinned":19,"noindex":19,"publishedAt":186,"updatedAt":187,"category":188,"categories":189,"featuredImage":30,"bgImage":31,"posterImage":191,"relatedSolution":30},75,"استضافة-forgejo-على-خادم-vps-الخاص-بك",{"fr":179,"en":180,"ar":177,"es":181},"heberger-forgejo","host-forgejo-on-your-own-vps","alojar-forgejo-en-un-vps","استضافة ‎Forgejo‎ على خادم VPS: دليل شامل 2025","انشر ‎Forgejo‎ على خادم ‎VPS‎ باستخدام ‎Docker‎ و‎SSL‎ و‎Actions runners‎ مع تأمين متقدم. دليل خطوة بخطوة لإقامة مخزن ‎Git‎ مستقل.",10,9,"2026-04-06T00:00:00+00:00","2026-11-08T01:13:14+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[190],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"id":193,"slug":194,"slugs":195,"title":199,"excerpt":200,"readTime":201,"views":18,"isPinned":19,"noindex":19,"publishedAt":202,"updatedAt":21,"category":203,"categories":204,"featuredImage":30,"bgImage":31,"posterImage":206,"relatedSolution":207},71,"استضافة-nextcloud-على-خادمك-الـvps-الخاص",{"fr":196,"en":197,"ar":194,"es":198},"heberger-nextcloud","hosting-nextcloud-on-your-own-vps","alojar-nextcloud-en-su-propio-vps","استضافة Nextcloud على VPS: دليل NC 35 وPHP 8.3 وMariaDB 11","استضافة Nextcloud على VPS: ‏Docker Compose وRedis ونسخ MariaDB، ورفع ملفات تتجاوز 40 جيجابايت خلف Cloudflare، وبديل لـ ‎Office 2021.",20,"2026-04-10T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[205],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":25,"appSlug":208},"nextcloud",{"id":210,"slug":211,"slugs":212,"title":216,"excerpt":217,"readTime":218,"views":18,"isPinned":19,"noindex":19,"publishedAt":219,"updatedAt":220,"category":221,"categories":226,"featuredImage":30,"bgImage":31,"posterImage":228,"relatedSolution":229},43,"نشر-تطبيق-nodejs-على-vps",{"fr":213,"en":214,"ar":211,"es":215},"deployer-nodejs-vps","deploy-a-nodejs-application-on-a-vps","desplegar-una-aplicacion-nodejs-en-un-vps","نشر تطبيق Node.js على VPS","انشر تطبيق Node.js في بيئة الإنتاج على VPS: PM2 وبروكسي عكسي Nginx وشهادة SSL من Let's Encrypt وبدء تشغيل تلقائي عند الإقلاع.",8,"2026-05-08T00:00:00+00:00","2026-11-08T01:13:12+00:00",{"id":222,"name":34,"slug":223,"color":224,"icon":225},4,"developpement","bg-warning\u002F10 text-warning","dev",[227],{"id":222,"name":34,"slug":223,"color":224,"icon":225},"\u002Fblog\u002Fcovers\u002Fdeployer-nodejs-vps-poster.svg",{"categorySlug":34,"appSlug":230},"nodejs-stack",true,1794270221104]