[{"data":1,"prerenderedAt":204},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-forgejo-على-خادم-vps-الخاص-بك-ma-ar":6,"promo-bar-likely":203},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-forgejo-على-خادم-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":30,"intro":33,"sections":34,"ctaTitle":143,"ctaBody":144,"ctaButton":145,"ctaUrl":146,"relatedPosts":147},75,"استضافة-forgejo-على-خادم-vps-الخاص-بك",{"fr":12,"en":13,"ar":10,"es":14},"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,false,"2026-04-06T00:00:00+00:00","2026-11-08T01:13:14+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-forgejo-poster.svg","‎Forgejo‎ هي منصة استضافة ‎Git‎ خفيفة ومجتمعية نشأت كبديل لـ‎Gitea‎. متوافقة مع ‎GitHub Actions‎، وسهلة الترحيل، وتحترم خصوصية بياناتك. يمكن تشغيلها على خادم ‎VPS‎ في أقل من ساعة. يغطي هذا الدليل كل شيء: تحديد موارد الخادم، والنشر عبر ‎Docker‎، وإعداد ‎SSL‎، وتشغيل مهام ‎CI\u002FCD‎، وتشديد الأمان بعد التثبيت، والتحديث دون انقطاع.",[35,39,51,54,76,79,82,85,89,92,95],{"type":36,"title":37,"body":38},"h2","لماذا تختار ‎Forgejo‎ لمخزن ‎Git‎ المستضاف ذاتياً","وُلدت ‎Forgejo‎ عام 2022 كنسخة مجتمعية من ‎Gitea‎، دافعها مخاوف حول حوكمة المشروع الأصلي. تطويرها مجتمعي بالكامل، مرخصة بـ‎GPLv3+‎ منذ الإصدار ‎v9.0‎ (أغسطس 2024؛ وبـ‎MIT‎ قبل ذلك)، ولا تعتمد على أي شركة تجارية. للفرق التي تريد السيطرة الكاملة على شيفراتها ومسارات ‎CI\u002FCD‎ والحزم دون الاعتماد على ‎GitHub‎ أو ‎GitLab‎ أو ‎Bitbucket‎، تُعد ‎Forgejo‎ من أخف الخيارات المتاحة. واجهتها مألوفة لكل مطور استخدم ‎GitHub‎، والترحيل من ‎Gitea‎ سلس، والتوافق مع ‎GitHub Actions‎ يُخفض عتبة الانتقال.",{"type":40,"title":41,"items":42},"ul","فوائد ملموسة لـ‎Forgejo‎ المستضافة ذاتياً",[43,44,45,46,47,48,49,50],"سيادة كاملة: شيفرتك لا تغادر بنيتك التحتية أبداً","متوافقة مع ‎GitHub Actions‎ عبر ‎Forgejo Actions‎ — أعد استخدام سيناريوهاتك الحالية","بصمة ذاكرة منخفضة: يكفي خادم ‎VPS‎ صغير لفريق صغير","سجل حزم مدمج: ‎npm‎، ‎PyPI‎، ‎Maven‎، ‎Helm‎، حاويات ‎OCI‎","لا حدود على عدد المستودعات الخاصة أو المتعاونين","اتحاد ‎ActivityPub‎ قيد التطوير — تشغيل بيني مستقبلي مع منصات أخرى","مفتوحة المصدر، قابلة للتدقيق، بلا مفاجآت في التسعير","تحديثات تحت سيطرتك: أنت من يقرر وقت الترقية",{"type":36,"title":52,"body":53},"المتطلبات المادية والبرمجية بأرقام حقيقية","حدد موارد خادم ‎VPS‎ وفق حجم فريقك الفعلي قبل نشر ‎Forgejo‎. لـ1–5 مطورين مع عشرات المستودعات، يكفي 1 نواة و1 غيغابايت ذاكرة. لـ5–20 مطوراً مع ‎CI\u002FCD‎ نشطة، خطط بـ2 نواة و2 غيغابايت. لما يزيد على 20 مطوراً أو لمستودعات ضخمة، 4 نوى و4 غيغابايت تضمن أداءً سلساً. للتخزين، احسب حجم مستودعاتك مضافاً إليه 20% هامش للحزم والنسخ الاحتياطية.\n\nعلى صعيد الشبكة، يجب فتح ثلاثة منافذ في جدار الحماية: المنفذ 80 لـ‎HTTP‎ (التحقق من ‎Let's Encrypt‎)، المنفذ 443 لـ‎HTTPS‎ (حركة الويب)، والمنفذ 2222 لـ‎SSH Git‎ (تفادياً للتعارض مع ‎SSH‎ الإداري على المنفذ 22). برمجياً تحتاج ‎Docker Engine‎ إصدار ≥ 24، و‎Docker Compose‎ الإصدار 2، واسم نطاق يشير إلى خادمك.",{"type":55,"title":56,"steps":57},"steps","نشر ‎Forgejo‎ باستخدام ‎Docker‎ و‎SSL‎",[58,61,64,67,70,73],{"title":59,"body":60},"تحضير البيئة","أنشئ المجلدات التي ستحتفظ بالبيانات خارج الحاوية:\n\n```bash\nmkdir -p \u002Fopt\u002Fforgejo\u002F{data,config,db}\nchown -R 1000:1000 \u002Fopt\u002Fforgejo\n```\n\nأنشئ ملف `\u002Fopt\u002Fforgejo\u002F.env` بقيمك الخاصة:\n\n```env\nFORGEJO_DOMAIN=git.نطاقك.com\nFORGEJO_SSH_PORT=2222\n```\n\nأضف إليه كلمة مرور مولَّدة لقاعدة البيانات، لا كلمة مرور مثال أبدًا، ثم احمِ الملف:\n\n```bash\necho \"POSTGRES_PASSWORD=$(openssl rand -hex 32)\" >> \u002Fopt\u002Fforgejo\u002F.env\nchmod 600 \u002Fopt\u002Fforgejo\u002F.env\n```",{"title":62,"body":63},"إنشاء ملف ‎docker-compose.yml‎","```yaml\nservices:\n  forgejo:\n    image: codeberg.org\u002Fforgejo\u002Fforgejo:17\n    restart: unless-stopped\n    environment:\n      - USER_UID=1000\n      - USER_GID=1000\n      - FORGEJO__database__DB_TYPE=postgres\n      - FORGEJO__database__HOST=db:5432\n      - FORGEJO__database__NAME=forgejo\n      - FORGEJO__database__USER=forgejo\n      - FORGEJO__database__PASSWD=${POSTGRES_PASSWORD}\n    volumes:\n      - \u002Fopt\u002Fforgejo\u002Fdata:\u002Fdata\n    ports:\n      - \"127.0.0.1:3000:3000\"\n      - \"${FORGEJO_SSH_PORT:-2222}:22\"\n    depends_on:\n      - db\n\n  db:\n    image: postgres:16-alpine\n    restart: unless-stopped\n    environment:\n      - POSTGRES_DB=forgejo\n      - POSTGRES_USER=forgejo\n      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}\n    volumes:\n      - \u002Fopt\u002Fforgejo\u002Fdb:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n```",{"title":65,"body":66},"تشغيل الخدمات","```bash\ncd \u002Fopt\u002Fforgejo\ndocker compose up -d\ndocker compose logs -f forgejo\n```\n\nانتظر حتى تُظهر السجلات أن خادم الويب يستمع على المنفذ 3000. تُنفذ ‎Forgejo‎ عمليات ترحيل قاعدة البيانات تلقائياً عند الإطلاق الأول.",{"title":68,"body":69},"إعداد البروكسي العكسي و‎SSL‎ مع ‎Caddy‎","‎Caddy‎ هو الخيار الأبسط للحصول على شهادة ‎Let's Encrypt‎ تلقائية. ثبّته ثم أنشئ ملف `\u002Fetc\u002Fcaddy\u002FCaddyfile`:\n\n```\ngit.نطاقك.com {\n  reverse_proxy localhost:3000\n}\n```\n\nشغّل ‎Caddy‎: `systemctl enable --now caddy`. تُصدر شهادة ‎TLS‎ وتُجدَّد تلقائياً. إذا فضّلت ‎nginx‎، استخدم كتلة `proxy_pass http:\u002F\u002F127.0.0.1:3000;` مع ‎Certbot‎.",{"title":71,"body":72},"إتمام إعداد المنصة","افتح `https:\u002F\u002Fgit.نطاقك.com` في متصفحك. يظهر معالج الإعداد مرة واحدة فقط. أدخل النطاق وعنوان ‎SSH‎ (`ssh:\u002F\u002Fgit.نطاقك.com:2222`) وبريد المدير، وأوقف التسجيل العام من هذه الشاشة إذا كانت منصتك خاصة. بعد إرسال المعالج، يُقفل الإعداد في ملف `\u002Fopt\u002Fforgejo\u002Fdata\u002Fgitea\u002Fconf\u002Fapp.ini`.",{"title":74,"body":75},"تثبيت ‎runner‎ لـ‎Forgejo Actions‎","ينفّذ الـ‎runner‎ شيفرة سيناريوهاتك: ثبّته على جهاز مخصص إن أمكن. في *إدارة الموقع → Actions → Runners* (`\u002Fadmin\u002Factions\u002Frunners`)، انقر على *إنشاء runner جديد*: تعرض ‎Forgejo‎ معرّفًا ‎UUID‎ ورمزًا سريًا. ولّد ملف الإعداد (`docker run --rm data.forgejo.org\u002Fforgejo\u002Frunner:13 forgejo-runner generate-config > data\u002Frunner-config.yml`)، وانسخ عنوان المنصة والمعرّف والرمز في القسم `server.connections`، وصرّح بالبطاقات (مثل `ubuntu-latest:docker:\u002F\u002Fnode:20`) في القسم `runner`. ثم انشر الـ‎runner‎ مع خادم ‎Docker‎ خاص به (‎docker-in-docker‎) بدل تركيب `\u002Fvar\u002Frun\u002Fdocker.sock` الخاص بالمضيف، الذي يمنح كل مهمة صلاحيات ‎root‎ على الخادم:\n\n```yaml\nservices:\n  docker-in-docker:\n    image: docker:dind\n    privileged: true\n    command: [\"dockerd\", \"-H\", \"tcp:\u002F\u002F0.0.0.0:2375\", \"--tls=false\"]\n    restart: unless-stopped\n\n  runner:\n    image: data.forgejo.org\u002Fforgejo\u002Frunner:13\n    depends_on:\n      - docker-in-docker\n    environment:\n      DOCKER_HOST: tcp:\u002F\u002Fdocker-in-docker:2375\n    user: \"1001:1001\"\n    volumes:\n      - .\u002Fdata:\u002Fdata\n    command: forgejo-runner daemon --config runner-config.yml\n    restart: unless-stopped\n```\n\nيبقى المنفذ 2375 لخادم ‎docker-in-docker‎ على الشبكة الداخلية لـ‎Compose‎: لا تنشره أبدًا. يظهر الـ‎runner‎ في الواجهة فور اتصاله. تحدد كل بطاقة وضع التنفيذ: **docker:\u002F\u002F** (حاوية، موصى به)، و**lxc:\u002F\u002F** (حاوية ‎LXC‎)، و**host** (مباشرة على الجهاز دون أي عزل: يُحصر في المهام الموثوقة).",{"type":36,"title":77,"body":78},"كتابة أول سيناريوهات ‎Forgejo Actions‎","التوافق مع صياغة ‎GitHub Actions‎ واسع. أنشئ ملف `.forgejo\u002Fworkflows\u002Fci.yml` في جذر مستودعك:\n\n```yaml\non:\n  push:\n    branches: [main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: تشغيل الاختبارات\n        run: |\n          npm ci\n          npm test\n```\n\nتتوافق بطاقات `runs-on` مع البطاقات المعلنة عند تسجيل الـ‎runner‎. يمكنك تعريف عدة ‎runners‎ بمختلف البطاقات (مثل `arm64`، `gpu`، `high-memory`) واستهداف البيئة المناسبة لكل مهمة. تعمل الحزم والذاكرة المؤقتة مع الـ‎actions‎ الرسمية ذاتها المستخدمة على ‎GitHub‎.",{"type":36,"title":80,"body":81},"أمان ما بعد التثبيت: الإعدادات الأساسية","منصة ‎Forgejo‎ الحديثة التثبيت تعمل لكنها غير مُصلَّبة. إليك الست نقاط الواجبة المعالجة قبل فتحها لفريقك.\n\n**تعطيل التسجيل العام.** إن لم تفعل ذلك في المعالج، أضف `FORGEJO__service__DISABLE_REGISTRATION=true` إلى متغيرات بيئة الحاوية (أو `DISABLE_REGISTRATION = true` في القسم `[service]` من `app.ini`): عندها لا يستطيع إنشاء الحسابات إلا المدير. لا ينبغي لأحد إنشاء حساب بدون دعوة على منصة داخلية.\n\n**تفعيل المصادقة الثنائية ‎2FA‎ للمديرين.** يجب على كل حساب مدير تفعيل ‎2FA‎ من *الإعدادات → الأمان*. لفرضها، اضبط `GLOBAL_TWO_FACTOR_REQUIREMENT` في القسم `[security]` من `app.ini` (`admin` للمديرين، `all` لجميع المستخدمين). أما `REQUIRE_SIGNIN_VIEW` فيفرض تسجيل الدخول لتصفح المنصة فقط.\n\n**‎SSH‎ بالمفاتيح فقط.** عطّل المصادقة بكلمة المرور في `\u002Fetc\u002Fssh\u002Fsshd_config` على الخادم المضيف (`PasswordAuthentication no`). لـ‎SSH Git‎ على المنفذ 2222، تقبل ‎Forgejo‎ المفاتيح العامة المسجلة في ملفات تعريف المستخدمين فقط — وهذا سلوكها الافتراضي.\n\n**أسرار ‎webhooks‎.** عند إنشاء كل ‎webhook‎، امْلأ دائماً حقل *السر*. توقّع ‎Forgejo‎ الحمولة بـ‎HMAC-SHA256‎؛ على متلقيك التحقق من هذا التوقيع قبل معالجة الحدث.\n\n**الحزم الخاصة.** إذا استخدمت السجل المدمج للحزم، تذكّر أن الحزمة ترث رؤية مالكها: انشرها تحت مؤسسة أو حساب خاص لحصرها في أعضائه. يجب أن تمتلك الرموز المستخدمة للنشر نطاقًا أدنى (`write:package` فقط).\n\n**جدار الحماية.** أغلق كل المنافذ عدا 80 و443 و2222. يجب ألا يُكشف المنفذ 3000 (‎Forgejo‎ الداخلي) مباشرة؛ يستهلكه البروكسي العكسي عبر الحلقة المحلية فقط، ولهذا ينشره ملف ‎compose‎ على `127.0.0.1:3000`. المنفذ الذي ينشره ‎Docker‎ يتجاوز قواعد ‎ufw‎: وحده هذا الربط بـ127.0.0.1 يُبقيه بعيدًا عن الإنترنت.",{"type":36,"title":83,"body":84},"تحديث ‎Forgejo‎ دون انقطاع","إجراء تحديث ‎Docker‎ بسيط ولا يتطلب سوى ثوانٍ من الانقطاع.\n\n```bash\ncd \u002Fopt\u002Fforgejo\n# 1. سحب الصورة الجديدة\ndocker compose pull forgejo\n\n# 2. نسخ احتياطي لقاعدة البيانات قبل أي ترحيل\ndocker compose exec db pg_dump -U forgejo forgejo > backup-$(date +%Y%m%d).sql\n\n# 3. إعادة تشغيل الخدمة\ndocker compose up -d forgejo\n\n# 4. التحقق من عمليات ترحيل المخطط\ndocker compose logs forgejo | grep -i migrat\n```\n\nتُنفذ ‎Forgejo‎ عمليات الترحيل تلقائياً عند الإطلاق. تحقق من أن السجلات لا تُظهر أي خطأ في الترحيل. عند حدوث خطأ في الترحيل، استعد النسخة الاحتياطية وأبلغ عن المشكلة على متتبع ‎Forgejo‎. الوسم `17` لا يتبع إلا إصدارات 17.x: للانتقال إلى الإصدار الرئيسي التالي، غيّر الوسم في ملف ‎compose‎ بعد نسخة احتياطية كاملة، واقرأ ملاحظات الإصدار دائمًا قبل القفز بين الإصدارات الرئيسية. ترفض ‎Forgejo‎ الإقلاع على قاعدة بيانات أحدث منها: التراجع يمر باستعادة النسخة الاحتياطية.",{"type":86,"title":87,"body":88},"tip","الترحيل من ‎Gitea‎ في خمس دقائق","‎Forgejo‎ نسخة مباشرة من ‎Gitea‎: الترقية من ‎Gitea‎ مدعومة حتى الإصدار 1.22 ضمنًا، مرورًا أولًا بـ‎Forgejo v10.0.x‎. للترحيل، أوقف ‎Gitea‎، انسخ مجلد بياناتها إلى `\u002Fopt\u002Fforgejo\u002Fdata`، استبدل الصورة بـ`codeberg.org\u002Fforgejo\u002Fforgejo:10` في ملف ‎docker-compose‎ وأعد التشغيل، ثم ارتقِ إلى الإصدار الحالي. تكتشف ‎Forgejo‎ مخطط ‎Gitea‎ تلقائياً وتُطبق عمليات الترحيل الخاصة بها. تُحفظ مستودعاتك ومستخدموك ومفاتيح ‎SSH‎ والـ‎webhooks‎ والإشكاليات بالكامل. إصدارات ‎Gitea‎ اللاحقة لـ1.22 لا يغطيها دليل الترقية الرسمي لـ‎Forgejo‎: لا تحاول الانتقال المباشر.",{"type":36,"title":90,"body":91},"استكشاف الأخطاء: المشكلات الأكثر شيوعاً","**رفض اتصال ‎SSH‎ على المنفذ 2222.** تحقق أولاً من أن ‎Docker‎ ينشر المنفذ (`docker compose ps` → عمود Ports). ثم اختبر من العميل: `ssh -p 2222 git@git.نطاقك.com`. إذا كانت الإجابة `PTY allocation request failed`، الاتصال يعمل — ‎Forgejo‎ ترد بـ`Hi \u003Cuser>! You've successfully authenticated`. إذا حصلت على `Connection refused`، جدار الحماية يحجب المنفذ: `ufw allow 2222\u002Ftcp`.\n\n**‎Runner‎ يظهر غير متصل في الواجهة.** يتصل الـ‎runner‎ بـ‎Forgejo‎ عبر ‎HTTPS‎ صادر. تحقق من أن حاوية الـ‎runner‎ تستطيع الوصول إلى `git.نطاقك.com`. شهادة موقّعة ذاتياً تستلزم تثبيت مرجع مصادقتك في الحاوية. أعد تشغيل الـ‎runner‎ بعد إصلاح الاتصال: `docker compose restart runner`.\n\n**رفض ‎push‎ بواسطة ‎hook‎.** قد ترفض ‎Forgejo‎ دفعة إذا كانت قاعدة حماية فرع نشطة (مراجعة مطلوبة، اختبارات ‎CI‎ إلزامية) أو تجاوز ملف حد الحجم. تحتوي رسالة خطأ ‎git‎ على التفاصيل. للملفات الكبيرة (> 100 ميغابايت)، استخدم ‎Git LFS‎: تدعم ‎Forgejo‎ بروتوكول ‎LFS‎ أصلاً.\n\n**واجهة بطيئة بعد أشهر.** شغّل جامع مهملات ‎Git‎ من لوحة الإدارة: *إدارة الموقع → لوحة التحكم → عمليات الصيانة*، مهمة جمع المهملات للمستودعات. للأتمتة، فعّل المهمة المجدولة `[cron.git_gc_repos]` في `app.ini` (`ENABLED = true`؛ تعمل كل 72 ساعة افتراضيًا).",{"type":86,"title":93,"body":94},"اتحاد ‎ActivityPub‎: ما تبنيه ‎Forgejo‎","تطوّر ‎Forgejo‎ الاتحاد بين المنصات عبر ‎ForgeFed‎، وهو امتداد لبروتوكول ‎ActivityPub‎ (البروتوكول ذاته الذي يستخدمه ‎Mastodon‎). لا يزال تجريبيًا ومعطّلًا افتراضيًا (`[federation] ENABLED = false`): لم تُطوَّر بعد أدوات الإشراف والتحكم في الوصول، وينبّه المشروع إلى أن تغييرًا غير متوافق قد «يحرق» نطاق المنصة لأي اتحاد مستقبلي. لا تفعّله على منصة إنتاج. الاتحاد الكامل — التفريع عبر النسخ وطلبات السحب بين المنصات — قيد التقييس ضمن مجموعة عمل ‎ForgeFed‎. ستتيح هذه التطورات مستقبلاً المساهمة دون إنشاء حساب على كل نسخة.",{"type":96,"title":97,"headers":98,"rows":103},"comparison","‎Forgejo‎ مقابل ‎Gitea‎ مقابل ‎GitLab CE‎: اختر منصتك",[99,100,101,102],"المعيار","‎Forgejo‎","‎Gitea‎","‎GitLab CE‎",[104,109,113,118,122,126,129,133,138],[105,106,107,108],"الحوكمة","مجتمعية (‎Codeberg e.V.‎)","تجارية (‎CommitGo‎)","تجارية (‎GitLab Inc‎)",[110,111,111,112],"الحد الأدنى من الذاكرة","منخفضة (‎VPS‎ صغير)","8 غيغابايت (16 موصى بها)",[114,115,116,117],"توافق ‎GitHub Actions‎","نعم (‎Forgejo Actions‎)","نعم (‎Gitea Actions‎)","لا (‎GitLab CI‎ بصياغة خاصة)",[119,120,121,121],"سجل الحزم","نعم (متعدد الأشكال)","نعم",[123,124,125,125],"اتحاد ‎ActivityPub‎","قيد التطوير (‎ForgeFed‎)","لا",[127,128,121,121],"الترحيل من ‎GitHub‎","نعم (مرايا + استيراد)",[130,131,131,132],"واجهة الإدارة","بسيطة ومدمجة","كاملة لكن ثقيلة",[134,135,136,137],"الرخصة","‎GPLv3+‎ (منذ ‎v9.0‎)","‎MIT‎","‎MIT‎ (CE) \u002F ‎EE‎ (مدفوع)",[139,140,141,142],"وتيرة الإصدارات","فصلية (+ ‎LTS‎)","عدة إصدارات سنويًا","شهرية","خادم VPS جاهز لـ‎Forgejo‎ في دقائق","تمنحك مجموعة ‎VPS Cloud‎ لدينا خادماً نظيفاً بنظام ‎Debian‎ أو ‎Ubuntu‎، وتخزيناً على ‎SSD‎، وعنوان ‎IP‎ مخصصاً. أمر `docker compose up` واحد وتصبح منصتك حية.","اكتشف خطط ‎VPS Cloud‎","\u002Fvps-cloud",[148,164,185],{"id":149,"slug":150,"slugs":151,"title":155,"excerpt":156,"readTime":18,"views":157,"isPinned":19,"noindex":19,"publishedAt":158,"updatedAt":159,"category":160,"categories":161,"featuredImage":30,"bgImage":31,"posterImage":163,"relatedSolution":30},261,"ارتفاع-تكاليف-saas-46-متى-تستضيف-بنفسك",{"fr":152,"en":153,"ar":150,"es":154},"migrer-saas-self-hosting-bundling-ia","when-saas-vendors-bundle-ai-migrating-to-self-hosting","migrar-de-saas-al-self-hosting-por-la-ia","ارتفاع تكاليف ‎SaaS‎ 46 %: متى تستضيف بنفسك؟","‌PricePulse النصف الأول 2026: ارتفاع 46% في تكاليف ‌SaaS لفرق من 50 شخصاً. ‌Mattermost و‌Nextcloud و‌Plane و‌Forgejo على خادم ‌VPS. دليل الهجرة.",0,"2026-08-14T00:00:00+00:00","2026-10-20T23:18:07+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[162],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fmigrer-saas-self-hosting-bundling-ia-poster.svg",{"id":165,"slug":166,"slugs":167,"title":171,"excerpt":172,"readTime":173,"views":174,"isPinned":19,"noindex":19,"publishedAt":175,"updatedAt":176,"category":177,"categories":182,"featuredImage":30,"bgImage":31,"posterImage":184,"relatedSolution":30},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":168,"en":169,"ar":166,"es":170},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","checklist-docker-compose-en-produccion","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‏قائمة تحقق ‎Docker Compose‎ للإنتاج: 10 إعدادات، فحوصات صحية، أسرار، تراجع، استكشاف الأخطاء، والانتقال من ‎docker-compose v1‎ إلى ‎docker compose‎ على ‎Ubuntu 26.04‎.",12,1,"2026-08-06T00:00:00+00:00","2026-10-23T13:27:09+00:00",{"id":178,"name":179,"slug":180,"color":181,"icon":180},3,"النشر","deploiement","bg-success\u002F10 text-success",[183],{"id":178,"name":179,"slug":180,"color":181,"icon":180},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",{"id":186,"slug":187,"slugs":188,"title":192,"excerpt":193,"readTime":194,"views":174,"isPinned":19,"noindex":19,"publishedAt":175,"updatedAt":159,"category":195,"categories":200,"featuredImage":30,"bgImage":31,"posterImage":202,"relatedSolution":30},228,"تصليب-الخادم-linux-الأولي",{"fr":189,"en":190,"ar":187,"es":191},"durcissement-serveur-linux-initial","initial-linux-server-hardening","hardening-inicial-servidor-linux","تصليب الخادم ‎Linux‎ الأولي","أنشئ مستخدم ‎sudo‎، وكوّن ‎SSH‎ بالمفاتيح، وفعّل ‎UFW‎ و‎fail2ban‎ على ‎Ubuntu‎ أو ‎Debian‎ في أقل من ساعة.",8,{"id":194,"name":196,"slug":197,"color":198,"icon":199},"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[201],{"id":194,"name":196,"slug":197,"color":198,"icon":199},"\u002Fblog\u002Fcovers\u002Fdurcissement-serveur-linux-initial-poster.svg",true,1794270220194]