Dieses Tutorial beschreibt die Einrichtung und Optimierung einer Nextcloud-Hub-35-Installation unter Debian 13. Die PHP-Verarbeitung erfolgt über PHP-FPM 8.4 in Verbindung mit Apache. Zusätzlich werden OPcache, APCu und Redis eingerichtet. Dadurch werden die typischen Warnungen der Nextcloud-Administrationsoberfläche zu PHP, Caching und transaktionalen Dateisperren behoben.
Umgebung
- Debian 13
- Nextcloud Hub 35
- Apache 2
- PHP 8.4 / PHP-FPM
Hinweis: Nach jeder Änderung an PHP-FPM-Konfigurationsdateien muss der Dienst neu gestartet werden (sudo systemctl restart php8.4-fpm). Das wird im Folgenden nicht bei jedem einzelnen Schritt wiederholt, sondern am Ende jedes Abschnitts kurz erwähnt.
1. PHP-Pakete installieren und PHP-FPM aktivieren
Für Nextcloud werden verschiedene PHP-Erweiterungen benötigt. Die Paketnamen ohne Versionsnummer verwenden die Debian-Metapakete und erleichtern spätere Aktualisierungen:
|
1 |
sudo apt install php-fpm php-cli php-common php-mysql php-curl php-gd php-xml php-zip php-mbstring php-intl php-bcmath php-gmp php-imagick php-apcu php-redis |
PHP-FPM aktivieren und starten:
|
1 |
sudo systemctl enable --now php8.4-fpm |
Status prüfen (erwartet: active (running)):
|
1 |
systemctl status php8.4-fpm --no-pager |
2. Apache für PHP-FPM konfigurieren
Benötigte Apache-Module aktivieren:
|
1 |
sudo a2enmod proxy_fcgi setenvif |
Von Debian bereitgestellte PHP-FPM-Konfiguration für Apache aktivieren:
|
1 |
sudo a2enconf php8.4-fpm |
Apache neu laden:
|
1 |
sudo systemctl reload apache2 |
Geladene Module prüfen (erwartet: proxy_fcgi_module (shared)):
|
1 |
apache2ctl -M | grep proxy_fcgi |
3. PHP-Grundeinstellungen für Nextcloud
Datei: /etc/php/8.4/fpm/php.ini
|
1 2 3 4 5 6 7 8 |
; ==== Nextcloud custom settings ==== date.timezone = Europe/Berlin memory_limit = 512M upload_max_filesize = 500M post_max_size = 600M max_execution_time = 300 file_uploads = On allow_url_fopen = On |
| Einstellung | Zweck |
|---|---|
date.timezone |
Zeitzone Europa/Berlin |
memory_limit |
bis zu 512 MB RAM pro PHP-Prozess |
upload_max_filesize |
Uploads bis 500 MB |
post_max_size |
HTTP-POST-Anfragen bis 600 MB |
max_execution_time |
max. Laufzeit eines PHP-Prozesses: 300 s |
file_uploads |
aktiviert PHP-Dateiuploads |
allow_url_fopen |
Zugriff auf entfernte Ressourcen über PHP-Stream-Wrapper |
Danach: sudo systemctl restart php8.4-fpm
4. OPcache konfigurieren
OPcache speichert kompilierten PHP-Code im Arbeitsspeicher, sodass PHP-Dateien nicht bei jeder Anfrage neu kompiliert werden müssen.
Datei: /etc/php/8.4/mods-available/opcache.ini
|
1 2 3 4 5 6 7 8 9 |
zend_extension=opcache.so opcache.jit=off opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=32 opcache.max_accelerated_files=10000 opcache.revalidate_freq=1 opcache.save_comments=1 |
opcache.interned_strings_buffer=32– ausreichend großer Puffer für die von Nextcloud verwendeten interned Stringsopcache.memory_consumption=128– Gesamt-OPcache-Speicher
Danach: sudo systemctl restart php8.4-fpm
Kontrolle (erwartet: opcache.interned_strings_buffer => 32 => 32):
|
1 |
php -i | grep opcache.interned_strings_buffer |
5. APCu als lokalen Nextcloud-Cache konfigurieren
APCu dient als schneller lokaler Cache im Arbeitsspeicher.
Prüfen, ob APCu installiert ist (erwartet: apcu):
|
1 |
php -m | grep -i apcu |
Konfiguration liegt unter /etc/php/8.4/fpm/conf.d/, Aktivierung prüfen:
|
1 |
ls -l /etc/php/8.4/fpm/conf.d/*apcu* |
APCu in Nextcloud als lokalen Cache setzen:
|
1 |
sudo -u www-data php /var/www/nextcloud/occ config:system:set memcache.local --value='\OC\Memcache\APCu' |
Kontrolle (erwartet: \OC\Memcache\APCu):
|
1 |
sudo -u www-data php /var/www/nextcloud/occ config:system:get memcache.local |
Danach: sudo systemctl restart php8.4-fpm
6. Redis für transaktionale Dateisperren konfigurieren
Redis übernimmt die transaktionalen Dateisperren und entlastet dadurch die Datenbank. Verbindung: 127.0.0.1:6379.
Erreichbarkeit prüfen (erwartet: PONG):
|
1 |
redis-cli -h 127.0.0.1 -p 6379 ping |
PHP-Erweiterung prüfen:
|
1 |
php -m | grep -i redis |
Redis als Locking-Cache setzen:
|
1 |
sudo -u www-data php /var/www/nextcloud/occ config:system:set memcache.locking --value='\OC\Memcache\Redis' |
Kontrolle (erwartet: \OC\Memcache\Redis):
|
1 |
sudo -u www-data php /var/www/nextcloud/occ config:system:get memcache.locking |
Zusätzlich muss die Redis-Verbindung in der Nextcloud-Konfiguration hinterlegt sein (siehe Abschnitt 7). Danach: sudo systemctl restart php8.4-fpm
7. Zentrale Nextcloud-Konfiguration (config.php)
Datei: /var/www/nextcloud/config/config.php
|
1 2 3 4 5 6 7 8 9 |
'default_phone_region' => 'DE', 'maintenance_window_start' => 4, 'memcache.local' => '\\OC\\Memcache\\APCu', 'memcache.locking' => '\\OC\\Memcache\\Redis', 'serverid' => '01', 'redis' => [ 'host' => '127.0.0.1', 'port' => 6379, ], |
Die serverid ermöglicht eine eindeutige Identifikation der PHP-Serverinstanz und beseitigt die entsprechende Warnung in der Nextcloud-Administrationsoberfläche.
8. Imagick und SVG-Unterstützung prüfen
Falls Nextcloud folgende Warnung anzeigt: „Das PHP-Modul ‚imagick‘ in dieser Instanz hat keine SVG-Unterstützung.”
Installierte Versionen ermitteln:
|
1 2 |
php --ri imagick | grep -E "imagick|ImageMagick" dpkg -l | grep -E 'imagemagick|php8.4-imagick|libmagick' |
Bei ImageMagick 7 wird das Kommando magick verwendet:
|
1 2 |
magick -version magick -list format | grep -i svg |
Die Installation zusätzlicher Pakete sollte erst nach dieser Prüfung erfolgen.
9. Fehlende Datenbank-Indizes ergänzen
|
1 2 |
cd /var/www/nextcloud sudo -u www-data php occ db:add-missing-indices |
Bei Bedarf zusätzlich fehlende Spalten und Primärschlüssel ergänzen:
|
1 2 3 |
sudo -u www-data php occ db:add-missing-columns sudo -u www-data php occ db:add-missing-primary-keys sudo -u www-data php occ db:add-missing-indices |
Alle occ-Befehle werden als Benutzer www-data ausgeführt, da Nextcloud unter diesem Benutzer läuft.
10. Dienste neu starten – Referenz
| Änderung an | Befehl |
|---|---|
| PHP-FPM / PHP-Erweiterungen | sudo systemctl restart php8.4-fpm |
| Apache-Konfiguration (klein) | sudo systemctl reload apache2 |
| Apache-Konfiguration (umfangreich) | sudo systemctl restart apache2 |
| Redis-eigene Konfiguration | sudo systemctl restart redis-server |
11. Abschlusskontrolle
| Prüfung | Befehl | Erwartetes Ergebnis |
|---|---|---|
| PHP-FPM Status | systemctl status php8.4-fpm --no-pager |
active (running) |
| Apache Status | systemctl status apache2 --no-pager |
active (running) |
| PHP-Version | php -v |
PHP 8.4.x |
| APCu | php -m | grep -i apcu |
apcu |
| Redis-PHP-Erweiterung | php -m | grep -i redis |
redis |
| Redis-Verbindung | redis-cli -h 127.0.0.1 -p 6379 ping |
PONG |
| OPcache-Puffer | php -i | grep opcache.interned_strings_buffer |
=> 32 => 32 |
| Nextcloud lokaler Cache | sudo -u www-data php /var/www/nextcloud/occ config:system:get memcache.local |
\OC\Memcache\APCu |
| Nextcloud Locking-Cache | sudo -u www-data php /var/www/nextcloud/occ config:system:get memcache.locking |
\OC\Memcache\Redis |
Ergebnis
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Apache │ │ FastCGI ▼ PHP-FPM 8.4 │ ├── OPcache ├── APCu ├── Redis-Erweiterung │ ▼ Nextcloud Hub 35 │ └── Redis 127.0.0.1:6379 |
PHP-FPM übernimmt die PHP-Verarbeitung der Nextcloud-Webanwendung. OPcache stellt den PHP-Bytecode-Cache bereit, APCu übernimmt den lokalen Nextcloud-Cache und Redis die transaktionalen Dateisperren. Damit sind die wesentlichen PHP- und Cache-Komponenten für eine Nextcloud-Hub-35-Installation unter Debian 13 eingerichtet.
by Speefak | blog.bogdancaraman.com