Update php 8.1 to 8.2
Zitat von mpachmann am 14. November 2024, 11:30 Uhrhttps://www.c-rieger.de/nextcloud-update-php-fpm-8-2/
Mit den Nextcloud Versionen 26 (Hub 4), Nextcloud 27 (Hub 5) sowie Nextcloud 27.1 (Hub 6) kann PHP 8.2 (php8.2-fpm) genutzt werden. Wir zeigen Ihnen, wie Sie von PHP 8.0 oder PHP8.1 zu PHP 8.2 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.2-{fpm,gd,curl,xml,zip,intl,mbstring,bz2,ldap,apcu,bcmath,gmp,imagick,igbinary,mysql,redis,smbclient,cli,common,opcache,readline} \ imagemagick --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.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/www.conf.bak cp /etc/php/8.2/fpm/php-fpm.conf /etc/php/8.2/fpm/php-fpm.conf.bak cp /etc/php/8.2/cli/php.ini /etc/php/8.2/cli/php.ini.bak cp /etc/php/8.2/fpm/php.ini /etc/php/8.2/fpm/php.ini.bak cp /etc/php/8.2/mods-available/apcu.ini /etc/php/8.2/mods-available/apcu.ini.bak cp /etc/php/8.2/mods-available/opcache.ini /etc/php/8.2/mods-available/opcache.ini.bak cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak
Starten SIe den neuen PHP-fpm-Service neu
systemctl restart php8.2-fpm.service
Passen Sie PHP 8.2 mit Werten aus der Praxis an:
sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/8.2/fpm/pool.d/www.conf sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/8.2/fpm/pool.d/www.conf sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/8.2/fpm/pool.d/www.conf sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/8.2/fpm/pool.d/www.conf sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/8.2/fpm/pool.d/www.conf sed -i 's/pm.max_children =.*/pm.max_children = 200/' /etc/php/8.2/fpm/pool.d/www.conf sed -i 's/pm.start_servers =.*/pm.start_servers = 100/' /etc/php/8.2/fpm/pool.d/www.conf sed -i 's/pm.min_spare_servers =.*/pm.min_spare_servers = 60/' /etc/php/8.2/fpm/pool.d/www.conf sed -i 's/pm.max_spare_servers =.*/pm.max_spare_servers = 140/' /etc/php/8.2/fpm/pool.d/www.conf sed -i "s/;pm.max_requests =.*/pm.max_requests = 1000/" /etc/php/8.2/fpm/pool.d/www.conf sed -i "s/allow_url_fopen =.*/allow_url_fopen = 1/" /etc/php/8.2/fpm/php.ini sed -i "s/output_buffering =.*/output_buffering = Off/" /etc/php/8.2/cli/php.ini sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.2/cli/php.ini sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.2/cli/php.ini sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/8.2/cli/php.ini sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/8.2/cli/php.ini sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.2/cli/php.ini sed -i "s/;cgi.fix_pathinfo.*/cgi.fix_pathinfo=0/" /etc/php/8.2/cli/php.ini sed -i "s/memory_limit = 128M/memory_limit = 1G/" /etc/php/8.2/fpm/php.ini sed -i "s/output_buffering =.*/output_buffering = Off/" /etc/php/8.2/fpm/php.ini sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.2/fpm/php.ini sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.2/fpm/php.ini sed -i "s/post_max_size =.*/post_max_size = 10G/" /etc/php/8.2/fpm/php.ini sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10G/" /etc/php/8.2/fpm/php.ini sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.2/fpm/php.ini sed -i "s/;cgi.fix_pathinfo.*/cgi.fix_pathinfo=0/" /etc/php/8.2/fpm/php.ini sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/8.2/fpm/php.ini sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/8.2/fpm/php.ini sed -i "s/;opcache.validate_timestamps=.*/opcache.validate_timestamps=1/" /etc/php/8.2/fpm/php.ini sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/8.2/fpm/php.ini sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=256/" /etc/php/8.2/fpm/php.ini sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=64/" /etc/php/8.2/fpm/php.ini sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=100000/" /etc/php/8.2/fpm/php.ini sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=0/" /etc/php/8.2/fpm/php.ini sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/8.2/fpm/php.ini sed -i "s|;emergency_restart_threshold.*|emergency_restart_threshold = 10|g" /etc/php/8.2/fpm/php-fpm.conf sed -i "s|;emergency_restart_interval.*|emergency_restart_interval = 1m|g" /etc/php/8.2/fpm/php-fpm.conf sed -i "s|;process_control_timeout.*|process_control_timeout = 10|g" /etc/php/8.2/fpm/php-fpm.conf sed -i '$aapc.enable_cli=1' /etc/php/8.2/mods-available/apcu.ini sed -i '$aopcache.jit=1255' /etc/php/8.2/mods-available/opcache.ini sed -i '$aopcache.jit_buffer_size=256M' /etc/php/8.2/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 sed -i 's/opcache.jit=off/; opcache.jit=off/' /etc/php/8.2/mods-available/opcache.ini sed -i '$aopcache.jit=1255' /etc/php/8.2/mods-available/opcache.ini sed -i '$aopcache.jit_buffer_size=256M' /etc/php/8.2/mods-available/opcache.ini sed -i '$a[mysql]' /etc/php/8.2/mods-available/mysqli.ini sed -i '$amysql.allow_local_infile=On' /etc/php/8.2/mods-available/mysqli.ini sed -i '$amysql.allow_persistent=On' /etc/php/8.2/mods-available/mysqli.ini sed -i '$amysql.cache_size=2000' /etc/php/8.2/mods-available/mysqli.ini sed -i '$amysql.max_persistent=-1' /etc/php/8.2/mods-available/mysqli.ini sed -i '$amysql.max_links=-1' /etc/php/8.2/mods-available/mysqli.ini sed -i '$amysql.default_port=3306' /etc/php/8.2/mods-available/mysqli.ini sed -i '$amysql.connect_timeout=60' /etc/php/8.2/mods-available/mysqli.ini sed -i '$amysql.trace_mode=Off' /etc/php/8.2/mods-available/mysqli.ini
Starten Sie nun beide Dienste, nginx und PHP, neu:
systemctl restart php8.2-fpm.service
PHP 8.2 ist nun bereits installiert und für Nextcloud optimiert. Um es aktiv zu nutzen schalten wir im Webserver (nginx) von php 8.1 auf 8.2 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.1-fpm.sock; server unix:/run/php/php8.2-fpm.sock; } map $arg_v $asset_immutable { "" ""; default "immutable"; } server { listen 80; listen [::]:80; server_name ihre.domain.de; root /var/www; location / { return 301 https://$host$request_uri; } }
Starten Sie nun den nginx-Webserver neu und genießen Ihre Nextcloud mit PHP 8.2.
systemctl restart nginx.service
Im Nextcloud Systempanel stellt es sich nun wie folgt dar:
Wenn Sie PHP 8.0 oder PHP 8.1 nicht weiter benötigen, so können sie es wie folgt vom Server entfernen:
apt remove php8.1-* --purge
rm -Rf /etc/php/8.1/
####
https://www.taste-of-it.de/nextcloud-occ-fehler-apcu-und-memcached-not-available/
Nach einem Update der Nextcloud erhielt ich folgende Fehlermeldung in der Konsole beim ausführen des Befehls:
sudo -u www-data php8.0 --define apc.enable_cli=1 occ db:add-missing-indices An unhandled exception has been thrown: OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)
Beides ist als PHP Modul installiert und funktioniert. Die Lösung war dem Befehl den Parameter für z.B. APC mitzugeben:
sudo -u www-data php8.0 --define apc.enable_cli=1 occ db:add-missing-indices
Damit APCu dauerhaft in der Command Line (Cli) funktioniert muss die apcu.ini wie folgt erweitert werden.
# nano /etc/php/8.0/mods-available/apcu_bc.ini # nano /etc/php/8.0/mods-available/apcu.ini apc.enable_cli=1
Danach den Apache noch neustarten:
# service apache2 restart
Mit den Nextcloud Versionen 26 (Hub 4), Nextcloud 27 (Hub 5) sowie Nextcloud 27.1 (Hub 6) kann PHP 8.2 (php8.2-fpm) genutzt werden. Wir zeigen Ihnen, wie Sie von PHP 8.0 oder PHP8.1 zu PHP 8.2 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.2-{fpm,gd,curl,xml,zip,intl,mbstring,bz2,ldap,apcu,bcmath,gmp,imagick,igbinary,mysql,redis,smbclient,cli,common,opcache,readline} \
imagemagick --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.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/www.conf.bak
cp /etc/php/8.2/fpm/php-fpm.conf /etc/php/8.2/fpm/php-fpm.conf.bak
cp /etc/php/8.2/cli/php.ini /etc/php/8.2/cli/php.ini.bak
cp /etc/php/8.2/fpm/php.ini /etc/php/8.2/fpm/php.ini.bak
cp /etc/php/8.2/mods-available/apcu.ini /etc/php/8.2/mods-available/apcu.ini.bak
cp /etc/php/8.2/mods-available/opcache.ini /etc/php/8.2/mods-available/opcache.ini.bak
cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak
Starten SIe den neuen PHP-fpm-Service neu
systemctl restart php8.2-fpm.service
Passen Sie PHP 8.2 mit Werten aus der Praxis an:
sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/8.2/fpm/pool.d/www.conf
sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/8.2/fpm/pool.d/www.conf
sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/8.2/fpm/pool.d/www.conf
sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/8.2/fpm/pool.d/www.conf
sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/8.2/fpm/pool.d/www.conf
sed -i 's/pm.max_children =.*/pm.max_children = 200/' /etc/php/8.2/fpm/pool.d/www.conf
sed -i 's/pm.start_servers =.*/pm.start_servers = 100/' /etc/php/8.2/fpm/pool.d/www.conf
sed -i 's/pm.min_spare_servers =.*/pm.min_spare_servers = 60/' /etc/php/8.2/fpm/pool.d/www.conf
sed -i 's/pm.max_spare_servers =.*/pm.max_spare_servers = 140/' /etc/php/8.2/fpm/pool.d/www.conf
sed -i "s/;pm.max_requests =.*/pm.max_requests = 1000/" /etc/php/8.2/fpm/pool.d/www.conf
sed -i "s/allow_url_fopen =.*/allow_url_fopen = 1/" /etc/php/8.2/fpm/php.ini
sed -i "s/output_buffering =.*/output_buffering = Off/" /etc/php/8.2/cli/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.2/cli/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.2/cli/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/8.2/cli/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/8.2/cli/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.2/cli/php.ini
sed -i "s/;cgi.fix_pathinfo.*/cgi.fix_pathinfo=0/" /etc/php/8.2/cli/php.ini
sed -i "s/memory_limit = 128M/memory_limit = 1G/" /etc/php/8.2/fpm/php.ini
sed -i "s/output_buffering =.*/output_buffering = Off/" /etc/php/8.2/fpm/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.2/fpm/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.2/fpm/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10G/" /etc/php/8.2/fpm/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10G/" /etc/php/8.2/fpm/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/8.2/fpm/php.ini
sed -i "s/;cgi.fix_pathinfo.*/cgi.fix_pathinfo=0/" /etc/php/8.2/fpm/php.ini
sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/8.2/fpm/php.ini
sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/8.2/fpm/php.ini
sed -i "s/;opcache.validate_timestamps=.*/opcache.validate_timestamps=1/" /etc/php/8.2/fpm/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/8.2/fpm/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=256/" /etc/php/8.2/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=64/" /etc/php/8.2/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=100000/" /etc/php/8.2/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=0/" /etc/php/8.2/fpm/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/8.2/fpm/php.ini
sed -i "s|;emergency_restart_threshold.*|emergency_restart_threshold = 10|g" /etc/php/8.2/fpm/php-fpm.conf
sed -i "s|;emergency_restart_interval.*|emergency_restart_interval = 1m|g" /etc/php/8.2/fpm/php-fpm.conf
sed -i "s|;process_control_timeout.*|process_control_timeout = 10|g" /etc/php/8.2/fpm/php-fpm.conf
sed -i '$aapc.enable_cli=1' /etc/php/8.2/mods-available/apcu.ini
sed -i '$aopcache.jit=1255' /etc/php/8.2/mods-available/opcache.ini
sed -i '$aopcache.jit_buffer_size=256M' /etc/php/8.2/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
sed -i 's/opcache.jit=off/; opcache.jit=off/' /etc/php/8.2/mods-available/opcache.ini
sed -i '$aopcache.jit=1255' /etc/php/8.2/mods-available/opcache.ini
sed -i '$aopcache.jit_buffer_size=256M' /etc/php/8.2/mods-available/opcache.ini
sed -i '$a[mysql]' /etc/php/8.2/mods-available/mysqli.ini
sed -i '$amysql.allow_local_infile=On' /etc/php/8.2/mods-available/mysqli.ini
sed -i '$amysql.allow_persistent=On' /etc/php/8.2/mods-available/mysqli.ini
sed -i '$amysql.cache_size=2000' /etc/php/8.2/mods-available/mysqli.ini
sed -i '$amysql.max_persistent=-1' /etc/php/8.2/mods-available/mysqli.ini
sed -i '$amysql.max_links=-1' /etc/php/8.2/mods-available/mysqli.ini
sed -i '$amysql.default_port=3306' /etc/php/8.2/mods-available/mysqli.ini
sed -i '$amysql.connect_timeout=60' /etc/php/8.2/mods-available/mysqli.ini
sed -i '$amysql.trace_mode=Off' /etc/php/8.2/mods-available/mysqli.ini
Starten Sie nun beide Dienste, nginx und PHP, neu:
systemctl restart php8.2-fpm.service
PHP 8.2 ist nun bereits installiert und für Nextcloud optimiert. Um es aktiv zu nutzen schalten wir im Webserver (nginx) von php 8.1 auf 8.2 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.1-fpm.sock;
server unix:/run/php/php8.2-fpm.sock;
}
map $arg_v $asset_immutable {
"" "";
default "immutable";
}
server {
listen 80;
listen [::]:80;
server_name ihre.domain.de;
root /var/www;
location / {
return 301 https://$host$request_uri;
}
}
Starten Sie nun den nginx-Webserver neu und genießen Ihre Nextcloud mit PHP 8.2.
systemctl restart nginx.service
Im Nextcloud Systempanel stellt es sich nun wie folgt dar:
Wenn Sie PHP 8.0 oder PHP 8.1 nicht weiter benötigen, so können sie es wie folgt vom Server entfernen:
apt remove php8.1-* --purge
rm -Rf /etc/php/8.1/
####
Nach einem Update der Nextcloud erhielt ich folgende Fehlermeldung in der Konsole beim ausführen des Befehls:
sudo -u www-data php8.0 --define apc.enable_cli=1 occ db:add-missing-indices
An unhandled exception has been thrown: OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)
Beides ist als PHP Modul installiert und funktioniert. Die Lösung war dem Befehl den Parameter für z.B. APC mitzugeben:
sudo -u www-data php8.0 --define apc.enable_cli=1 occ db:add-missing-indices
Damit APCu dauerhaft in der Command Line (Cli) funktioniert muss die apcu.ini wie folgt erweitert werden.
# nano /etc/php/8.0/mods-available/apcu_bc.ini
# nano /etc/php/8.0/mods-available/apcu.ini
apc.enable_cli=1
Danach den Apache noch neustarten:
# service apache2 restart