معرفة مفتوحة. أدوات تملكها. قرارك بيدك. INDEPENDENT / OPEN / ARABIC
الشروحات

[تجريبي] خدماتك في حاويات: بداية مرتبة مع Docker Compose على سيرفرك المنزلي

محتوى تجريبي لمعاينة القالب. شرح طويل يجمع العربية والإنجليزية، وBash وYAML، وجدولاً عريضاً، وتنبيهات، ومصادر. لا تعتمد عليه تقنياً.

سيرفر منزلي صغير مع كابل شبكة برتقالي على مكتب خشبي
صورة توضيحية مولّدة لأغراض العرض، وليست صورة منتج محدد.
⚠️
محتوى تجريبي — هذا المقال أُنشئ لمعاينة قالب عرب رووت وتجربة مكوّنات القراءة. الأوامر والإصدارات هنا أمثلة، ولم تُراجع تحريرياً. احذفه قبل الإطلاق.

لماذا Docker Compose؟

عندما تبدأ الاستضافة الذاتية، تجد نفسك سريعاً أمام عشرات الخدمات: Nextcloud للملفات، Immich للصور، وUptime Kuma للمراقبة. تشغيل كل خدمة يدوياً بأمر docker run طويل يصبح غير قابل للإدارة خلال أسبوع. يعطيك Docker Compose ملفاً واحداً يصف كل شيء: الحاويات، والشبكات، والتخزين، ومتغيرات البيئة.

في هذا الشرح نبني مجموعة خدمات صغيرة على سيرفر منزلي يعمل بنظام Ubuntu Server 24.04 LTS، ونتحقق من أن كل خدمة تعمل قبل الانتقال إلى التالية.

المتطلبات

  • جهاز يعمل بلينكس (جربنا على Ubuntu Server 24.04 وDebian 12) بذاكرة 4 GB على الأقل.
  • صلاحية sudo واتصال بالإنترنت.
  • اسم نطاق اختياري إن أردت الوصول من خارج الشبكة المنزلية.
  • نسخة احتياطية حديثة لأي بيانات موجودة على الجهاز.
🧪
البيئة المجربة (مثال): Docker Engine 27.x، Docker Compose v2.29، Ubuntu Server 24.04.1. تاريخ التحقق التقني: سبتمبر 2026.

الخطوة 1: تثبيت Docker

ثبّت Docker من المستودع الرسمي بدلاً من حزم التوزيعة؛ فهي غالباً أقدم. نفّذ الأوامر التالية على الجهاز:

# إزالة أي نسخ قديمة
sudo apt-get remove -y docker docker-engine docker.io containerd runc

# إضافة مفتاح المستودع الرسمي
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# إضافة المستودع وتثبيت الحزم
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# تشغيل Docker بدون sudo (يتطلب تسجيل خروج ودخول)
sudo usermod -aG docker "$USER"

تحقق من التثبيت:

docker --version
docker compose version

الخطوة 2: تنظيم المجلدات

اعتمد بنية ثابتة منذ اليوم الأول. كل خدمة في مجلد، وكل مجلد يحوي ملف compose.yaml وملف .env ومجلد data:

mkdir -p ~/homelab/{proxy,nextcloud,immich,monitoring}
tree -L 2 ~/homelab

ملف البيئة

لا تكتب كلمات المرور داخل compose.yaml. ضعها في .env واستثنِ الملف من أي مستودع Git:

# ~/homelab/nextcloud/.env
MYSQL_ROOT_PASSWORD=غيّرني-إلى-كلمة-قوية
MYSQL_PASSWORD=غيّرني-أيضاً
NEXTCLOUD_TRUSTED_DOMAINS=cloud.home.arpa

الخطوة 3: أول ملف Compose

هذا مثال لخدمة Nextcloud مع قاعدة بيانات MariaDB وذاكرة Redis:

services:
  db:
    image: mariadb:11
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
    volumes:
      - ./data/db:/var/lib/mysql

  redis:
    image: redis:7-alpine
    restart: unless-stopped

  app:
    image: nextcloud:30
    restart: unless-stopped
    ports:
      - "8080:80"
    depends_on: [db, redis]
    environment:
      MYSQL_HOST: db
      REDIS_HOST: redis
      NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_TRUSTED_DOMAINS}
    volumes:
      - ./data/app:/var/www/html
🛑
خطوة تؤثر على البيانات: مجلد ./data هو مكان كل ملفاتك. لا تنفّذ docker compose down -v أبداً على خدمة فيها بيانات حقيقية؛ الخيار -v يحذف وحدات التخزين المسماة.

شغّل الخدمة وراقب السجلات:

cd ~/homelab/nextcloud
docker compose up -d
docker compose logs -f app

الخطوة 4: وكيل عكسي بشهادات تلقائية

بدلاً من تذكّر المنافذ، ضع Caddy أمام كل الخدمات. مثال لملف Caddyfile:

cloud.example.com {
    reverse_proxy nextcloud-app-1:80
    encode gzip
}

photos.example.com {
    reverse_proxy immich-server:2283
}

وإن كنت تفضّل Nginx:

server {
    listen 443 ssl http2;
    server_name cloud.example.com;

    ssl_certificate     /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;

    client_max_body_size 10G;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
    }
}

مقارنة سريعة: خيارات الوكيل العكسي

جدول عريض لاختبار التمرير داخل الجدول دون تمرير الصفحة:

الأداةالترخيصشهادات تلقائيةواجهة رسوميةملف الإعدادالذاكرة التقريبيةمناسب لـ
CaddyApache-2.0نعم، مدمجةلاCaddyfile~40 MBالبداية السريعة
NginxBSD-2عبر certbotلاnginx.conf~10 MBالتحكم الدقيق
TraefikMITنعم، مدمجةلوحة متابعةYAML / labels~80 MBبيئات Docker الكبيرة
Nginx Proxy ManagerMITنعمنعمقاعدة بيانات~150 MBمن يفضّل الواجهات

التحقق من النجاح

  1. افتح http://IP-السيرفر:8080 وأكمل معالج إعداد Nextcloud.
  2. نفّذ docker compose ps وتأكد أن الحالة running (healthy) لكل الحاويات.
  3. أعد تشغيل الجهاز وتحقق أن الخدمات عادت تلقائياً بفضل restart: unless-stopped.
سيرفر منزلي صغير
انقر الصورة لتكبيرها. مثال على صورة داخل المقال مع وصف.

الأخطاء الشائعة

  • permission denied على المقبس: لم تسجّل خروجاً بعد إضافة مستخدمك إلى مجموعة docker.
  • Nextcloud يرفض النطاق: أضف النطاق إلى NEXTCLOUD_TRUSTED_DOMAINS أو عبر occ config:system:set trusted_domains.
  • رفع الملفات الكبيرة يفشل: ارفع client_max_body_size في الوكيل العكسي.
ابدأ بخدمة واحدة، وثّق ما فعلت، ثم أضف التالية. الاستضافة الذاتية ماراثون لا سباق سرعة.

المصادر

الشروحات
المزيد
نشرة عرب رووت | ArabRoot

معرفة تستحق مكاناً في بريدك.

مقالات مختارة، أدوات مفيدة، وأفكار لتجربتك التالية. بلا ضجيج، ويمكنك إلغاء الاشتراك في أي وقت.

بلا ضجيج، ويمكنك إلغاء الاشتراك في أي وقت.

تم استلام طلبك. افتح بريدك واضغط رابط التأكيد لإتمام الاشتراك.