انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تثبيت Nextcloud: التخزين السحابي المستضاف ذاتياً والتعاون

تثبيت Nextcloud مع Docker، تهيئة Apache/Nginx، إعداد قاعدة البيانات، شهادة SSL، مزامنة الملفات، متجر التطبيقات وتحسين الأداء.

وقت القراءة: 16 دقيقة الاستضافة الذاتية
nextcloudتخزين سحابيself-hostingdockerمزامنة الملفاتتعاون

جدول المحتويات

تثبيت Nextcloud: التخزين السحابي المستضاف ذاتياً والتعاون

Nextcloud هو بديل مفتوح المصدر ومستضاف ذاتياً لخدمات التخزين السحابي مثل Google Drive وDropbox وOneDrive. بالإضافة إلى تخزين الملفات ومزامنتها، يوفر التقويم وجهات الاتصال ومؤتمرات الفيديو وتحرير المستندات والمزيد. يتناول هذا الدليل تثبيت Nextcloud مع Docker Compose وتهيئة Nginx reverse proxy وتحسين الأداء.

ما هو Nextcloud؟

Nextcloud هو منصة تعاون تمنحك التحكم الكامل في بياناتك:

  • تخزين الملفات: تخزين غير محدود (محدود فقط بسعة القرص)
  • المزامنة: عملاء لـ Windows وmacOS وLinux وiOS وAndroid
  • متجر التطبيقات: أكثر من 200 تطبيق (Nextcloud Talk، Calendar، Contacts، Office)
  • إدارة المستخدمين: تكامل LDAP/AD، إدارة المجموعات
  • الأمان: تشفير من طرف إلى طرف، 2FA، سجل التدقيق

متطلبات النظام

  • Ubuntu 22.04 أو Debian 12
  • ذاكرة RAM لا تقل عن 2 جيجابايت (يُنصح بـ 4 جيجابايت)
  • قرص لا يقل عن 20 جيجابايت (مساحة إضافية للتخزين)
  • Docker وDocker Compose مثبتان

التثبيت مع Docker Compose

إنشاء هيكل الدليل

hljs bash
mkdir -p /opt/nextcloud/{data,db,redis}
cd /opt/nextcloud

ملف docker-compose.yml

hljs yaml
version: '3.8'

services:
  db:
    image: postgres:16-alpine
    container_name: nextcloud-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: كلمة-مرور-قوية
    volumes:
      - ./db:/var/lib/postgresql/data
    networks:
      - nextcloud-net

  redis:
    image: redis:7-alpine
    container_name: nextcloud-redis
    restart: unless-stopped
    command: redis-server --requirepass كلمة-مرور-redis
    volumes:
      - ./redis:/data
    networks:
      - nextcloud-net

  app:
    image: nextcloud:28-fpm-alpine
    container_name: nextcloud-app
    restart: unless-stopped
    depends_on:
      - db
      - redis
    environment:
      POSTGRES_HOST: db
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: كلمة-مرور-قوية
      NEXTCLOUD_ADMIN_USER: admin
      NEXTCLOUD_ADMIN_PASSWORD: كلمة-مرور-المسؤول
      NEXTCLOUD_TRUSTED_DOMAINS: cloud.example.com
      REDIS_HOST: redis
      REDIS_HOST_PASSWORD: كلمة-مرور-redis
      PHP_MEMORY_LIMIT: 512M
      PHP_UPLOAD_LIMIT: 10G
    volumes:
      - ./data:/var/www/html
    networks:
      - nextcloud-net

  nginx:
    image: nginx:alpine
    container_name: nextcloud-nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./data:/var/www/html:ro
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/ssl/nextcloud:ro
    depends_on:
      - app
    networks:
      - nextcloud-net

  cron:
    image: nextcloud:28-fpm-alpine
    container_name: nextcloud-cron
    restart: unless-stopped
    volumes:
      - ./data:/var/www/html
    entrypoint: /cron.sh
    depends_on:
      - db
      - redis
    networks:
      - nextcloud-net

networks:
  nextcloud-net:
    driver: bridge

شهادة SSL

hljs bash
# شهادة Let's Encrypt مع Certbot
apt install certbot -y
certbot certonly --standalone -d cloud.example.com

# نسخ الشهادات
mkdir -p /opt/nextcloud/ssl
cp /etc/letsencrypt/live/cloud.example.com/fullchain.pem /opt/nextcloud/ssl/
cp /etc/letsencrypt/live/cloud.example.com/privkey.pem /opt/nextcloud/ssl/

# التجديد التلقائي عبر cron
echo "0 3 * * * certbot renew --quiet && cp /etc/letsencrypt/live/cloud.example.com/*.pem /opt/nextcloud/ssl/ && docker restart nextcloud-nginx" | crontab -

تشغيل Nextcloud

hljs bash
cd /opt/nextcloud
docker compose up -d

# متابعة السجلات
docker compose logs -f app

# بعد التثبيت، افتح:
# https://cloud.example.com

أوامر occ

إدارة Nextcloud باستخدام أداة سطر الأوامر occ:

hljs bash
# تشغيل أمر occ
docker exec -u www-data nextcloud-app php occ [الأمر]

# التحقق من حالة النظام
docker exec -u www-data nextcloud-app php occ status

# تبديل وضع الصيانة
docker exec -u www-data nextcloud-app php occ maintenance:mode --on
docker exec -u www-data nextcloud-app php occ maintenance:mode --off

# إضافة الفهارس المفقودة
docker exec -u www-data nextcloud-app php occ db:add-missing-indices

# فحص الملفات (اكتشاف الملفات الجديدة)
docker exec -u www-data nextcloud-app php occ files:scan --all

# مسح ذاكرة التخزين المؤقت
docker exec -u www-data nextcloud-app php occ cache:clear

# قائمة المستخدمين
docker exec -u www-data nextcloud-app php occ user:list

تثبيت التطبيقات

hljs bash
# قائمة التطبيقات المتاحة
docker exec -u www-data nextcloud-app php occ app:list

# تثبيت التطبيقات
docker exec -u www-data nextcloud-app php occ app:install calendar
docker exec -u www-data nextcloud-app php occ app:install contacts
docker exec -u www-data nextcloud-app php occ app:install talk
docker exec -u www-data nextcloud-app php occ app:install onlyoffice

تحسين الأداء

التخزين المؤقت مع Redis

Redis مهيأ بالفعل في docker-compose.yml. أضف إلى تهيئة Nextcloud:

hljs bash
docker exec -u www-data nextcloud-app php occ config:system:set redis host --value="redis"
docker exec -u www-data nextcloud-app php occ config:system:set redis port --value=6379 --type=integer
docker exec -u www-data nextcloud-app php occ config:system:set redis password --value="كلمة-مرور-redis"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.distributed --value="\\OC\\Memcache\\Redis"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.locking --value="\\OC\\Memcache\\Redis"

إعدادات الأمان

hljs bash
# إضافة نطاق موثوق
docker exec -u www-data nextcloud-app php occ config:system:set trusted_domains 1 --value="cloud.example.com"

# الحماية من القوة الغاشمة
docker exec -u www-data nextcloud-app php occ config:system:set auth.bruteforce.protection.enabled --value=true --type=boolean

# فرض 2FA
docker exec -u www-data nextcloud-app php occ twofactorauth:enforce --on

نوصي باستخدام تخزين SSD لـ Nextcloud على خوادم REXE. أداء NVMe SSD يحدث فرقاً حاسماً في نقل الملفات الكبيرة.