لماذا تحتاج إلى لوحة تحكم مستضافة ذاتيًا على خادم VPS
خادم VPS متعدد التطبيقات بلا صفحة مركزية يعني إدارة أعمى. تحفظ كل منفذ (http://your-domain.com:3001، :8080، :9000…)، وتضيع الوقت في البحث عن واجهة خدمة توقفت منذ ثلاثة أسابيع، وليس لديك أي عرض موحّد لحالة حاوياتك.
لوحة تحكم مستضافة ذاتيًا تحل هذا دون تثقيل بنيتك التحتية: صفحة واحدة، متاحة عبر HTTPS خلف البروكسي العكسي، تجمع الحالة والاختصارات والمقاييس. لا تشارك أي بيانات مع طرف ثالث، ولا تدفع اشتراكًا إضافيًا.
حالات استخدام عملية
- الصفحة الرئيسية للمتصفح تشير إلى خادمك الخاص: جميع خدماتك بنقرة واحدة.
- عرض الحالة اللحظية لحاويات Docker دون فتح Portainer أو Dozzle.
- تجميع خلاصات RSS وأخبار تقنية (Hacker News، Reddit، GitHub releases) على الشاشة ذاتها مع خدماتك.
- وصول مركزي لفريق أو وكالة تتشارك خادم VPS مشتركًا.
- صفحة بداية لمختبرك المنزلي أو بنية التطوير لديك.
- مراقبة خفيفة دون نشر مجموعة كاملة من Grafana/Prometheus.
Homarr: لوحة تحكم متكاملة بواجهة رسومية
Homarr لوحة تحكم مستضافة ذاتيًا بـ Next.js مع واجهة إعداد رسومية بالكامل — تسحب البلاطات وتفلتها، وتضبط تكاملات Docker وSonarr وRadarr وJellyfin أو أي خدمة تملك API. تعمل في حاوية Docker واحدة (صورة ghcr.io/homarr-labs/homarr) وتحفظ إعداداتها على وحدة تخزين.
المتطلبات: خادم VPS بذاكرة وصول عشوائي لا تقل عن 512 ميغابايت متاحة بعد حاوياتك الأخرى، مع تثبيت Docker وDocker Compose، واسم نطاق أو نطاق فرعي يشير إلى عنوان IP الخاص بك. توقع 150 إلى 250 ميغابايت من ذاكرة الوصول العشوائي عند الخمول حسب التكاملات النشطة.
نشر Homarr باستخدام Docker Compose
إنشاء المجلد وملف Compose
على خادم VPS، أنشئ مجلدًا مخصصًا وملف
docker-compose.yml:mkdir -p /opt/homarr && cd /opt/homarrمحتوى ملف
docker-compose.yml:services: homarr: image: ghcr.io/homarr-labs/homarr:latest container_name: homarr restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./appdata:/appdata environment: - SECRET_ENCRYPTION_KEY=your-random-32-char-key ports: - "7575:7575"
SECRET_ENCRYPTION_KEY مطلوب: يشفّر Homarr أسرار تكاملاته (رموز API وكلمات المرور) بهذا المفتاح. أنشئ مفتاحًا باستخدامopenssl rand -hex 32.توليد مفتاح التشفير
يتطلب Homarr مفتاحًا سداسي عشريًا مؤلفًا من 64 حرفًا:
openssl rand -hex 32انسخ القيمة إلى
SECRET_ENCRYPTION_KEY في ملف Compose. بدون هذا المتغير، ترفض الحاوية الإقلاع.تشغيل الحاوية
docker compose up -dيصبح Homarr متاحًا على
http://your-domain.com:7575. عند الدخول الأول، أنشئ حساب المشرف. يتم الإعداد الأولي (البلاطات والسمة والتكاملات) بالكامل من واجهة الويب.إعداد تكامل Docker
مقبس Docker (
/var/run/docker.sock) مثبَّت للقراءة فقط. في واجهة Homarr، انتقل إلى الإعدادات ← التكاملات وأضف تكامل Docker يشير إلىunix:///var/run/docker.sock. سيعرض Homarr تلقائيًا حالة (running/stopped) حاوياتك على البلاطات المرتبطة.إعداد Traefik كبروكسي عكسي
لعرض Homarr عبر HTTPS، أضف هذه التسميات إلى الخدمة في ملف Compose:
labels: - "traefik.enable=true" - "traefik.http.routers.homarr.rule=Host(`dashboard.your-domain.com`)" - "traefik.http.routers.homarr.entrypoints=websecure" - "traefik.http.routers.homarr.tls.certresolver=letsencrypt" - "traefik.http.services.homarr.loadbalancer.server.port=7575"احذف كتلة
ports إذا كنت تعرضه عبر Traefik فقط.بديل nginx
إذا كنت تستخدم nginx، أنشئ ملف vhost
/etc/nginx/sites-available/homarr.conf:server { listen 443 ssl; server_name dashboard.your-domain.com; ssl_certificate /etc/letsencrypt/live/dashboard.your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/dashboard.your-domain.com/privkey.pem; location / { proxy_pass http://127.0.0.1:7575; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }شهادة Let's Encrypt عبر
certbot --nginx -d dashboard.your-domain.com.
Glance: ملف Go ثنائي وإعداد YAML وبدون قاعدة بيانات
Glance في الطرف المقابل من حيث التعقيد مقارنةً بـ Homarr. إنه ملف Go ثنائي ساكن: لا Node.js، لا قاعدة بيانات، لا واجهة إعداد. كل شيء يُعلَن في ملف glance.yml. يستهلك أقل من 50 ميغابايت من ذاكرة الوصول العشوائي عند الخمول، مما يجعله الخيار الطبيعي لخادم VPS محدود الموارد.
الترخيص: AGPL-3.0 (مثل Homarr). الكود المصدري على GitHub.
نشر Glance باستخدام Docker
إنشاء المجلد وملف الإعداد
mkdir -p /opt/glance && cd /opt/glanceأنشئ ملف
glance.yml بسيطًا مع أداة Hacker News وأداة Docker:server: host: 0.0.0.0 port: 8080 pages: - name: الرئيسية columns: - size: full widgets: - type: hacker-news title: Hacker News - size: small widgets: - type: docker-containers title: الحاويات collapsed-by-default: falseيعرض Glance المنفذ 8080 افتراضيًا.
التشغيل باستخدام Docker Compose
أنشئ ملف
docker-compose.yml:services: glance: image: glanceapp/glance:latest container_name: glance restart: unless-stopped volumes: - ./glance.yml:/app/glance.yml:ro - /var/run/docker.sock:/var/run/docker.sock:ro ports: - "8080:8080"ابدأ بـ:
docker compose up -dيصبح Glance متاحًا على
http://your-domain.com:8080.إضافة أداة الطقس
أداة
weather هي الأبسط في الإعداد — تتطلب موقعًا فقط:- type: weather title: الطقس location: Casablanca, Morocco units: metric hour-format: 24hأضف هذه الكتلة في قسم
widgets في العمود الذي تختاره.إعداد البروكسي العكسي لـ Glance
مع Traefik، أضف في
docker-compose.yml:labels: - "traefik.enable=true" - "traefik.http.routers.glance.rule=Host(`glance.your-domain.com`)" - "traefik.http.routers.glance.entrypoints=websecure" - "traefik.http.routers.glance.tls.certresolver=letsencrypt" - "traefik.http.services.glance.loadbalancer.server.port=8080"مع nginx، نفس البنية كما في Homarr، مع استبدال المنفذ بـ
8080.إعادة التحميل التلقائية للإعداد
يراقب Glance ملف إعداده ويعيد التحميل تلقائيًا عند تعديله. لا حاجة لإعادة تشغيل الحاوية بعد كل إضافة أداة — سيعرض
docker logs glance -f السطرConfig reloaded بعد ثوانٍ.
Homarr مقابل Glance: جدول مقارنة
مرّر الجدول أفقيًا
| المعيار | Homarr | Glance |
|---|---|---|
| ذاكرة الوصول العشوائي عند الخمول | 150 – 250 ميغابايت | < 50 ميغابايت |
| الإعداد | واجهة رسومية بالسحب والإفلات | ملف YAML فقط |
| قاعدة البيانات | SQLite مدمجة | لا شيء |
| الأدوات المتاحة | تكاملات (Sonarr, Jellyfin, Docker…) + بلاطات حرة | RSS, Hacker News, طقس, Docker, GitHub, تقويم… |
| التحديث | `docker compose pull && docker compose up -d` | `docker compose pull && docker compose up -d` |
| الترخيص | AGPL-3.0 | AGPL-3.0 |
| الأنسب لـ | بنية تحتية غنية، استخدام يومي، مشاركة فريق | خادم VPS خفيف، homelab بسيط، عرض سريع |
العرض عبر HTTPS مع بروكسي عكسي
يستمع كلا الأداتين على HTTP محليًا (7575 لـ Homarr، 8080 لـ Glance). عرض لوحة تحكم مباشرةً على الإنترنت بدون TLS يعني نقل رموز التكامل والجلسات بنص واضح.
خياران شائعان:
Traefik — الخيار المُوصى به إذا كان لديك Traefik على خادم VPS. التسميات كافية (أمثلة أعلاه). يطلب Traefik شهادات Let's Encrypt ويجددها تلقائيًا عبر ACME DNS-01 أو HTTP-01.
nginx — الخيار الطبيعي إذا كان خادمك يعمل بالفعل على nginx. بنية proxy_pass http://127.0.0.1:<port> متطابقة لكلا الأداتين؛ يتغير المنفذ فقط.
التصليب الأمني: تقييد الوصول إلى لوحة التحكم
لوحة تحكم مستضافة ذاتيًا تكشف خدماتك الداخلية. بعض الاحتياطات:
مصادقة Homarr: فعّل المصادقة المدمجة عند تسجيل الدخول الأول. لا تترك لوحة التحكم مفتوحة بدون كلمة مرور.
Glance: لا يوفر مصادقة أصلية. احمه بـ middleware في Traefik (BasicAuth أو ForwardAuth) أو عبر auth_basic في nginx قبل عرضه علنيًا.
شبكة Docker مخصصة: أنشئ شبكة internal: true للخدمات التي لا تحتاج وصولًا خارجيًا، وصل Homarr أو Glance فقط بشبكة Traefik.
مقبس Docker للقراءة فقط: يثبّت كلا الأداتين /var/run/docker.sock — ثبّته بـ :ro كما في الأمثلة أعلاه. حاوية مخترقة لن تستطيع تشغيل حاويات جديدة عبر المقبس.
استكشاف الأخطاء: الأخطاء الشائعة
Homarr يرفض الإقلاع — SECRET_ENCRYPTION_KEY missing: متغير البيئة غائب أو فارغ. أنشئ مفتاحًا بـ openssl rand -hex 32 وأضفه إلى ملف Compose.
Homarr يعرض "Docker integration error": تحقق من أن /var/run/docker.sock مثبَّت في الحاوية (docker inspect homarr | grep docker.sock) وأن المقبس قابل للقراءة.
Glance لا يحمّل أداة docker-containers: مقبس Docker غير مثبَّت. أضف الوحدة /var/run/docker.sock:/var/run/docker.sock:ro إلى Compose.
Glance يعرض شاشة بيضاء: ملف glance.yml يحتوي على خطأ في بنية YAML. تحقق بـ docker logs glance — رسالة الخطأ تشير إلى السطر الدقيق.
خطأ 502 Bad Gateway خلف nginx/Traefik: الحاوية لا تعمل أو المنفذ لا يتطابق. تحقق بـ docker ps | grep homarr أو docker ps | grep glance.
أي أداة تختار؟
اختر Homarr إذا كان لديك خدمات متعددة بـ APIs (Sonarr, Radarr, Jellyfin, Pi-hole…)، أو إذا كنت تفضل الإعداد عبر واجهة رسومية، أو إذا كنت تشارك لوحة التحكم مع آخرين. خصص 200 ميغابايت إضافية من ذاكرة الوصول العشوائي في ميزانية الحاويات.
اختر Glance إذا كان خادم VPS محدود الذاكرة، أو إذا كنت مرتاحًا مع YAML، أو إذا كنت تريد أداة تبدأ في ثوانٍ وتستهلك الحد الأدنى. الإعداد المُعتمَد في ملف نصي هو أيضًا ميزة للبيئات المُدارة كـ infrastructure-as-code.
الأداتان تعملان معًا على خادم VPS الواحد إذا كانت الذاكرة كافية — Homarr كلوحة رئيسية وGlance كعرض سريع جانبي.