Wer weiterhin auf PHP5 angewiesen ist, für den wird die Auswahl des passenden Serversystems immer schwieriger. Glücklicherweise gibt es die Docker-Extension für Plesk mit der man PHP5 nahtlos als Docker Container in Plesk integrieren kann.
PHP5 als Docker-Container in Plesk: Lokal vorbereiten
Der Einfachheit halber wählen wir einen fertiges Docker Image mit Apache, PHP5, MySQL und PHPMyAdmin in einem einzigen Container: LAMP bei Mat Trayner. Da der Autor auch Images mir PHP7 und PHP8 anbietet, geben wir bei der Installation die Version explizit an. Das Image installieren wir zuerst lokal auf unserem Rechner:
1 |
docker run -p "8080:80" -p "8306:3306" -v ${PWD}/app:/app -v ${PWD}/mysql:/var/lib/mysql mattrayner/lamp:latest-1604-php5 |
Nach Start des Docker-Containers wir das Admin-Passwort für MySQL eingeblendet. Dieses notieren wir uns:
Des weiteren wurden folgenden lokalen Ordner angelegt:
- ./apps: Für unsere Web App
- ./mysql: Für unsere MySQL-Datenbank
Es werden folgende Ports verwendet:
- 8080 für Apache
- 8306 für MySQL
Wir kopieren unsere Daten nach ./apps und starten PHPMyAdmin mit http://127.0.0.1:8080/phpmyadmin . Wir loggen uns mit “admin” und dem notierten Passwort ein und importieren unsere Datenbank. Danach passen wir die Konfig-Datei unserer App entsprechend an. Aus Sicht unserer App läuft MySQL unter “localhost” auf Port 3306.
Wir beenden den Container mit CMD-Q.
Docker-Container mit PHP5 unter Plesk installieren
Leider hat die Docker-Extension unter Plesk einen lästigen Bug, der das einfache Importieren von lokalen Images erschwert. Daher gehen wir wie folgt vor:
Wir melden uns per SSH an unserem Server an. Danach legen wir einen Ordner für unseren PHP5-Container an. Im folgenden Beispiel heißt unsere Domain marketmix.com und unser Container xmailforum:
1 2 3 |
cd /var/www/vhosts/marketmix.com mkdir -P _docker/xmailforum cd _docker/xmailforum |
Danach machen wir das Gleiche, was wir lokal gemacht haben: Den Docker-Container starten:
1 |
docker run -p "8080:80" -p "8306:3306" -v ${PWD}/app:/app -v ${PWD}/mysql:/var/lib/mysql mattrayner/lamp:latest-1604-php5 |
Wir beenden den Container und füllen die beiden Ordner ./apps und ./mysql per FTP oder scp mit unseren lokalen Daten.
Nun öffnen wir Plesk. Hier wird nun unser Docker-Image angezeigt. Wir starten es per Klick auf “Run”:
PHP5 Docker-Container unter Plesk konfigurieren
Als nächstes wählen wir “Settings” und machen folgende Eingaben:
- Kein Memorylimit
- Automatischer Start: An
- Automatisches Post Mapping: Aus
- Manual Mapping: Port 3306 auf 8306, 80 auf 8080
- Volume Mapping: /app auf /var/www/vhosts/marketmix.com/_docker/xmailforum/app und /var/lib/mysql auf /var/www/vhosts/marketmix.com/_docker/xmailforum/mysql
- Bei Environment-Vars löschen wir den Eintrag, welcher das lokale Passwort generiert: MYSQL_PASS
Danach bestätigen wir mit OK. Der Container sollte dann fehlerfrei hochfahren und bereits existierende MySQL-Daten melden.
Plesk: Docker Proxy Rules konfigurieren
Damit der PHP5 Docker-Container von Außen zugänglich wird, müssen noch entsprechende Proxy-Regeln in Plesk eingestellt werden. Hierzu öffnen wir die Domainverwaltung (hier verwenden wir die Subdomain xmailforum.marktemix.com) und klicken auf Docker Proxy Rules:
Hier reicht eine Weiterleitung von Port 80 extern auf 8080 intern:
Danach erreichen wir unsere PHP5-App über eine reguläre URL, hier https://xmailforum.marketmix.com
Die o.g. Domain läuft übrigens live im Docker-Container. Es ist kein Unterschied zu einer normalen Installation zu erkennen. Docker rennt genau so performant, wie der reguläre Webserver.
Danke für dieses tolle Tutorial, das klappt prima! Meine App ist leider sehr betagt und benötigt innerhalb von mySQL die “OLD_PASSWORD”-Variante. Dieser Docker-Container kommt damit offenbar nicht klar, denn es kommt der Fehler:
FUNCTION <DATENBANKNAME>.OLD_PASSWORD does not exist
Gibt’s dazu zufällig einen Lösungsansatz?
OLD_PASSWORD() ist verfügbar in MySQL <= 4.1. Gehe ich recht in der Annahme, daß deine App aktuell auf einem älteren MySQL als 4.1 läuft?
Tatsächlich nicht. Ich brauche lediglich PHP5.2, als mySQL war MariaDB im Einsatz. Das ganze lief zuletzt auf einem Debian 9 System, auf dem ich über Plesk PHP 5.2 installieren und betreiben konnte. Aufgrund Systemwechsels und Upgrade auf Debian 11 geht das nun leider nicht mehr, weswegen ich Alternativen such(t)e und bei diesem tollen Tutorial hängen geblieben bin.
Oder kann ich in diesem Docker-Container die mySQL-Config anpassen und OLD_PASSWORD() aktivieren? Vielleicht würde dass das Problem ja schon lösen?
Nicht ohne das image modifiziert neu zu bauen. Probiere aber erst mal die folgenden beiden Möglichkeiten:
#1: Das Image 1604 durch 1404 ersetzen. Darin ist MySQL < 5.7 enthalten. Mit etwas Glück ist die Funktion dort noch aktiviert:
#2: Die Funktion per SQL setzen. Dazu müsstest Du Im Quellcode deiner App diesen Query-String senden, bevor OLD_PASSWORD() benutzt wird: