Es ist mal wieder so weit, die aktuelle PHP-Version läuft aus und eine Aktualisierung von PHP steht an, um die neusten Sicherheitsupdates zu erhalten. Der Beitrag stellt die Vorgehensweise PHP-fpm unter Apache2 zu aktualisieren nur beispielsweise am Upgrade von 7.2 zu 7.4 dar, lässt sich aber für die meisten anderen Versionen durch Abändern der Versionsnummern in den Befehlen und Einstellungen anpassen.

Es wird davon ausgegangen, dass Apache2 und php-fpm wie in

eingerichtet sind. In meinem Fall sind die Anzahl der Webseiten noch recht gering, daher führe ich die Einstellungen von Hand durch. Um Fehler zu vermeiden und den Übergang schnell durchzuführen, kann die Vorgehensweise auch in ein Skript überführt werden.

Aktuelle Installation sichern

Konfigurationsdateien

Für regelmäßige Backups sollte ein Skript oder eine Anwendung eingesetzt werden, die auch die Konfigurationen der Anwendungen sichert. Vor dem Upgrade lohnt es sich aber die Konfigurationsdateien nochmal explizit abzuspeichern. Ich werde zusätzlich noch ein Image des Servers erzeugen um im Fall eines fehlgeschlagenen Übergangs schnell die Änderungen rückgängig machen zu können.

# PHP Konfiguration
cp /etc/php /path/to/backup/php
# Apache2 Konfiguration
cp /etc/apache2 /path/to/backup/apache2

Aktuelle PHP-Module

PHP Anwendungen benötigen diverse Module, um Korrekt zu funktionieren. Einige davon müssen getrennt von PHP installiert werden. Um die Module der aktuellen PHP Installation abzufragen, können folgende Befehle verwendet werden:

php -m # Aktuell aktivierte Module
apt list --installed php7.2* # Alle installierte Pakete, deren Namen mit php7.2 beginnt.

Das ist in meinem Fall:

user@server:~$ sudo apt list --installed php7.2*
Auflistung... Fertig
php7.2/bionic-updates,bionic-updates,bionic-security,bionic-security,now 7.2.24-0ubuntu0.18.04.7 all  [Installiert,automatisch]
php7.2-bz2/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-cli/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-common/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [installiert]
php7.2-curl/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-fpm/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-gd/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-json/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-mbstring/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-mysql/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-opcache/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-readline/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-sqlite3/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-xml/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [installiert]
php7.2-xmlrpc/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]
php7.2-zip/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.7 amd64  [Installiert,automatisch]

Diese Liste sollten für die Validation der neuen Installation gespeichert werden.

Neue Version installieren

Die neue Version wird installiert, indem man folgenden Befehl ausführt.

apt install paketnamen

paketnamen ersetzt man dabei durch die Pakete, die durch den Befehl apt list --installed php7.2* ausgegeben wurden, in denen man die Versionsnummer angepasst hat. Das wäre in meinem Fall:

apt install php7.4-bz2 php7.4-cli php7.4-common php7.4-curl php7.4-fpm php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-sqlite3 php7.4-xml php7.4-xmlrpc php7.4-zip

Konfiguration anpassen

Die neue PHP Version wird vorerst zusätzlich zur bestehenden Version installiert. Dabei werden ausschließlich Standardkonfigurationsdateien erzeugt, diese müssen jetzt auf das bestehende System angepasst werden.

PHP Konfiguration

php.ini

PHP wird mittels einer Reihe von .ini Dateien konfiguriert. Hat man Änderungen an der Datei /etc/php/7.2/fpm/php.ini vorgenommen, so muss man diese entsprechen in die Datei im 7.4/fpm Verzeichnis übernehmen. Ich empfehle allerdings, die Änderungen nicht direkt vorzunehmen, sondern in einer Datei 99-custom.ini im Verzeichnis 7.4/fpm/conf.d, das macht in so einem Fall die Übernahme einfacher, indem einfach die 99-custom.ini an in das entsprechende Verzeichnis der neuen PHP Version kopiert wird.

pool.d

Jetzt müssen noch die Pool-Konfigurationen kopiert und angepasst werden.

# Bestehende Konfigurationen kopieren
sudo cp -a /etc/php/7.2/fpm/pool.d/. /etc/php/7.4/fpm/pool.d/
# Pfade zu Sockets ändern
sudo find . -type f -exec sed -i.bak "s/php7.2-fpm/php7.4-fpm/g" {} \;

Apache2 Konfiguration

Um die globale Apache2 Konfiguration auf die neue Version zu bringen genügt ausführen von:

sudo a2disconf php7.2-fpm
sudo a2enconf php7.4-fpm

Zusätzlich müssen nun noch die Pfade in den Seitenkonfigurationen zu den Sockets geändert werden.

# Zu Apache Seitenkonfigurationsverzeichnis wechseln
cd /etc/apache2/sites-available
# Die Pfade automatisch ändern und Sicherungskopien anlegen
sudo find . -type f -exec sed -i.bak "s/php7.2-fpm/php7.4-fpm/g" {} \;

Dienste neu starten

Um die Änderungen zu übernehmen, muss nun PHP und Apache neugestartet werden.

sudo service php7.4-fpm restart
sudo service apache2 restart

Alte Version deinstallieren

Wenn keine Webanwendung mehr auf die alte PHP-Version angewiesen ist, so kann diese deinstalliert werden. Der Befehl sollte nur ausgeführt werden, wenn man sich wirklich sicher ist!

sudo apt purge php7.2*

Weiterlesen