دليل النشر

استضافة Nextcloud على VPS: دليل NC 35 وPHP 8.3 وMariaDB 11

انشر على VPS Cloud ←

دليل عملي

استضافة Nextcloud على VPS: دليل NC 35 وPHP 8.3 وMariaDB 11

الاستضافة الذاتية19 دقيقةً للقراءةعدد الخطوات: 5

Nextcloud من أكثر التطبيقات نشراً ذاتياً وأكثرها سوءاً في الإعداد. بين المثيلات التي تعمل دون Redis وبطء مؤلم، ودون TLS مُجبَر وبيانات مكشوفة، وتحديث مايو 2026 الذي يصلح ثغرتَي تجاوز المصادقة الثنائية الحرجتَين، ثم انحدارات NC 34.0.0 الجديدة، كل إصدار يجلب مخاطره الخاصة. يضيف Nextcloud 35 (Hub 26 Summer، صدر في 16 سبتمبر 2026) قيدَين رئيسيَّين: PHP 8.3 حد أدنى إلزامي (PHP 8.2 مهجور)، وإزالة mysqldump من MariaDB 11. يأخذك هذا الدليل من التثبيت الكامل إلى التحقق الأمني، ويغطي تصحيحات NC 34.0.2 ومسار NC 35 والأخطاء الخمسة الأكثر شيوعاً.

المحتويات· تنبيه أمني — ثغرتا CVE لتجاوز المصادقة الثنائية (مايو 2026)1/17
  1. 01تنبيه أمني — ثغرتا CVE لتجاوز المصادقة الثنائية (مايو 2026)
  2. 02NC 34.0.0 — تطبيقات موصى بها غائبة عند أول تشغيل
  3. 03NC 34.0.0 — قيد مُضاعَف على PostgreSQL وانفجار CPU
  4. 04المتطلبات والأبعاد
  5. 05تثبيت Nextcloud باستخدام Docker Compose
  6. 06التحقق من تأثر مثيلك بثغرات CVE للمصادقة الثنائية
  7. 07تحسين الأداء مع Redis وOPcache
  8. 08الأخطاء الخمسة الأكثر شيوعاً في Nextcloud
  9. 09التحقق من فاعلية Redis مع occ
  10. 10نسخ Nextcloud احتياطياً — البيانات وقاعدة البيانات والإعداد
  11. 11النسخ الاحتياطي مع MariaDB 11 — mariadb-dump يحلّ محل mysqldump
  12. 12الخطوات التالية — المضي أبعد مع مثيلك
  13. 13تحديث Nextcloud في بيئة الإنتاج
  14. 14PHP 8.3: الترحيل ومتطلبات Nextcloud 35
  15. 15Nextcloud 35 : مسار التحديث وإصدارات PHP المدعومة
  16. 16التحقق من توافق تطبيقاتك قبل الانتقال إلى Nextcloud 35
  17. 17Recognize v7 — تصحيح خطأ 'sh: exec: line 1' الصامت

تنبيه أمني — ثغرتا CVE لتجاوز المصادقة الثنائية (مايو 2026)

في مايو 2026، كُشف عن ثغرتَين حرجتَين في Nextcloud:

CVE-2026-45690 (درجة CVSS 5.9، مكشوفة في 15 مايو 2026): يمكن لمهاجم يملك اسم مستخدم وكلمة مرور تجاوز التحقق من المصادقة الثنائية عبر HTTP Basic Auth.

CVE-2026-45691 (درجة CVSS 5.9، مكشوفة في 13 مايو 2026): نفس الفئة، يُستغَل عبر رمز DAV Bearer — بروتوكول WebDAV المستخدم من عملاء المزامنة.

كلتا الثغرتين مُصلَّحتان في Nextcloud 32.0.9 و33.0.3. الفروع 34.x وما فوق غير متأثرة بهاتين الثغرتَين.

NC 34.0.0 — تطبيقات موصى بها غائبة عند أول تشغيل

يُدخل Nextcloud 34.0.0 انحداراً في معالج التثبيت: التطبيقات الموصى بها (Notes وCalendar وContacts) غير معروضة أثناء الإعداد الأولي.

التحقق من وجود التطبيقات:

docker compose exec -u www-data app php occ app:list | grep -E 'calendar|contacts|notes'

التثبيت اليدوي:

docker compose exec -u www-data app php occ app:install calendar
docker compose exec -u www-data app php occ app:install contacts
docker compose exec -u www-data app php occ app:install notes

التوصية: ابدأ مباشرةً بـ 34.0.2 أو أعلى بدلاً من 34.0.0. المصادر: issues GitHub #61313 و#61611.

NC 34.0.0 — قيد مُضاعَف على PostgreSQL وانفجار CPU

على المثيلات التي تستخدم PostgreSQL، يمكن أن تُخلّف هجرة Nextcloud 34.0.0 المنقطعة قيداً مُضاعَفاً على جدول oc_filecache_extended يُفجّر CPU وRAM.

الإصلاح:

docker compose exec -u www-data app php occ files:cleanup
docker compose exec -u www-data app php occ db:add-missing-indices
docker compose exec -u www-data app php occ db:add-missing-columns

المصدر: issue GitHub #61597. إذا استمرت الأخطاء، انتقل مباشرةً إلى 34.0.2.

المتطلبات والأبعاد

التهيئة الموصى بها: VPS بـ 2 غيغابايت RAM (4 غيغابايت لأكثر من 5 مستخدمين)، SSD إلزامي، 20 غيغابايت كحد أدنى للتثبيت، Ubuntu 22.04 أو Debian 12، Docker Engine ≥ 24، اسم نطاق وشهادة TLS، المنفذان 80 و443 مفتوحان.

تثبيت Nextcloud باستخدام Docker Compose

  1. الخطوة 1 — إنشاء هيكل المشروع

    أنشئ /opt/nextcloud/docker-compose.yml بـ MariaDB 10.11 وRedis 7-alpine وNextcloud nextcloud:34.0.4-apache.

  2. الخطوة 2 — إنشاء ملف البيئة

    cat > /opt/nextcloud/.env << 'EOF'
    MYSQL_ROOT_PASSWORD=كلمة_مرور_قوية_للجذر
    MYSQL_PASSWORD=كلمة_مرور_قوية_لـnextcloud
    REDIS_PASSWORD=كلمة_مرور_قوية_لـredis
    NEXTCLOUD_ADMIN_USER=admin
    NEXTCLOUD_ADMIN_PASSWORD=كلمة_مرور_قوية_للمشرف
    NEXTCLOUD_DOMAIN=cloud.نطاقك.com
    EOF
  3. الخطوة 3 — تشغيل الحاويات

    docker compose up -d
    docker compose logs -f app

    يستغرق الإقلاع الأول من دقيقتَين إلى 4 دقائق. انتظر رسالة Nextcloud was successfully installed.

  4. الخطوة 4 — إعداد Nginx مع TLS

    ثبّت Nginx وCertbot، أنشئ موقع Nextcloud بـ client_max_body_size 10G; ورؤوس الوكيل، ثم شغّل certbot --nginx -d cloud.نطاقك.com.

  5. الخطوة 5 — ضبط النطاق الموثوق في Nextcloud

    docker compose exec -u www-data app php occ config:system:set trusted_domains 0 \
      --value=cloud.نطاقك.com
    docker compose exec -u www-data app php occ config:system:set overwrite.cli.url \
      --value=https://cloud.نطاقك.com

التحقق من تأثر مثيلك بثغرات CVE للمصادقة الثنائية

التحقق من الإصدار الحالي:

docker compose exec -u www-data app php occ status

الإصدارات المتأثرة: كل 32.x < 32.0.9 و33.x < 33.0.3. الفروع 34.x وما فوق غير متأثرة بهاتين الثغرتَين.

التحديث إلى الإصدار المُصلَّح (الفرع 32 → 32.0.9، الفرع 33 → 33.0.3):

# الفرع 32:
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:32.0.9-apache|g' docker-compose.yml
# الفرع 33:
# sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:33.0.3-apache|g' docker-compose.yml
docker compose pull app && docker compose up -d app
docker compose exec -u www-data app php occ upgrade

تحسين الأداء مع Redis وOPcache

Nextcloud بدون Redis بطيء. يضطلع Redis بدورَين حاسمَّين: تخزين الجلسات مؤقتاً والقفل الموزَّع الذي يمنع التعارضات.

تحقق من اتصال Redis:

docker compose exec -u www-data app php occ config:system:get redis

الأخطاء الخمسة الأكثر شيوعاً في Nextcloud

1. Redis غير مهيَّأ — بطء وتعارضات مزامنة.
2. overwrite.cli.url يشير إلى http:// — روابط مشاركة غير آمنة.
3. trusted_domains مهيَّأ بشكل خاطئ — رسالة 'untrusted domain'.
4. حجم الرفع محدود بـ 2 ميغابايت — أضف client_max_body_size 10G في Nginx.
5. تحديثات أمان مهملة — هيّئ إشعارات التحديث.

التحقق من فاعلية Redis مع occ

docker compose exec -u www-data app php occ status
docker compose exec -u www-data app php occ check
docker compose exec -u www-data app php occ config:system:get redis

أمر occ check يُدرج جميع مشاكل التهيئة المكتشفة. إنه أول تشخيص يجب تشغيله على أي مثيل Nextcloud قائم.

نسخ Nextcloud احتياطياً — البيانات وقاعدة البيانات والإعداد

تخزّن Nextcloud بياناتها في ثلاثة أماكن — يجب نسخ الثلاثة احتياطياً:

1. قاعدة بيانات MariaDB: البيانات الوصفية للملفات والمستخدمون والمشاركات.
2. حجم nextcloud: كود PHP والتطبيقات المثبَّتة وconfig/config.php.
3. ملفات المستخدمين.

docker compose exec -u www-data app php occ maintenance:mode --on
# MariaDB 10.x:
docker compose exec -T db mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud | gzip > /opt/nextcloud/backups/db-$(date +%Y%m%d).sql.gz
# MariaDB 11+: استخدم mariadb-dump بدلاً من ذلك
docker compose exec -u www-data app php occ maintenance:mode --off

النسخ الاحتياطي مع MariaDB 11 — mariadb-dump يحلّ محل mysqldump

منذ MariaDB 11.0، أُزيلت ثنائيات mysqldump وmysql من صورة Docker الرسمية. تتوفر الآن فقط mariadb-dump وmariadb. السكريبتات التي لا تزال تستخدم mysqldump مع mariadb:11.x ستفشل بصمت.

التحقق من إصدار MariaDB:

docker compose exec db mariadb --version

سكريبت نسخ احتياطي متوافق مع MariaDB 11+:

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/opt/nextcloud/backups
mkdir -p $BACKUP_DIR

docker compose exec -u www-data app php occ maintenance:mode --on

# mariadb-dump يحلّ محل mysqldump على MariaDB 11+
docker compose exec -T db \
  mariadb-dump -u nextcloud -p${MYSQL_PASSWORD} nextcloud \
  | gzip > $BACKUP_DIR/db-$DATE.sql.gz

if gzip -t $BACKUP_DIR/db-$DATE.sql.gz 2>/dev/null; then
  echo "النسخ الاحتياطي سليم: $BACKUP_DIR/db-$DATE.sql.gz"
else
  echo "خطأ: الأرشيف تالف أو فارغ"
  docker compose exec -u www-data app php occ maintenance:mode --off
  exit 1
fi

docker compose cp app:/var/www/html/config/config.php $BACKUP_DIR/config-$DATE.php
docker compose exec -u www-data app php occ maintenance:mode --off

الاستعادة:

gunzip -c $BACKUP_DIR/db-$DATE.sql.gz | \
  docker compose exec -T db mariadb -u nextcloud -p${MYSQL_PASSWORD} nextcloud

ملاحظة: إذا بقيت على mariadb:10.11 (لا تزال مدعومة، نهاية الدعم في فبراير 2028 / EOL)، فإن كلاً من mysqldump وmariadb-dump يعملان بشكل طبيعي. لا تؤثر إزالة mysqldump إلا على MariaDB 11.0 وما فوق. بيد أن اعتماد mariadb-dump الآن يجعل سكريبتاتك جاهزة للهجرة المستقبلية.

الخطوات التالية — المضي أبعد مع مثيلك

بعد تثبيت Nextcloud وتأمينها:

تفعيل Talk (مؤتمرات الفيديو): ثبّت تطبيق Nextcloud Talk من واجهة الإدارة.

تفعيل OnlyOffice أو Collabora Online: هذه التطبيقات تحتاج حاوية Docker مستقلة.

مراقبة مثيلك: ضبط التنبيهات في الإدارة → المراقبة.

تحديث Nextcloud في بيئة الإنتاج

يجب دائماً تشغيل التحديثات في وضع الصيانة:

docker compose exec -u www-data app php occ maintenance:mode --on
# MariaDB 10.x:
docker compose exec -T db mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud \
  | gzip > /opt/nextcloud/backups/pre-update-db.sql.gz
# MariaDB 11+: استبدل mysqldump بـ mariadb-dump
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.4-apache|g' docker-compose.yml
docker compose pull app && docker compose up -d app
docker compose exec -u www-data app php occ upgrade
docker compose exec -u www-data app php occ maintenance:mode --off

PHP 8.3: الترحيل ومتطلبات Nextcloud 35

يجعل Nextcloud 35 PHP 8.3 إلزامياً — PHP 8.2 لم يعد مدعوماً. إذا كنت تستخدم تثبيتاً محلياً أو صورة Docker مقيَّدة بـ PHP 8.2، يجب ترحيل PHP قبل الترقية إلى NC 35.

التحقق من إصدار PHP:

# في Docker
docker compose exec app php --version

في Docker — صورة nextcloud:35.x-apache تتضمن PHP 8.3+ بالفعل. ما عليك سوى تحديث الوسم:

image: nextcloud:35.0.0-apache

الامتدادات المطلوبة لـ Nextcloud 35: gd/imagick وredis وintl وbcmath وgmp وzip وopcache.

التحقق من الامتدادات المفقودة:

docker compose exec -u www-data app php occ check

Nextcloud 35 : مسار التحديث وإصدارات PHP المدعومة

صدر Nextcloud 35.0.0 في 16 سبتمبر 2026 (Hub 26 Summer). يدعم PHP 8.3 (الحد الأدنى الإلزامي) و8.4 و8.5 (موصى به). PHP 8.2 غير مدعوم — مثيل يعمل على PHP 8.2 لن يشتغل بعد الترقية إلى NC 35.

أفضل ممارسة — أعلّق على وسم صريح:

image: nextcloud:35.0.0-apache

مسار التحديث التسلسلي الإلزامي: v33 → v34 → v35

# الخطوة 1: الترقية إلى NC 34
docker compose exec -u www-data app php occ maintenance:mode --on
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.4-apache|g' docker-compose.yml
docker compose pull app && docker compose up -d app
docker compose exec -u www-data app php occ upgrade
docker compose exec -u www-data app php occ maintenance:mode --off

# الخطوة 2: الترقية إلى NC 35
docker compose exec -u www-data app php occ maintenance:mode --on
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:35.0.0-apache|g' docker-compose.yml
docker compose pull app && docker compose up -d app
docker compose exec -u www-data app php occ upgrade
docker compose exec -u www-data app php occ maintenance:mode --off

تحقق من مصفوفة التوافق على apps.nextcloud.com قبل كل ترقية.

التحقق من توافق تطبيقاتك قبل الانتقال إلى Nextcloud 35

قبل الترقية إلى NC 35، شغّل فحص التوافق المدمج:

docker exec -u www-data <اسم_الحاوية> php occ app:check-platform-compatibility

عطّل التطبيقات غير المتوافقة قبل الترقية. بعدها، شغّل occ check دائماً:

docker compose exec -u www-data app php occ check

Recognize v7 — تصحيح خطأ 'sh: exec: line 1' الصامت

يمكن أن يفشل تطبيق Recognize بصمت بخطأ:

Classifier process output: sh: exec: line 1: recognize/bin/node: not found

هذا الخطأ لا يظهر في واجهة الإدارة — فقط في سجلات الحاوية.

التشخيص:

docker compose logs app | grep -i recognize
docker compose exec app sh -c "ls -la /var/www/html/apps/recognize/bin/"
docker compose exec app uname -m

الإصلاح على x86_64:

docker compose exec -u www-data app php occ config:app:set recognize \
  tensorflow.gpu_enabled --value=false
docker compose exec -u www-data app php occ config:app:set recognize \
  node_binary --value=""
docker compose exec -u www-data app php occ recognize:classify

على ARM64: فعّل وضع WASM في إعدادات التطبيق.

‏‎VPS‎ موثوق لمثيل ‎Nextcloud‎ الخاص بك

‏يحتاج ‎Nextcloud‎ إلى خادم ‎VPS‎ بأقراص ‎SSD‎ وعرض نطاق ترددي جيد لمزامنة سلسة للملفات. تبدأ خطط ‎VPS‎ السحابية لدينا من 2 جيجابايت ذاكرة عشوائية مع لقطات يومية.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة