Perché Nextcloud sembra lento, e cosa lo corregge davvero
Perché Nextcloud sembra lento e cosa lo corregge: cron di sistema, APCu e Redis, OPcache e pool FPM, indici mancanti, anteprime in background, Collabora.

Quando un'istanza Nextcloud sembra lenta, il primo istinto è darle più CPU e memoria. Di solito non cambia nulla, perché il tempo se ne va altrove: job in background che girano nel posto sbagliato, una cache non configurata, lock sui file che colpiscono il database, una tabella a cui manca un indice. Questo è l'ordine in cui controlliamo le cose, con le impostazioni che correggono ciascuna. Tutto quanto segue vale sia che Nextcloud giri su un server semplice sia in container.
Partite da ciò che Nextcloud vi dice già
Nextcloud ha i propri controlli di salute. Eseguiteli prima di cambiare qualsiasi cosa:
sudo -u apache php occ setupchecks
sudo -u apache php occ status
Usate l'utente del web server (apache, www-data o nginx, a seconda del sistema). Gli stessi risultati compaiono in Impostazioni di amministrazione, Panoramica. Ogni avviso lì è un riscontro reale. Correggeteli per primi; diversi dei punti qui sotto compariranno in quella lista.
I job in background non devono viaggiare sui caricamenti di pagina
Nextcloud ha delle pulizie da fare: scansioni dei file, anteprime, notifiche, cleanup, scadenza delle attività. Per default, in modalità AJAX, esegue un job ogni volta che un utente carica una pagina. Gli utenti pagano le pulizie con i propri caricamenti di pagina, e su un'istanza tranquilla i job restano indietro.
Passate al cron di sistema:
sudo -u apache php occ background:cron
Poi eseguite cron.php ogni cinque minuti. Un timer systemd è più pulito di una riga in crontab perché registra i fallimenti:
# /etc/systemd/system/nextcloud-cron.service
[Service]
Type=oneshot
User=apache
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
# /etc/systemd/system/nextcloud-cron.timer
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target
Abilitatelo con systemctl enable --now nextcloud-cron.timer. Già che ci siete, impostate una finestra di manutenzione perché i job pesanti girino di notte:
sudo -u apache php occ config:system:set maintenance_window_start --type=integer --value=1
Il valore è un'ora in UTC; i job pesanti gireranno nelle quattro ore successive.
Caching e file locking
Senza una cache in memoria, Nextcloud chiede al database le stesse cose più e più volte. Senza un backend di locking adeguato, ogni operazione sui file prende un lock anche nel database. Configurate entrambi in config.php:
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => '/run/redis/redis.sock',
'port' => 0,
],
APCu è la cache locale veloce dentro ogni processo PHP. Redis conserva lo stato condiviso e i lock sui file. Usate un socket Unix se Redis sta sulla stessa macchina, e assicuratevi che l'utente del web server possa aprirlo.
APCu va abilitato anche per la riga di comando, altrimenti occ si lamenterà:
; /etc/php.d/40-apcu.ini
apc.enable_cli=1
PHP stesso: OPcache e il pool FPM
Nextcloud è una grande applicazione PHP. Senza abbastanza OPcache, PHP ne ricompila parti a ogni richiesta. Valori tipici di partenza:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
setupchecks vi dirà se il buffer delle interned strings è troppo piccolo. Poi dimensionate il pool PHP-FPM sulla memoria che avete davvero: pm.max_children moltiplicato per la memoria tipica di un worker PHP deve stare nella RAM lasciando spazio al database e a Redis. Misurate la memoria reale di un worker sotto carico prima di scegliere, invece di copiare un numero da un forum.
Il database: indici e big integer
Gli aggiornamenti a volte aggiungono indici e colonne che le installazioni esistenti non ricevono automaticamente, perché crearli su una tabella grande richiede tempo. Nextcloud lascia quel passo a voi:
sudo -u apache php occ db:add-missing-indices
sudo -u apache php occ db:add-missing-columns
sudo -u apache php occ db:add-missing-primary-keys
sudo -u apache php occ db:convert-filecache-bigint
Eseguiteli dopo ogni aggiornamento maggiore, in una finestra di manutenzione, perché possono bloccare tabelle grandi. Un indice mancante sulla tabella della file cache è una delle ragioni più comuni per cui un'istanza grande sembra lenta nello sfogliare le cartelle.
Anteprime: generatele in anticipo
Le miniature si generano la prima volta che qualcuno apre una cartella. Una cartella di foto ad alta risoluzione significa una prima visita lenta per chi ci arriva per primo. Due cose aiutano. Limitate le dimensioni delle anteprime:
sudo -u apache php occ config:system:set preview_max_x --value=2048 --type=integer
sudo -u apache php occ config:system:set preview_max_y --value=2048 --type=integer
E, se i vostri utenti archiviano molte immagini, usate l'app Preview Generator per creare le anteprime nel job in background invece che a richiesta.
L'editor office è un carico di lavoro a sé
La modifica nel browser con Collabora gira come servizio separato. Nextcloud gli manda il documento, e Collabora lo renderizza e lo modifica. Quando la gente dice «Nextcloud è lento» mentre modifica, il collo di bottiglia di solito è Collabora, non Nextcloud. Osservate la sua CPU e memoria separatamente, mentre più persone modificano insieme fogli di calcolo grandi, e dimensionatelo da quelle misurazioni.
Due punti di configurazione contano sia per la velocità sia per la sicurezza. Puntate Nextcloud a Collabora su un percorso veloce e vicino. E limitate quali server possono parlare con l'interfaccia WOPI di Collabora:
sudo -u apache php occ config:app:set richdocuments wopi_allowlist --value="10.0.0.0/24"
Usate lì il range di indirizzi del vostro server Nextcloud, così solo il vostro Nextcloud può aprire documenti attraverso il vostro editor.
Bloccate ciò che gira
Se eseguite Nextcloud in container, bloccate ogni immagine (Nextcloud, database, Redis, Collabora) a un tag che avete scelto voi.
L'ordine, in breve
- occ setupchecks e correggete ogni avviso.
- Cron di sistema tramite un timer, più una finestra di manutenzione.
- APCu in locale, Redis per il locking e la cache condivisa.
- OPcache dimensionata correttamente e un pool FPM dimensionato da misurazioni.
- Indici, colonne e chiavi mancanti aggiunti dopo ogni aggiornamento.
- Anteprime limitate e generate in background.
- Collabora misurato e dimensionato come servizio a sé, con una allow list WOPI.
- Ogni componente bloccato a una versione che avete scelto voi.
Solo dopo tutto questo aggiungere hardware vi dice qualcosa di utile. Gestiamo Nextcloud con Collabora in questo modo per i nostri clienti su istanze dedicate, e saremo lieti di guardare la vostra.
Related (rows[1])
Correlati: Documenti office gestiti su Nextcloud · Archivio email privato con ricerca AI locale
Pubblicato il 7 ottobre 2026.
Tutte le note dal campo