تنبيه أمني — ثغرتا 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 — إنشاء هيكل المشروع
أنشئ
/opt/nextcloud/docker-compose.ymlبـ MariaDB 10.11 وRedis 7-alpine وNextcloudnextcloud:34.0.4-apache.الخطوة 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 — تشغيل الحاويات
docker compose up -d docker compose logs -f appيستغرق الإقلاع الأول من دقيقتَين إلى 4 دقائق. انتظر رسالة
Nextcloud was successfully installed.الخطوة 4 — إعداد Nginx مع TLS
ثبّت Nginx وCertbot، أنشئ موقع Nextcloud بـ
client_max_body_size 10G;ورؤوس الوكيل، ثم شغّلcertbot --nginx -d cloud.نطاقك.com.الخطوة 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 لعمليات الرفع الكبيرة جداً
إخراج عمليات الرفع الثقيلة من الوكيل
يوصي 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 الخادم: خصّصه للنقل الثقيل.تقليل الأجزاء
الأمر
docker compose exec -u www-data app php occ config:system:set files.chunked_upload.max_size --type int --value 52428800يضبط الحجم على 50 ميبيبايت (القيمة بالبايت).ضبط nginx
في
location /، أضفproxy_request_buffering off;وproxy_send_timeout 3600s;، واحتفظ بـproxy_read_timeout 3600s;، ثمnginx -t && systemctl reload nginx.ضبط 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.التحقق والاختبار
يجب أن يُظهر الأمر
docker compose exec app php -i | grep ignore_user_abortالسطرignore_user_abort => On => On. ثم ارفع ملفاً بحجم عدة جيجابايت عبر النطاق الفرعي وتابعdocker compose logs -f app.اختيار ما يمر عبر 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 --offPHP 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 checkNextcloud 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 checkRecognize 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 في إعدادات التطبيق.