Unser Weihnachtsangebot 2024

SERVERWARTUNG ALL-IN!
Wir warten Ihre Nextcloud- und Konferenzsysteme, patchen und monitoren diese.

12 für 10 Monate
ab € 2.000,- p.a. im Voraus
Das Angebot ist gültig bis 31.12.2024, der Preis gilt netto, zzgl. USt..

Nextcloud: Update PHP-FPM 8.3

Mit den neueren Nextcloud Versionen (bspw. Hub 9) kann und sollte PHP 8.3 (php8.3-fpm) genutzt werden. Wir zeigen Ihnen, wie Sie von PHP 8.0 oder PHP8.1 oder PHP 8.2 zu PHP 8.3 wechseln. Bevor Sie beginnnen erstellen Sie jeoch zuerst eine Sicherung bspw. mittels Borg o.ä. (Sicherung, Snapshot, Klon o.Ä.). Melden Sie sich per SSH an Ihrem Server an und wechseln in den priviligierten Benutzermodus:

sudo -s

Aktualisieren und bereinigen Sie das System:

apt update && apt -y upgrade && apt -y autoremove

Um das notwendige PHP-Repository von Ondrej zu nutzen müssen diese Voraussetzungen sichergestellt sein:

apt install -y lsb-release gnupg2 ca-certificates apt-transport-https software-properties-common

Fügen Sie nun das Repository hinzu:

add-apt-repository ppa:ondrej/php

Bestätigen Sie das Einbinden des Repositories mit ENTER.

Um Ihre bestehende(n) Instanz(en) nicht zu beeinträchtigen können Sie PHP 8.2 parallel installieren. Führen Sie dazu die folgenden Befehle aus:

apt update && apt install -y php-common \
php8.3-{fpm,gd,curl,xml,zip,intl,mbstring,bz2,ldap,apcu,bcmath,gmp,imagick,igbinary,mysql,redis,smbclient,sqlite3,cli,common,opcache,readline} \
imagemagick libmagickcore-6.q16-6-extra --allow-change-held-packages
apt update && apt install -y php-common \
php8.3-{fpm,gd,curl,xml,zip,intl,mbstring,bz2,ldap,apcu,bcmath,gmp,imagick,igbinary,pgsql,redis,smbclient,sqlite3,cli,common,opcache,readline} \
imagemagick libmagickcore-6.q16-6-extra --allow-change-held-packages

Optional (bei einem geplanten Einsatz von Samba- und/oder cifs-Shares oder einer LDAP(s)-Anbindung):

apt install -y ldap-utils nfs-common cifs-utils

Setzen Sie das richtige Datumsformat, um auch ein korrektes Logging zu ermöglichen:

timedatectl set-timezone Europe/Berlin

Optimieren Sie PHP entweder wie im Installationsguide beschrieben oder wie nachfolgend exemplarisch mit Werten aus der Praxis:

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

Passen Sie PHP 8.3 mit Werten aus der Praxis an:

sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/8.3/fpm/pool.d/www.conf
sed -i 's/pm = dynamic/pm = ondemand/' /etc/php/8.3/fpm/pool.d/www.conf
sed -i 's/pm.max_children =.*/pm.max_children = 200/' /etc/php/8.3/fpm/pool.d/www.conf
sed -i 's/pm.start_servers =.*/pm.start_servers = 100/' /etc/php/8.3/fpm/pool.d/www.conf
sed -i 's/pm.min_spare_servers =.*/pm.min_spare_servers = 60/' /etc/php/8.3/fpm/pool.d/www.conf
sed -i 's/pm.max_spare_servers =.*/pm.max_spare_servers = 140/' /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s/;pm.max_requests =.*/pm.max_requests = 1000/" /etc/php/8.3/fpm/pool.d/www.conf
sed -i "s/allow_url_fopen =.*/allow_url_fopen = 1/" /etc/php/8.3/fpm/php.ini
sed -i "s/output_buffering =.*/output_buffering = Off/" /etc/php/8.3/cli/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.3/cli/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.3/cli/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/8.3/cli/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/8.3/cli/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.3/cli/php.ini
sed -i "s/;cgi.fix_pathinfo.*/cgi.fix_pathinfo=0/" /etc/php/8.3/cli/php.ini
sed -i "s/memory_limit = 128M/memory_limit = 1G/" /etc/php/8.3/fpm/php.ini
sed -i "s/output_buffering =.*/output_buffering = Off/" /etc/php/8.3/fpm/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.3/fpm/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.3/fpm/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10G/" /etc/php/8.3/fpm/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10G/" /etc/php/8.3/fpm/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.3/fpm/php.ini
sed -i "s/;cgi.fix_pathinfo.*/cgi.fix_pathinfo=0/" /etc/php/8.3/fpm/php.ini
sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.validate_timestamps=.*/opcache.validate_timestamps=1/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=256/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=64/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=100000/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=0/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/8.3/fpm/php.ini
sed -i "s/;opcache.huge_code_pages=.*/opcache.huge_code_pages=0/" /etc/php/8.3/fpm/php.ini
sed -i "s|;emergency_restart_threshold.*|emergency_restart_threshold = 10|g" /etc/php/8.3/fpm/php-fpm.conf
sed -i "s|;emergency_restart_interval.*|emergency_restart_interval = 1m|g" /etc/php/8.3/fpm/php-fpm.conf
sed -i "s|;process_control_timeout.*|process_control_timeout = 10|g" /etc/php/8.3/fpm/php-fpm.conf
sed -i '$aapc.enable_cli=1' /etc/php/8.3/mods-available/apcu.ini
sed -i 's/opcache.jit=off/opcache.jit=on/' /etc/php/8.3/mods-available/opcache.ini
sed -i '$aopcache.jit=1255' /etc/php/8.3/mods-available/opcache.ini
sed -i '$aopcache.jit_buffer_size=256M' /etc/php/8.3/mods-available/opcache.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
cp /etc/php/8.3/mods-available/mysqli.ini /etc/php/8.3/mods-available/mysqli.ini.bak
sed -i '$a[mysql]' /etc/php/8.3/mods-available/mysqli.ini
sed -i '$amysql.allow_local_infile=On' /etc/php/8.3/mods-available/mysqli.ini
sed -i '$amysql.allow_persistent=On' /etc/php/8.3/mods-available/mysqli.ini
sed -i '$amysql.cache_size=2000' /etc/php/8.3/mods-available/mysqli.ini
sed -i '$amysql.max_persistent=-1' /etc/php/8.3/mods-available/mysqli.ini
sed -i '$amysql.max_links=-1' /etc/php/8.3/mods-available/mysqli.ini
sed -i '$amysql.default_port=3306' /etc/php/8.3/mods-available/mysqli.ini
sed -i '$amysql.connect_timeout=60' /etc/php/8.3/mods-available/mysqli.ini
sed -i '$amysql.trace_mode=Off' /etc/php/8.3/mods-available/mysqli.ini
cp /etc/php/8.3/mods-available/pgsql.ini /etc/php/8.3/mods-available/pgsql.ini.bak
sed -i '$a[PostgreSQL]' /etc/php/8.3/mods-available/pgsql.ini
sed -i '$apgsql.allow_persistent = On' /etc/php/8.3/mods-available/pgsql.ini
sed -i '$apgsql.auto_reset_persistent = Off' /etc/php/8.3/mods-available/pgsql.ini
sed -i '$apgsql.max_persistent = -1' /etc/php/8.3/mods-available/pgsql.ini
sed -i '$apgsql.max_links = -1' /etc/php/8.3/mods-available/pgsql.ini
sed -i '$apgsql.ignore_notice = 0' /etc/php/8.3/mods-available/pgsql.ini
sed -i '$apgsql.log_notice = 0' /etc/php/8.3/mods-available/pgsql.ini

PHP 8.3 ist nun bereits installiert und für Nextcloud optimiert. Um es aktiv zu nutzen schalten wir im Webserver (nginx) von php 8.0, 8.1 oder 8.2 auf 8.3 um.

Passen Sie dazu die rot markierten Werte in der Datei /etc/nginx/conf.d/http.conf an und ersetzen ihre.domain.de mit Ihrer Domain:

upstream php-handler {
# server unix:/run/php/php8.0-fpm.sock;
# server unix:/run/php/php8.1-fpm.sock;
# server unix:/run/php/php8.2-fpm.sock;
server unix:/run/php/php8.3-fpm.sock;
}
map $arg_v $asset_immutable {
"" "";
default "immutable";
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ihre.domain.de;
root /var/www;
location ^~ /.well-known/acme-challenge {
default_type text/plain;
root /var/www/letsencrypt;
}
location / {
return 301 https://$host$request_uri;
}
}

Starten Sie nun den nginx-Webserver neu und genießen Ihre Nextcloud mit PHP 8.3.

systemctl restart php8.3-fpm.service nginx.service

Im Nextcloud Systempanel stellt es sich nun wie folgt dar:

Wenn Sie PHP 8.0, PHP 8.1 oder PHP 8.2 nicht weiter benötigen, so können sie es wie folgt vom Server entfernen:

apt remove php8.0-* php8.1-* php8.2-* --purge
rm -Rf /etc/php/8.0 /etc/php/8.1 /etc/php/8.2

Ab sofort nutzen Sie PHP 8.3 für Ihre Nextcloud. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!

Carsten Rieger IT-Services | Slogan