Nextcloud 21 mit PHP 8.0 nachrüsten und optimieren

Nextcloud 21 mit PHP 8.x

Um Nextcloud 21 mit der aktuellen PHP Version 8.x betreiben zu können gehen wir von einer Serverinstallation gemäß dieses Guides (Nextcloud Installationsanleitung) aus. Um von PHP 7.x auf PHP 8.x wechseln zu können melden Sie sich per SSH am Server an und wechseln in den priviligierten Benutzermodus.

sudo -s 

Um Zugriffe auf die Nextcloud während der Umstellung zu verhindern versetzen wir die Nextcloud in den Wartungsmodus und stoppen anschließen alle relevanten Serverdienste:

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
service nginx stop && service redis-server stop && service php7.4-fpm stop && service mariadb stop

Nachdem nun alle Dienste gestoppt sind entfernen wir das zuvor genutzte PHP:

apt remove --purge -y php* && apt autoremove -y

Sind alle Pakete entfernt, so installieren wir das Paket PHP 8.x:

apt update
apt install -y php8.0-fpm php8.0-gd php8.0-mysql php8.0-curl php8.0-xml php8.0-zip php8.0-intl php8.0-mbstring php8.0-bz2 php8.0-ldap php8.0-apcu php8.0-bcmath php8.0-gmp php8.0-imagick php8.0-igbinary php8.0-redis php8.0-smbclient php8.0-cli php8.0-common php8.0-opcache php8.0-readline imagemagick ldap-utils

Um erneut einen optimimierten Betrieb Ihrer Nextcloud sicherzustellen passen wir die Standardeinstellungen von PHP 8.x an:

cp /etc/php/8.0/fpm/pool.d/www.conf /etc/php/8.0/fpm/pool.d/www.conf.bak
cp /etc/php/8.0/cli/php.ini /etc/php/8.0/cli/php.ini.bak
cp /etc/php/8.0/fpm/php.ini /etc/php/8.0/fpm/php.ini.bak
cp /etc/php/8.0/fpm/php-fpm.conf /etc/php/8.0/fpm/php-fpm.conf.bak
cp /etc/php/8.0/mods-available/apcu.ini /etc/php/8.0/mods-available/apcu.ini.bak
cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak

sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/pm.max_children =.*/pm.max_children = 120/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/pm.start_servers =.*/pm.start_servers = 20/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/pm.min_spare_servers =.*/pm.min_spare_servers = 10/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/pm.max_spare_servers =.*/pm.max_spare_servers = 30/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;pm.max_requests =.*/pm.max_requests = 1000/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/allow_url_fopen =.*/allow_url_fopen = 1/" /etc/php/8.0/fpm/php.ini

sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/8.0/cli/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.0/cli/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.0/cli/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/8.0/cli/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/8.0/cli/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.0/cli/php.ini

sed -i "s/memory_limit = 128M/memory_limit = 2048M/" /etc/php/8.0/fpm/php.ini
sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/8.0/fpm/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.0/fpm/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.0/fpm/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/8.0/fpm/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/8.0/fpm/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.0/fpm/php.ini
sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/8.0/fpm/php.ini

sed -i '$aapc.enable_cli=1' /etc/php/8.0/mods-available/apcu.ini

sed -i "s/rights=\"none\" pattern=\"PS\"/rights=\"read|write\" pattern=\"PS\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"EPS\"/rights=\"read|write\" pattern=\"EPS\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"PDF\"/rights=\"read|write\" pattern=\"PDF\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"XPS\"/rights=\"read|write\" pattern=\"XPS\"/" /etc/ImageMagick-6/policy.xml

PHP 8.x ist nun installiert und optimiert, so dass wir den Dienst starten können.

service php8.0-fpm restart

Da wir nun nicht mehr PHP 7.x innerhalb des nginx-Webservers adressieren stellen wir diesen nun ebenfalls auf PHP 8.0 um. Dazu öffnen Sie die Datei

nano /etc/nginx/conf.d/http.conf

und ersetzen den Socketeintrag 7.4 durch 8.0:

[...]
upstream php-handler {
server unix:/run/php/php8.0-fpm.sock;
}
[...]

Starten Sie nun alle relevanten Serverdienste neu

service redis-server restart && service mariadb restart && service nginx restart
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

und genießen ab sofort Nextcloud 21 mit PHP 8.x. Vergessen sie bitte nicht, vorhandene Wartungsskripte wie bspw. ein „update.sh“ oder „restart.sh“ anzupassen – service php8.0-fpm restart ! Über eine Spende würden sich meine Frau, meine Zwillinge und ich sehr freuen!

© Carsten Rieger IT-Services