دليل النشر

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

انشر على VPS Cloud ←

دليل عملي

الاستضافة الذاتية

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

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

20 دقيقةً للقراءةعدد الخطوات: 11
المحتويات· تنبيه أمني — ثغرتا CVE لتجاوز المصادقة الثنائية (مايو 2026)1/25
  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رفع ملفات تتجاوز 40 جيجابايت خلف Cloudflare: التجميع الضائع
  11. 11الحدود الواجب مواءمتها، من شبكة CDN حتى PHP
  12. 12إعداد Nextcloud لعمليات الرفع الكبيرة جداً
  13. 13استكشاف أخطاء الرفع الكبير: الرسائل الفعلية
  14. 14نسخ Nextcloud احتياطياً — البيانات وقاعدة البيانات والإعداد
  15. 15النسخ الاحتياطي مع MariaDB 11 — mariadb-dump يحلّ محل mysqldump
  16. 16الخطوات التالية — المضي أبعد مع مثيلك
  17. 17‏Office 2021 في نهاية دورة الحياة: تفعيل التحرير التعاوني مع ‏Collabora Online أو ‏OnlyOffice
  18. 18‎Collabora Online أم ‎OnlyOffice: أيهما تختار؟
  19. 19أي محرر تختار؟
  20. 20‎Office 2021: ما الذي ينتهي، واستكشاف أخطاء Collabora
  21. 21تحديث Nextcloud في بيئة الإنتاج
  22. 22PHP 8.3: الترحيل ومتطلبات Nextcloud 35
  23. 23Nextcloud 35 : مسار التحديث وإصدارات PHP المدعومة
  24. 24التحقق من توافق تطبيقاتك قبل الانتقال إلى Nextcloud 35
  25. 25Recognize 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 قائم.

رفع ملفات تتجاوز 40 جيجابايت خلف Cloudflare: التجميع الضائع

لا يرسل Nextcloud الملف الكبير دفعة واحدة: يقسّمه العميل إلى أجزاء (chunks) تُودَع في مجلد مؤقت، ثم يطلب من الخادم تجميعها عبر طلب أخير MOVE …/‎.file.

تُظهر المشكلة nextcloud/server #65408، المفتوحة في 12 أكتوبر 2026 على Nextcloud 35، ما الذي ينكسر: ملف بحجم 43 جيجابايت تقريباً رُفع عبر رابط مشاركة عام، وقُبلت كل الأجزاء (201)، ثم استغرق التجميع قرابة 17 دقيقة. يقطع Cloudflare الاستجابة التي تتجاوز مهلة القراءة لديه (125 ثانية افتراضياً وفق توثيقه، ونحو 100 ثانية قاسها صاحب البلاغ عبر Cloudflare Tunnel) ويعيد الرمز 524.

نقطة الدخول الخاصة بالمشاركات العامة، publicremote‎.php، لا تستدعي ignore_user_abort(true) بخلاف remote‎.php: فيوقف PHP التجميع عند إغلاق الاتصال، ثم يحذف المتصفح الأجزاء بطلب DELETE. وما تزال الملفات بين 4 و5 جيجابايت تمرّ. حتى 22 أكتوبر 2026، المشكلة مفتوحة ولا يوجد إصلاح منشور.

الحدود الواجب مواءمتها، من شبكة CDN حتى PHP

  • جسم الطلب في Cloudflare — 100 ميجابايت لكل طلب في Free وPro، و200 ميجابايت في Business، وحتى 5 جيجابايت في Enterprise؛ وما زاد على ذلك يُقابَل بالرمز 413. يجب أن يبقى كل جزء دون هذا الحد.
  • حجم الأجزاء — القيمة الافتراضية لـ files‎.chunked_upload‎.max_size هي 104857600 بايت (100 ميبيبايت)، أي أكثر قليلاً من 100 ميجابايت: اخفضها إلى 50 ميبيبايت في Free أو Pro.
  • مهلة CDN — 125 ثانية، ويمكن رفعها حتى 6000 ثانية في Enterprise فقط: وهذا هو الحد الذي يتجاوزه التجميع.
  • nginx — يمرّر proxy_request_buffering off الجسم أثناء وصوله بدلاً من قراءته كاملاً؛ والقيمة الافتراضية لـ proxy_read_timeout هي 60 ثانية.
  • PHP — يقترح توثيق Nextcloud ضبط max_execution_time وmax_input_time على 3600؛ ويتيح ignore_user_abort = On إكمال التجميع بعد أن يقطع الوكيل الاتصال.

إعداد Nextcloud لعمليات الرفع الكبيرة جداً

  1. إخراج عمليات الرفع الثقيلة من الوكيل

    يوصي Cloudflare بنطاق فرعي غير مُمرَّر عبر الوكيل (DNS فقط) للطلبات التي تتجاوز 125 ثانية. أنشئ upload‎.your-domain‎.com بوضع DNS فقط، وأضفه عبر docker compose exec -u www-data app php occ config:system:set trusted_domains 1 --value=upload.your-domain.com، ثم certbot --nginx -d upload.your-domain.com. هذا الاسم يكشف عنوان IP الخادم: خصّصه للنقل الثقيل.

  2. تقليل الأجزاء

    الأمر docker compose exec -u www-data app php occ config:system:set files.chunked_upload.max_size --type int --value 52428800 يضبط الحجم على 50 ميبيبايت (القيمة بالبايت).

  3. ضبط nginx

    في location /، أضف proxy_request_buffering off; وproxy_send_timeout 3600s;، واحتفظ بـ proxy_read_timeout 3600s;، ثم nginx -t && systemctl reload nginx.

  4. ضبط PHP

    أنشئ /opt/nextcloud/php-uploads‎.ini يتضمن ignore_user_abort = On وmax_execution_time = 3600 وmax_input_time = 3600، واربطه بخدمة app: - ./php-uploads.ini:/usr/local/etc/php/conf.d/zz-uploads.ini:ro، ثم docker compose up -d app.

  5. التحقق والاختبار

    يجب أن يُظهر الأمر docker compose exec app php -i | grep ignore_user_abort السطر ignore_user_abort => On => On. ثم ارفع ملفاً بحجم عدة جيجابايت عبر النطاق الفرعي وتابع docker compose logs -f app.

  6. اختيار ما يمر عبر Cloudflare

    يمكن أن يبقى النطاق الرئيسي مُمرَّراً عبر الوكيل، ولا ينتقل إلى DNS فقط سوى النطاق الفرعي الخاص بالنقل الثقيل: راجع دليلنا حول وكيل Cloudflare.

استكشاف أخطاء الرفع الكبير: الرسائل الفعلية

Error 524: a timeout occurred — لم تصل الاستجابة على طلب MOVE …/‎.file الأخير ضمن مهلة Cloudflare. الحل: النطاق الفرعي غير المُمرَّر عبر الوكيل.

413 Request entity too large — جزءٌ يتجاوز سقف خطة Cloudflare أو client_max_body_size. الحل: تقليل files‎.chunked_upload‎.max_size.

Could not open file: web-file-upload-<id>/75 … file doesn't seem to exist — ورد في المشكلة #65408: كان التجميع ما يزال جارياً بينما حذف المتصفح الأجزاء. يمنع صاحب البلاغ طلب DELETE على /public‎.php/dav/uploads/؛ ثم تحذف المهمة UploadCleanup الأجزاء المهجورة بعد 24 ساعة. ومع nginx، المكافئ هو كتلة location ^~ /public.php/dav/uploads/ تحتوي على if ($request_method = DELETE) { return 403; } ونفس proxy_pass. حل مؤقت غير رسمي، يُزال فور صدور إصلاح.

504 Gateway Time-out أثناء MOVE — هنا nginx هو الذي يتخلى: يذكر توثيق Nextcloud التوجيه fastcgi_read_timeout مع PHP-FPM، وهنا proxy_read_timeout.

نسخ 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 مستقلة.

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

‏Office 2021 في نهاية دورة الحياة: تفعيل التحرير التعاوني مع ‏Collabora Online أو ‏OnlyOffice

وصل ‏Microsoft Office 2021 إلى نهاية دورة حياته في 13 أكتوبر 2026: لن تصدر أي تحديثات أمنية بعد الآن. للفرق التي تُحرّر ملفات ‏.docx‏ و‏.xlsx‏ و‏.pptx‏ بشكل تعاوني داخل ‏Nextcloud‏، تغطي مجموعتا مكتب مفتوحتا المصدر هذه الحاجة مباشرةً من واجهة الويب.

‏Collabora Online هو إصدار ‏LibreOffice‏ على الإنترنت، موزَّع بموجب ترخيص ‏AGPL‏. يتكامل مع ‏Nextcloud‏ عبر تطبيق *Nextcloud Office*‏ ويعمل في حاوية منفصلة مبنية على collabora/code:latest‏، يتواصل مع ‏Nextcloud‏ عبر ‏WebSocket‏.

‏OnlyOffice Document Server يُقدّم واجهة أقرب إلى ‏Microsoft Office‏ — قوائم شريطية مألوفة لمستخدمي ‏Windows‏. موزَّع بترخيص ‏AGPL‏ أيضاً، يتكامل عبر تطبيق *ONLYOFFICE*‏ من متجر تطبيقات ‏Nextcloud‏.

التثبيت عبر متجر تطبيقات ‏Nextcloud:

# Collabora Online
docker compose exec -u www-data app php occ app:install richdocuments

# OnlyOffice
docker compose exec -u www-data app php occ app:install onlyoffice

نشر ‏Docker‏ منفصل — مثال لـ ‏Collabora Online:

أضف هذه الخدمة إلى docker-compose‎.yml‏:

  collabora:
    image: collabora/code:latest
    restart: unless-stopped
    environment:
      domain: cloud\.\u0646\u0637\u0627\u0642\u0643\.com
      username: admin
      password: ${COLLABORA_PASSWORD}
      extra_params: --o:ssl.enable=false --o:ssl.termination=true
    ports:
      - '127.0.0.1:9980:9980'
    cap_add:
      - MKNOD

ثم اضبط رابط خادم ‏Collabora‏ في ‏Nextcloud‏ (الإدارة ← المكتب ← رابط خادم ‏Collabora Online: https://office.نطاقك‎.com‏).

البصمة في الذاكرة: تضيف ‏Collabora Online‏ حوالي +300 ميغابايت من ‏RAM‏ لكل عملية نشطة (عملية واحدة لكل مستند مفتوح في الوقت ذاته). ‏OnlyOffice‏ أكثر استهلاكاً بقليل: +400 ميغابايت لكل مثيل نشط. على ‏VPS‏ بذاكرة 2 غيغابايت، قيّد الاستخدام المتزامن بـ 2–3 مستندات أو انتقل إلى 4 غيغابايت.

الصيغ المدعومة: يقرأ كلا التطبيقَين ويكتبان صيغ ‏Microsoft Office‏ (‏‎.docx‏ و‏‎.xlsx‏ و‏‎.pptx‏) وصيغ ‏OpenDocument‏ (‏‎.odt‏ و‏‎.ods‏ و‏‎.odp‏).

‎Collabora Online أم ‎OnlyOffice: أيهما تختار؟

مرّر الجدول أفقيًا

المعيار‎Collabora Online‎OnlyOffice Docs
واجهة المستخدمواجهة ‎LibreOffice‎ المألوفة — منحنى تكيّف لمستخدمي ‎Windowsشريط طريقة عرض مطابق لـ ‎Microsoft Office‎ — تبنٍّ فوري
توافق ‎.docx/‎.xlsx/‎.pptx‎جيد؛ ‎.odt/‎.ods‎ ممتازوفيّ جداً للملفات الأصلية من ‎Microsoft
ذاكرة الوصول العشوائي المُقدَّرة~300 ميغابايت/عملية نشطة~400 ميغابايت/مثيل نشط
‎SSO/SAML‎ مع ‎Nextcloudتكامل أصلييتطلب إعداداً إضافياً
الاتصالات المتزامنةحسب الإصدار (CODE أو المؤسسي)محدودة (النسخة المجتمعية)
المجتمعمجتمع ‎LibreOffice‎ نشط، تحديثات متكررةصلب، مُوجَّه نحو توافق ‎Microsoft

أي محرر تختار؟

للفريق المختلط ‎Linux/Windows‎ العامل أساساً على ملفات ‎Microsoft Office‎، يُقلل ‎OnlyOffice‎ من احتكاك التبني. للفريق العامل بالفعل على ‎LibreOffice‎ أو ذي قيود ذاكرة صارمة، ‎Collabora Online‎ هو الاختيار الطبيعي. كلا التطبيقَين متوافقان مع ‎Nextcloud 35‎.

‎Office 2021: ما الذي ينتهي، واستكشاف أخطاء Collabora

وفق صفحة دورة الحياة لدى Microsoft، لم يعد Office 2021 (إصدارات Home and Business وHome and Student وProfessional، بما فيها نسخ Mac) ولا Office LTSC 2021 على Windows يتلقيان تصحيحات منذ 13 أكتوبر 2026؛ ولا ينتقل إلى الدعم الممتد سوى Office LTSC 2021 لأجهزة Mac.

عند تفعيل Collabora، تعني الرسالة «Could not establish connection to the Collabora Online server.» (الإدارة ← Office) أن Nextcloud لا يصل إلى العنوان المصرَّح به. اختبره من داخل الحاوية: docker compose exec app curl -sI https://office.your-domain.com/hosting/discovery. ولإعادة الضبط والتشخيص: docker compose exec -u www-data app php occ richdocuments:activate-config --wopi-url=https://office.your-domain.com؛ وإذا جاء الرد Failed to fetch discovery endpoint from … فالمشكلة في الشبكة أو TLS. ويزول التحذير «You have not configured the allow-list for WOPI requests» بإدخال عنوان IP خادم Collabora في قائمة السماح الخاصة بـ WOPI. مقارنة مفصلة: Collabora Online أم OnlyOffice.

تحديث 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 في 15 سبتمبر 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‎ السحابية لدينا من 4 GB ذاكرة عشوائية مع لقطات عند الطلب.