Eine langsame Nextcloud frustriert Nutzer. Mit den richtigen Optimierungen läuft Ihre private Cloud deutlich schneller. Dieser Artikel zeigt die wichtigsten Tuning-Maßnahmen.
Performance-Analyse
Aktuelle Performance prüfen
# Admin-Einstellungen prüfen
# https://ihre-nextcloud.de/settings/admin/overview
# Grundlegende System-Informationen
cat /var/www/nextcloud/config/config.phpHäufige Probleme
Typische Ursachen für langsame Nextcloud:
- Kein Memory-Caching (Redis/APCu)
- PHP-OPcache nicht aktiviert
- Datenbank nicht optimiert
- Synchronisation großer Dateien
- Fehlende Indizes in DatenbankPHP-OPcache aktivieren
OPcache Konfiguration
# /etc/php/8.2/fpm/conf.d/10-opcache.ini
opcache.enable=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=256
opcache.save_comments=1
opcache.revalidate_freq=1PHP-FPM Tuning
# /etc/php/8.2/fpm/pool.d/www.conf
; Prozess-Management
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
; Speicher pro Prozess
php_admin_value[memory_limit] = 512M
php_admin_value[upload_max_filesize] = 10G
php_admin_value[post_max_size] = 10GPHP-FPM neu starten
systemctl restart php8.2-fpmRedis-Caching einrichten
Redis installieren
apt install redis-server php-redisRedis konfigurieren
# /etc/redis/redis.conf
# Socket-Verbindung (schneller)
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770
# Speicher begrenzen
maxmemory 512mb
maxmemory-policy allkeys-lru
# Persistenz (optional deaktivieren für reinen Cache)
save ""Redis-Benutzer
usermod -a -G redis www-data
systemctl restart redis-serverNextcloud für Redis konfigurieren
// /var/www/nextcloud/config/config.php
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 0.0,
],APCu für lokalen Cache
# /etc/php/8.2/fpm/conf.d/20-apcu.ini
apc.shm_size=128M
apc.enable_cli=1Datenbank optimieren
MySQL/MariaDB Tuning
# /etc/mysql/mariadb.conf.d/99-nextcloud.cnf
[mysqld]
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 1
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# Query-Cache (für MariaDB)
query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M
# Verbindungen
max_connections = 200
wait_timeout = 600
# Performance
tmp_table_size = 64M
max_heap_table_size = 64MFehlende Indizes hinzufügen
# Als www-data ausführen
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indicesDatenbank-Wartung
# Tabellen optimieren
sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint
# Datenbank reparieren
mysqlcheck -u root -p --optimize nextcloudPostgreSQL Alternative
-- postgresql.conf Tuning
shared_buffers = 256MB
effective_cache_size = 1GB
maintenance_work_mem = 128MB
work_mem = 16MBNginx-Optimierung
Nginx Konfiguration
# /etc/nginx/sites-available/nextcloud
upstream php-handler {
server unix:/var/run/php/php8.2-fpm.sock;
}
server {
listen 443 ssl http2;
server_name cloud.example.com;
root /var/www/nextcloud;
# Gzip-Kompression
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/javascript application/json text/css text/plain;
# Client-Body-Größe
client_max_body_size 10G;
client_body_timeout 300s;
fastcgi_buffers 64 4K;
# Statische Dateien cachen
location ~* \.(?:css|js|woff2?|svg|gif|png|jpg|ico)$ {
expires 6M;
add_header Cache-Control "public, immutable";
}
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass php-handler;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
fastcgi_read_timeout 300;
}
}Cron-Jobs optimieren
Webcron zu System-Cron
# Crontab für www-data
crontab -u www-data -e
# Alle 5 Minuten (statt Webcron)
*/5 * * * * php -f /var/www/nextcloud/cron.phpIn config.php aktivieren
'backgroundjobs_mode' => 'cron',Systemd-Timer Alternative
# /etc/systemd/system/nextcloudcron.service
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process# /etc/systemd/system/nextcloudcron.timer
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.targetsystemctl enable --now nextcloudcron.timerVorschaubilder optimieren
Preview-Generator App
# App installieren
sudo -u www-data php occ app:install previewgenerator
# Konfiguration
sudo -u www-data php occ config:app:set previewgenerator squareSizes --value="32 256"
sudo -u www-data php occ config:app:set previewgenerator widthSizes --value="256 384"
sudo -u www-data php occ config:app:set previewgenerator heightSizes --value="256"
# Vorschau generieren
sudo -u www-data php occ preview:generate-allPreview-Einstellungen
// config.php
'enable_previews' => true,
'preview_max_x' => 2048,
'preview_max_y' => 2048,
'preview_max_filesize_image' => 50,
'enabledPreviewProviders' => [
'OC\Preview\PNG',
'OC\Preview\JPEG',
'OC\Preview\GIF',
'OC\Preview\HEIC',
'OC\Preview\Movie',
'OC\Preview\PDF',
],Cron für Preview-Generator
# Crontab
*/10 * * * * sudo -u www-data php /var/www/nextcloud/occ preview:pre-generateDateisystem optimieren
Dateiverzeichnis auf SSD
# Datenverzeichnis verschieben
systemctl stop apache2
mv /var/www/nextcloud/data /mnt/ssd/nextcloud-data// config.php
'datadirectory' => '/mnt/ssd/nextcloud-data',Dateisystem-Optionen
# /etc/fstab - noatime reduziert Schreibzugriffe
/dev/sda1 /mnt/ssd ext4 defaults,noatime 0 2Große Dateien auslagern
# Externe Storage-App für große Dateien
sudo -u www-data php occ app:enable files_externalNetzwerk-Optimierung
HTTP/2 aktivieren
listen 443 ssl http2;Keep-Alive
keepalive_timeout 65;
keepalive_requests 100;Performance-Monitoring
Nextcloud-Logs analysieren
# Slow-Queries finden
tail -f /var/www/nextcloud/data/nextcloud.log | grep -i slowMySQL Slow-Query-Log
# /etc/mysql/mariadb.conf.d/99-nextcloud.cnf
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1PHP-FPM Status
# In Nginx-Config
location ~ ^/status$ {
include fastcgi_params;
fastcgi_pass php-handler;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}# PHP-FPM Pool
pm.status_path = /statusBenchmarks
Vorher/Nachher Vergleich
| Aktion | Ohne Tuning | Mit Tuning | |--------|-------------|------------| | Dashboard laden | 3.5s | 0.8s | | Ordner öffnen | 2.0s | 0.4s | | Datei-Upload 100MB | 45s | 20s | | Suche | 5.0s | 1.2s |
Typische Verbesserungen
Redis-Caching: 40-60% schneller
OPcache: 20-30% schneller
DB-Optimierung: 30-50% schneller
Preview-Generator: Sofortige VorschauCheckliste
□ PHP-OPcache aktiviert und konfiguriert
□ Redis oder Memcached für Caching
□ APCu für lokalen Cache
□ Datenbank-Indizes hinzugefügt
□ MySQL/MariaDB InnoDB-Tuning
□ System-Cron statt Webcron
□ Preview-Generator installiert
□ Nginx/Apache optimiert
□ HTTP/2 aktiviert
□ Datenverzeichnis auf SSD
□ PHP-FPM Pool-Größe angepasstFazit
Nextcloud-Performance hängt von vielen Faktoren ab. Redis-Caching, OPcache und Datenbank-Tuning bringen die größten Verbesserungen. Investieren Sie in eine SSD für das Datenverzeichnis und nutzen Sie den Preview-Generator für schnellere Bildvorschauen. Mit diesen Optimierungen läuft Ihre Nextcloud spürbar schneller.