- Veröffentlicht am
- • How2-Host
Alte PHP-Versionen unter Debian 12 entfernen – Apache mit PHP-FPM richtig aufräumen
- Autor
-
-
- Benutzer
- tmueller
- Beiträge dieses Autors
- Beiträge dieses Autors
-
Apache mit PHP-FPM ist unter Debian 12 der empfohlene Standard: performant, sauber getrennt und deutlich flexibler als das klassische mod_php.
Trotzdem sammelt sich auch hier schnell technischer Ballast an – vor allem mehrere PHP-FPM-Versionen, die parallel installiert und teilweise sogar aktiv sind.
Das Ergebnis:
- mehrere laufende FPM-Dienste
- unklare Zuordnung zwischen Apache und PHP
- unnötige Sicherheitsrisiken
- steigender Wartungsaufwand
In diesem Artikel zeige ich Schritt für Schritt, wie man alte PHP-Versionen in einem Apache-+-PHP-FPM-Setup unter Debian 12 sauber entfernt, ohne Ausfälle oder böse Überraschungen.
Warum ist PHP-FPM-Aufräumen besonders wichtig?
Im Gegensatz zu mod_php läuft bei PHP-FPM jede PHP-Version als eigener Systemdienst:
php8.1-fpm.service
php8.2-fpm.service
php8.4-fpm.service
Bleiben alte Versionen aktiv:
- verbrauchen sie RAM und CPU
- erhöhen die Angriffsfläche
- führen zu falschen Socket-Zuordnungen
- erschweren Debugging und Updates
Best Practice: Pro Server nur die PHP-FPM-Version betreiben, die wirklich genutzt wird.
Schritt 1: Installierte PHP-Versionen ermitteln
Zuerst verschaffen wir uns einen Überblick:
ls /etc/php
Beispiel:
8.1 8.2 8.4
Oder detaillierter:
dpkg -l | grep php
Schritt 2: Aktive PHP-FPM-Version feststellen
Laufende PHP-FPM-Dienste anzeigen
systemctl list-units --type=service | grep php
Beispiel:
php8.1-fpm.service
php8.4-fpm.service
Alarmzeichen: Mehr als ein FPM-Dienst läuft.
Schritt 3: Apache-Konfiguration prüfen (entscheidend!)
Apache spricht PHP-FPM über Unix-Sockets oder TCP.
Typische Konfiguration (SetHandler):
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
Notiere dir:
- welche PHP-Version hier verwendet wird
- welcher Socket konfiguriert ist
Nur diese Version darf später bleiben.
Schritt 4: Alte PHP-FPM-Dienste stoppen und deaktivieren
Beispiel: PHP 8.1 entfernen, PHP 8.4 behalten
sudo systemctl stop php8.1-fpm
sudo systemctl disable php8.1-fpm
Optional sofort prüfen:
systemctl status php8.1-fpm
Schritt 5: Alte PHP-Versionen vollständig entfernen
Jetzt werden die alten Versionen komplett deinstalliert.
sudo apt purge php8.1\*
Für mehrere Versionen:
sudo apt purge php8.1\* php8.2\*
Das \* stellt sicher, dass alle Extensions und FPM-Komponenten entfernt werden.
Schritt 6: System bereinigen
sudo apt autoremove --purge
sudo apt autoclean
Dieser Schritt entfernt:
- verwaiste Abhängigkeiten
- nicht mehr benötigte Libraries
- alte Konfigreste
Schritt 7: PHP-CLI-Version korrekt setzen
Auch wenn Apache PHP-FPM nutzt, ist die CLI-Version wichtig (Cronjobs, Tools, Skripte).
sudo update-alternatives --config php
Beispiel:
* 0 /usr/bin/php8.4
1 /usr/bin/php8.2
Gewünschte Version auswählen
Schritt 8: Konfigurationsreste entfernen (optional, aber sauber)
Nach dem Purge können noch Ordner existieren:
sudo rm -rf /etc/php/8.1
sudo rm -rf /etc/php/8.2
⚠️ Nur löschen, wenn die Versionen sicher nicht mehr gebraucht werden.
Schritt 9: Apache neu laden & testen
sudo systemctl reload apache2
Testseite erstellen:
<?php phpinfo();
Prüfen:
- PHP-Version
- FPM-SAPI
- Socket-Pfad
Finaler Check ✅
php -v
ls /etc/php
systemctl list-units --type=service | grep php
Erwartetes Ergebnis:
- nur eine PHP-Version
- nur ein phpX.X-fpm Dienst
- Apache nutzt den korrekten Socket
Typische Fehler in Apache + PHP-FPM Setups
| Problem | Ursache |
|---|---|
| 503 Service Unavailable | FPM-Dienst gestoppt |
| Apache startet, PHP nicht | falscher Socket |
| CLI ≠ Web | update-alternatives nicht gesetzt |
| Hoher RAM-Verbrauch | mehrere FPM-Versionen aktiv |
| Updates schlagen fehl | alte PHP-Repos aktiv |
Ein Apache-+-PHP-FPM-Server profitiert massiv von einem aufgeräumten PHP-Setup. Weniger Versionen bedeuten:
- höhere Sicherheit
- bessere Performance
- weniger Fehlerquellen
- entspanntere Wartung
Ein Server = eine PHP-FPM-Version – alles andere ist Ballast.