Update von PHP 7 auf 8 für unsere Nextcloud

      Keine Kommentare zu Update von PHP 7 auf 8 für unsere Nextcloud

Der Support für PHP 7 läuft nun Stück für Stück aus und die Nachfolgerversion 8 ist bereits eine Weile auf dem Markt.

Die Nextcloud unterstützt auch schon länger PHP 8 und allgemein, soll durch 8 auch noch ein bisschen mehr Leistung rausgeholt werden. Also warum nicht langsam mal updaten?

Die guten Nachrichten sind, dass sich der Versionswechsel recht einfach gestaltet. Wenn die Installation über virtuelle Pakete erfolgt ist.
(z. B. nicht: apt install php7.3-intl sondern apt install php-intl)
Diese Art der Installation ist jetzt Fluch und Segen zugleich.
Segen, weil wir dem Gerät nun nur noch die neueren Paketquellen von PHP bekannt machen müssen und dadurch die aktuelle Version gezogen wird.
Fluch, weil die nächste größere PHP Version auch ausversehen gezogen werden könnte.
Gerade für Einsteiger war es bisher einfach, da immer nur eine Version auf dem Gerät vorhanden war. Ab jetzt muss man ein bisschen genauer hinschauen.

Bitte seid aber beim Updaten vorsichtig. Ich würde strengstens, gerade den nicht so fitten Benutzern, raten ein vollständiges Backup des kompletten Betriebssystems zu machen (Beim Raspberry einfach eine Kopie der Karte z. B. mit dem Win32Diskimager erstellen). Durch die „nicht standard“ Paketquellen die wir zwangsweise einbinden müssen, wird es zukünftig ein bisschen komplizierter, da nun mehrere PHP Versionen zur Verfügung stehen.

Wichtig für dieses Tutorial ist, dass ihr wisst welche PHP Version ihr aktuell nutzt und welche die aktuelle ist, die gerade angezogen wird. Die Alte kann man über die Nextcloud selber über Einstellungen/System rausfinden und die aktuelle sieht man bei der Installation (oder über php -version). Schließlich wird nicht ewig PHP 8.0 die aktuelle Version sein. 😅

Somit wäre unser erster Schritt unser Gerät auf den neusten Stand zu bringen, bevor wir das eigendlich Update angehen. Daher zu Beginn erst einmal dauerhafte Adminrechte verschaffen und das System aktualisieren.

sudo -s
apt update
apt upgrade

Wenn nun alles aktuell ist, machen wir unserem Linuxsystem nun die neuen PHP Paketquellen bekannt. Dieser Vorgang besteht aus drei Schritten. (Codebeispiel anhand eines Debian Systems)

  1. Schlüssel/Zertifikat der neuen Paketquelle herunterladen und bei den vertrauenswürdigen Herausgebern hinzufügen.
  2. Die neue Paketquelle unserem Paketmanager (apt) über eine neue Konfigurationsdatei bekannt machen.
    Das machen wir über einen Befehl, der uns automatisch die notwendigen Infos für die Konfigurationsdatei sammelt und diese dann auch gleich erstellt.
  3. Unseren Paketmanager alle (auch die neuen) Paketquellen durchsuchen lassen.
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt update

Und nun sollte unser Linux alle notwendigen Pakete kennen, die zum Update benötigt werden. Jetzt kommt der vorhin genannte Segen zum Vorschein, warum das Update mit den virtuellen Paketen „relativ einfach“ ist. Den wir sagen unserem Paketmanager nur noch, dass er die Paketquellen „upgraden“ soll. Durch die virtuellen Pakte zieht er nun nicht mehr die alte 7er Versionen an sondern aktuell 8.0 (Leute mit versionsbezogener Installation müssen alle notwendigen PHP Module nun einzeln nachinstallieren).
Bei der Installation darauf achten, welche PHP Version nun wirklich angezogen wurde, wenn ihr das Tutorial später durchführt. (Befehl: php -version)

apt upgrade

PHP8 sollte nun zwar installiert sein, aber ist noch nicht aktiv. Hierzu fehlen noch ein paar Schritte.
Als erstes deaktivieren wir das Apache PHP7 Modul (Bei mir 7.3) und aktivieren das neue PHP8 Modul (Bei mir 8.0).

a2dismod php7.3
a2enmod php8.0

Da wir uns nun auf einer neuen PHP Version befinden, müssen wir diese noch für unsere Cloud konfigurieren. Unter anderem deswegen, dass unser Nextcloud mit einem Memcache konfiguriert wurde, der sonst nicht mehr funktioniert.

Daher bearbeiten wir die Datei /etc/php/8.0/apache2/php.ini und suchen nach den unteren Einträgen und bearbeiten die Werte wie beschrieben (Ein ; am Anfang einer Zeile sorgt dafür, dass diese Ignoriert wird. Daher muss dies entfernt werden um die genannten Einstellungen auch zu setzen).

memory_limit = 512M
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1 
opcache.save_comments=1

Vielleicht fällt es auf, aber es handelt sich hierbei 1 zu 1 um die Gleichen Einstellungen die wir bereits damals für PHP 7 gesetzt hatten.

Wenn wir schon beim Bearbeiten sind fügen wir gleich noch in der Datei /etc/php/8.0/cli/php.ini folgende Zeile ein.

apc.enable_cli = 1

Nun können wir all unsere Änderungen aktiv schalten und gucken ob unsere Cloud wieder funktioniert.

systemctl restart apache2

Ab jetzt sollte der Login wieder klappen. (Wenn nicht dann weiter zum nächsten Punkt) Geprüft wird natürlich wie gehabt über Einstellungen/Allgemein. Sollte der Sicherheitscheck keine Fehler spucken wäre das Update nun erfolgreich abgeschlossen (Zur Sicherheit mal noch unter Einstellungen/System gucken ob auch wirklich eine 8er PHP Version angezeigt wird 😅).

Bei mir gab es beim Update allerdings aus mir unerfindlichen Gründen das Problem, dass zwei PHP Module nicht in der benötigten PHP Version installiert wurden. Imagick und leider der Memcache woduch die ganze Cloud gar nicht erst lauffähig war. Daher habe ich diese leider nicht über das virtuelle Paket installiert sondern direkt mit der Versionsnummer nachinstalliert.

apt install php8.0-imagick
apt install php8.0-apcu
systemctl restart apache2

Sollten noch weitere Module fehlen, so können diese über den gleichen Weg nachinstalliert werden.

Schreibe einen Kommentar