[{"data":1,"prerenderedAt":148},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-homepage-على-خادم-vps-الخاص-بك-ma-ar":6,"promo-bar-likely":147},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-homepage-على-خادم-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":87,"ctaBody":88,"ctaButton":89,"ctaUrl":90,"relatedPosts":91},92,"استضافة-homepage-على-خادم-vps-الخاص-بك",{"fr":12,"en":13,"ar":10,"es":14},"heberger-homepage","hosting-homepage-on-your-own-vps","alojar-homepage-en-un-vps","استضافة Homepage على خادم VPS الخاص بك","انشر Homepage، لوحة التحكم مفتوحة المصدر، على خادم VPS الخاص بك مع Docker. دليل كامل: بنية YAML، الأدوات المصغّرة، الوسيط العكسي، SSL، الأمان والنسخ الاحتياطي.",8,3,false,"2026-03-20T00:00:00+00:00","2026-11-08T01:13:13+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-homepage-poster.svg","Homepage لوحة تحكم مستضافة ذاتياً تجمع كل خدماتك وأدواتك المصغّرة وروابطك المفضّلة في صفحة واحدة. نشرها على خادم VPS الخاص بك يمنحك صفحة بداية قابلة للتخصيص بالكامل، يمكن الوصول إليها من أي متصفح، دون الاعتماد على خدمة خارجية. يغطي هذا الدليل التثبيت الكامل مع Docker، وإعداد الأدوات المصغّرة المتقدم، وتأمين الوصول والنسخ الاحتياطي.",[35,39,50,53,72,75,78,81,84],{"type":36,"title":37,"body":38},"h2","لماذا تستضيف Homepage على خادم VPS الخاص بك","Homepage (gethomepage.dev) لوحة تحكم مكتوبة بـ Next.js، مصمَّمة لتكون صفحة البداية لبنيتك التحتية. خلافاً لحلول SaaS من نوع صفحة البداية، يبقى كل شيء تحت سيطرتك: تعيش الإعدادات في ملفات YAML بسيطة، وتستعلم الأدوات المصغّرة عن خدماتك أنت (Proxmox, qBittorrent, Sonarr, Pi-hole…)، ولا تمرّ أي بيانات عبر سحابة خارجية. واستضافتها على خادم VPS تجعلها متاحة في كل مكان، من أي متصفح.\n\nهي أيضاً نقطة الدخول المثالية لقيادة حزمة Docker متنامية: يكفي ملف `services.yaml` واحد لرسم خريطة عشرات الحاويات. حين تزداد بنيتك التحتية تعقيداً — تطبيقات متعددة، ونطاقات فرعية متعددة، وخدمات على خوادم VPS متعددة — يصبح Homepage بمثابة قمرة القيادة الوحيدة التي تتحقق منها من حالة كل شيء بنظرة واحدة.",{"type":40,"title":41,"items":42},"ul","الفوائد الملموسة لـ Homepage المستضاف ذاتياً",[43,44,45,46,47,48,49],"إعدادات بصيغة YAML قابلة للإصدار في Git: تُعيد بناء لوحة تحكمك طبق الأصل خلال ثوانٍ بعد إعادة التثبيت.","أدوات مصغّرة أصلية لأكثر من 100 خدمة (Docker, Proxmox, Plex, Grafana, AdGuard, Pi-hole, Portainer…) مع عرض إحصاءات آنيّة.","اكتشاف تلقائي لحاويات Docker عبر الوسوم (labels)، دون إدخال يدوي للروابط.","بصمة ذاكرة خفيفة، مناسبة لـ خادم VPS صغير يشغّل حاويات أخرى.","لا قياس عن بُعد ولا اعتماد على السحابة: تبقى صفحة بدايتك خاصة 100%، حتى في حالة انقطاع الشبكة.","تخصيص كامل للمظهر، وخلفيات الشاشة، وشريط البحث، ومجموعات الخدمات.","إعدادات تصريحية: يُتحقَّق من أي تعديل في ملفات YAML بإعادة تحميل الصفحة، ويكفي `docker compose restart homepage` إن لم يظهر.",{"type":36,"title":51,"body":52},"المتطلبات التقنية","Homepage خفيفة جداً. خادم VPS بـ 1 vCPU و512 ميغابايت من الذاكرة كافٍ عملياً، حتى مع تشغيل حاويات أخرى بجانبه. احسب نحو 300 ميغابايت من مساحة القرص للصورة والإعدادات. ستحتاج إلى:\n\n- **Docker** و**Docker Compose v2** مثبَّتَين (تحقق بـ `docker compose version`).\n- **اسم نطاق أو نطاق فرعي** يشير إلى IP العام لخادم VPS، مثل `home.yourdomain.com`.\n- **وسيط عكسي** — Caddy أو Traefik — للتعامل مع HTTPS وشهادة Let's Encrypt.\n- مقبس Docker `\u002Fvar\u002Frun\u002Fdocker.sock` مربوط للقراءة فقط إن أردت استخدام أدوات Docker المصغّرة والاكتشاف التلقائي — أو، وهو الأكثر أمانًا، وسيط مقبس (انظر قسم الأمان).\n\nإن انطلقت من خادم VPS جديد، ثبّت Docker وفق الوثائق الرسمية، ثم فعّل الإقلاع التلقائي بـ `systemctl enable --now docker`.",{"type":54,"title":55,"steps":56},"steps","انشر Homepage مع Docker في 5 خطوات",[57,60,63,66,69],{"title":58,"body":59},"تجهيز شجرة المجلدات","اتصل بخادم VPS عبر SSH وأنشئ المجلدات:\n\n```bash\nmkdir -p ~\u002Fhomepage\u002Fconfig\ncd ~\u002Fhomepage\n```\n\nستُولَّد الملفات `services.yaml` و`widgets.yaml` و`settings.yaml` و`bookmarks.yaml` تلقائياً عند أول تشغيل داخل مجلد `config\u002F`. يمكنك أيضاً إنشاؤها فارغة مسبقاً للتحكم في محتواها منذ البداية.",{"title":61,"body":62},"كتابة ملف docker-compose.yml","أنشئ `~\u002Fhomepage\u002Fdocker-compose.yml` بالمحتوى التالي:\n\n```bash\nservices:\n  homepage:\n    image: ghcr.io\u002Fgethomepage\u002Fhomepage:latest\n    container_name: homepage\n    restart: unless-stopped\n    ports:\n      - 127.0.0.1:3000:3000\n    volumes:\n      - .\u002Fconfig:\u002Fapp\u002Fconfig\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\n    environment:\n      - HOMEPAGE_ALLOWED_HOSTS=home.yourdomain.com\n```\n\nلاحظ الربط `127.0.0.1:3000:3000`: لا يمكن الوصول إلى المنفذ إلا من loopback المحلي، ولا يُعرَّض مباشرةً على IP العام. الوسيط العكسي هو بوابة الدخول الوحيدة.",{"title":64,"body":65},"تشغيل الحاوية","ابدأ Homepage في الخلفية وتحقق من السجلات:\n\n```bash\ndocker compose up -d\ndocker compose logs -f\n```\n\nيستمع Homepage افتراضياً على المنفذ `3000`. اختبر محلياً قبل فتح الوسيط العكسي:\n\n```bash\ncurl http:\u002F\u002Flocalhost:3000\n```\n\nإن كان الرد مستنداً HTML، فالحاوية تعمل.",{"title":67,"body":68},"ربط الوسيط العكسي وSSL","**مع Caddy** — أضف في `Caddyfile`:\n\n```bash\nhome.yourdomain.com {\n    reverse_proxy localhost:3000\n}\n```\n\nيولّد Caddy شهادة Let's Encrypt ويجدّدها تلقائياً. أعد التحميل: `systemctl reload caddy`.\n\n**مع Traefik** — أضف وسوماً للخدمة في `docker-compose.yml`:\n\n```bash\nlabels:\n  - traefik.enable=true\n  - traefik.http.routers.homepage.rule=Host(`home.yourdomain.com`)\n  - traefik.http.routers.homepage.entrypoints=websecure\n  - traefik.http.routers.homepage.tls.certresolver=letsencrypt\n```\n\nفي كلتا الحالتين، تأكد أن DNS يشير إلى IP الخادم VPS قبل محاولة تحدي ACME.",{"title":70,"body":71},"تخصيص الخدمات والأدوات المصغّرة","حرّر `config\u002Fservices.yaml` لتعريف تطبيقاتك في مجموعات:\n\n```bash\n- الأدوات:\n    - Portainer:\n        href: https:\u002F\u002Fportainer.yourdomain.com\n        description: إدارة الحاويات\n        icon: portainer.png\n```\n\nأضف أدوات موارد النظام في `config\u002Fwidgets.yaml`:\n\n```bash\n- resources:\n    cpu: true\n    memory: true\n    disk: \u002F\n```\n\nأعد تحميل الصفحة في المتصفح بعد كل تعديل؛ وإن لم يظهر تغيير ما (خصوصًا في `settings.yaml`)، فأعد تشغيل الحاوية بـ `docker compose restart homepage`.",{"type":36,"title":73,"body":74},"إعداد أدوات خدمات مصغّرة","الأدوات المصغّرة هي القيمة المضافة لـ Homepage مقارنةً بقائمة روابط بسيطة. تستعلم كل أداة مصغّرة عن واجهة API للخدمة المستهدفة وتعرض مقاييس آنية مباشرة على البطاقة.\n\nلتفعيل أداة مصغّرة، أضف كتلة `widget` تحت تعريف الخدمة في `services.yaml`. مثال مع **Portainer**:\n\n```bash\n- Portainer:\n    href: https:\u002F\u002Fportainer.yourdomain.com\n    widget:\n      type: portainer\n      url: https:\u002F\u002Fportainer.yourdomain.com\n      env: 1\n      key: {{HOMEPAGE_VAR_PORTAINER_KEY}}\n```\n\nلا يجب أبداً كتابة مفاتيح API بنص صريح في `services.yaml` إن كان هذا الملف مُصدَراً في مستودع عام. مرّرها إلى الحاوية كمتغيرات بيئة تبدأ بـ `HOMEPAGE_VAR_`، مثلًا من ملف `.env` يُحمَّل عبر `env_file: .env` في `docker-compose.yml`، ثم أشِر إليها بالتدوين `{{HOMEPAGE_VAR_PORTAINER_KEY}}` في YAML: يستبدل Homepage كل `{{HOMEPAGE_VAR_…}}` بقيمة المتغير.\n\nأدوات مصغّرة أخرى شائعة الاستخدام: **Proxmox** (المعالج، الذاكرة، تخزين الكتلة)، **Pi-hole** (الطلبات المحظورة، العملاء النشطون)، **Sonarr \u002F Radarr** (التنزيلات الجارية)، **Grafana** (اللوحات المدمجة)، **Uptime Kuma** (حالة كل مراقب). القائمة الكاملة موجودة في الوثائق الرسمية لـ gethomepage.dev.",{"type":76,"body":77},"tip","فعّل الاكتشاف التلقائي بإضافة وسوم `homepage.group` و`homepage.name` و`homepage.href` و`homepage.icon` مباشرةً على حاويات Docker الأخرى لديك. يكتشفها Homepage عبر مثيل Docker المعرَّف في `config\u002Fdocker.yaml` ويضيفها إلى لوحة التحكم دون المساس بـ `services.yaml`. بدمج هذا النهج مع ملف `.env` لتخزين مفاتيح API الخاصة بأدواتك المصغّرة (لا تكن ظاهرةً أبداً في YAML المُصدَر)، تحصل على لوحة تحكم تُحدِّث نفسها مع كل نشر جديد: ضع الوسوم مرة واحدة، ويقرأها Homepage باستمرار.",{"type":36,"title":79,"body":80},"تأمين الوصول إلى لوحة التحكم","لوحة تحكم تُدرج جميع خدماتك هدف جذّاب. إجراءان أساسيان ضروريان قبل كشف Homepage على الإنترنت.\n\n**تقييد الوصول بالـ IP أو المصادقة.** إن كان Homepage مخصصاً لك وحدك، فأبسط حل هو السماح لعنوان IP الخاص بك فقط في إعدادات الوسيط العكسي. مع Caddy:\n\n```bash\nhome.yourdomain.com {\n    @allowed remote_ip 203.0.113.42\n    handle @allowed {\n        reverse_proxy localhost:3000\n    }\n    respond 403\n}\n```\n\nإن كنت تصل إلى لوحة التحكم من شبكات متعددة، فضّل مصادقة HTTP الأساسية أو وسيط مصادقة مثل **Authelia** أو **Authentik** أمام Homepage. ومنذ الإصدار v2.0، يوفّر Homepage أيضًا بوابة مصادقة خاصة به، بكلمة مرور أو عبر OIDC (`HOMEPAGE_AUTH_ENABLED=true`).\n\n**لا تسلّم مقبس Docker الخام.** لا يحمي الخيار `:ro` في الربط `\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro` إلا الملف نفسه: تبقى واجهة Docker البرمجية متاحة بالكامل عبره، ويمكن لحاوية مخترقة إنشاء حاويات جديدة بأحجام عشوائية على المضيف. توصي وثائق Homepage بوسيط مقبس (`docker-socket-proxy`) لا يسمح إلا بالقراءة: `CONTAINERS=1` و`POST=0`، ومنفذ مربوط على `127.0.0.1`، ثم `host: dockerproxy` و`port: 2375` في `config\u002Fdocker.yaml`.\n\n**حدّث الصورة بانتظام.** استخدم `docker compose pull && docker compose up -d` لتحديث Homepage متى توفّرت صورة جديدة. يمكنك أتمتة هذا بمهمة cron. أما **Watchtower**، الذي طالما نُصح به لذلك، فلم يعد يُصان: مستودعه على GitHub مؤرشف.",{"type":36,"title":82,"body":83},"النسخ الاحتياطي واستعادة الإعدادات","تعيش كل إعدادات Homepage في مجلد `config\u002F`: هو المجلد الوحيد الذي تحتاج إلى نسخه احتياطياً. لا قاعدة بيانات، لا حالة مستمرة خارج ملفات YAML هذه.\n\n**إصدار في Git.** أكثر الأساليب موثوقيةً هو تهيئة مستودع Git في `~\u002Fhomepage\u002Fconfig\u002F` والتنفيذ (commit) بعد كل تعديل. إن احتوت إعداداتك مفاتيح API (حتى عبر متغيرات)، أضف `.gitignore` لاستبعاد ملف `.env` وإصدار ملفات YAML فقط.\n\n**نسخ احتياطي تدريجي إلى تخزين الكائنات.** مع `restic` وحاوية S3 متوافقة (Garage, MinIO, Backblaze B2)، جدوِل نسخاً احتياطياً يومياً من cron:\n\n```bash\nrestic -r s3:s3.example.com\u002Fmy-bucket\u002Fhomepage backup ~\u002Fhomepage\u002Fconfig\n```\n\n**الاستعادة.** في حالة فقدان الخادم VPS، أعد إنشاء الحاوية، وأعد `config\u002F` من النسخة الاحتياطية، ونفّذ `docker compose up -d`. يعمل Homepage في أقل من دقيقة — أحد المزايا الملموسة لإعداد 100% تعريفي بـ YAML.",{"type":36,"title":85,"body":86},"تثبيت Homepage عبر Marketplace من ServOrbit","إن كنت تفضّل عدم ضبط Docker يدوياً، يوفّر Marketplace من ServOrbit Homepage كتثبيت موجَّه. بضع نقرات من لوحة تحكم عميلك تُنشئ خادم VPS مع Homepage جاهزاً للاستخدام: الصورة الرسمية، ومنفذ مربوط على loopback، وحجم إعدادات دائم.\n\nلا يُنصّب القالب وسيطًا عكسيًا: عرّف نطاقك الفرعي، واربط Caddy أو Traefik كما هو موضّح أعلاه من أجل HTTPS، وقيّد `HOMEPAGE_ALLOWED_HOSTS` بهذا النطاق الفرعي، لأن الوصفة تسلّمه مفتوحًا لكل المضيفين (`*`). يتبقى عليك بعد ذلك تخصيص ملفات YAML في `config\u002F`.\n\nاعثر على الصفحة الكاملة للمواصفات، والمتطلبات الدنيا، وزرّ التثبيت في صفحة Marketplace المخصصة.","ثبّت Homepage بنقرة واحدة","انشر Homepage على خادم VPS Cloud من ServOrbit بقالب Docker مُعدّ مسبقاً. قرص SSD، وDocker جاهز للاستخدام، ونطاق ترددي سخي لتقديم صفحة بدايتك دون تأخّر.","انشر على خادم VPS Cloud","\u002Fapplications\u002Fالمراقبة-وقابلية-الرصد\u002Fhomepage",[92,111,129],{"id":93,"slug":94,"slugs":95,"title":99,"excerpt":100,"readTime":101,"views":102,"isPinned":19,"noindex":19,"publishedAt":103,"updatedAt":104,"category":105,"categories":106,"featuredImage":30,"bgImage":31,"posterImage":108,"relatedSolution":109},71,"استضافة-nextcloud-على-خادمك-الـvps-الخاص",{"fr":96,"en":97,"ar":94,"es":98},"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,1,"2026-04-10T00:00:00+00:00","2026-11-08T16:32:50+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[107],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":25,"appSlug":110},"nextcloud",{"id":112,"slug":113,"slugs":114,"title":118,"excerpt":119,"readTime":120,"views":102,"isPinned":19,"noindex":19,"publishedAt":121,"updatedAt":122,"category":123,"categories":124,"featuredImage":30,"bgImage":31,"posterImage":126,"relatedSolution":127},72,"استضافة-ghost-على-خادمك-الـvps-الخاص",{"fr":115,"en":116,"ar":113,"es":117},"heberger-ghost","hosting-ghost-on-your-own-vps","alojar-ghost-en-un-vps","استضافة Ghost على خادمك الـVPS: دليل شامل 2026","نشر Ghost v6 على خادمك الـVPS مع Caddy وMySQL وGhost CLI وStripe Tax: التثبيت ووكيل TLS العكسي والتحديثات واستكشاف أخطاء البدء الشائعة.",10,"2026-04-09T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[125],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":25,"appSlug":128},"ghost",{"id":130,"slug":131,"slugs":132,"title":136,"excerpt":137,"readTime":23,"views":138,"isPinned":19,"noindex":19,"publishedAt":139,"updatedAt":140,"category":141,"categories":142,"featuredImage":30,"bgImage":31,"posterImage":144,"relatedSolution":145},73,"استضافة-wordpress-على-خادم-vps-الخاص-بك",{"fr":133,"en":134,"ar":131,"es":135},"heberger-wordpress","host-wordpress-on-your-own-vps","alojar-wordpress-en-un-vps","استضافة WordPress على خادم VPS الخاص بك","استضِف WordPress على خادم VPS الخاص بك لأقصى أداء وتحكّم: Docker وMariaDB والتخزين المؤقت (cache) وreverse proxy وSSL.",0,"2026-04-08T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[143],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":25,"appSlug":146},"wordpress",true,1794270222837]