> ## Content Index
> Fetch the complete content index at: https://arabroot.cloud-event.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# [تجريبي] خدماتك في حاويات: بداية مرتبة مع Docker Compose على سيرفرك المنزلي
- URL: https://arabroot.cloud-event.com/articles/demo-docker-compose-homelab-guide/
- Published: 2026-09-20T08:00:00.000Z
- Updated: 2026-09-23T22:27:44.000Z
- Description: محتوى تجريبي لمعاينة القالب. شرح طويل يجمع العربية والإنجليزية، وBash وYAML، وجدولاً عريضاً، وتنبيهات، ومصادر. لا تعتمد عليه تقنياً.
- Author: ArabRoot Dev Admin
- Tags: الشروحات, هوم لاب, Docker, Nextcloud, #Import 2026-09-23 22:27

⚠️

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

## لماذا 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 من المستودع الرسمي بدلاً من حزم التوزيعة؛ فهي غالباً أقدم. نفّذ الأوامر التالية على الجهاز:

```bash
# إزالة أي نسخ قديمة
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"
```

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

```bash
docker --version
docker compose version
```

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

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

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

### ملف البيئة

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

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

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

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

```yaml
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` يحذف وحدات التخزين المسماة.

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

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

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

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

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

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

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

```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;
    }
}
```

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

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

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

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

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

![سيرفر منزلي صغير](https://arabroot.cloud-event.com/content/images/2026/09/homelab-editorial.png)

انقر الصورة لتكبيرها. مثال على صورة داخل المقال مع وصف.

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

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

> ابدأ بخدمة واحدة، وثّق ما فعلت، ثم أضف التالية. الاستضافة الذاتية ماراثون لا سباق سرعة.

## المصادر

- [Docker Engine — Install on Ubuntu](https://docs.docker.com/engine/install/ubuntu/?ref=arabroot.cloud-event.com)
- [Docker Compose documentation](https://docs.docker.com/compose/?ref=arabroot.cloud-event.com)
- [Nextcloud Docker image](https://github.com/nextcloud/docker?ref=arabroot.cloud-event.com)
- [Caddy documentation](https://caddyserver.com/docs/?ref=arabroot.cloud-event.com)