Ich migriere einen sehr alten Server (Debian Etch) auf Debian Stretch und jede einzelne entwickelte App hat PHP-Probleme, wie erwartet wurde. Einige können repariert werden, andere nicht (wie mehrere Drupal 6-Sites). In Zukunft wird jede einzelne App unter PHP7.0 bereitgestellt, aber bis zu diesem Tag brauche ich PHP5.3, um sie bereitzustellen.
Ich weiß, dass Debian Stretch eine Art "native" Unterstützung für co-installierbare PHP-Versionen bietet, aber alle Beispiele, die ich gefunden habe, sind mit PHP5.6 (Jessies Version): https://pehapkari.cz/blog/2017/03/27 / multiple-php-version-the-easy-way /
Außerdem habe ich einige Beispiele für PHP5.3 und PHP5.4 oder PHP5.6 gefunden, die unter Debian Jessie, Wheezy usw. zusammenarbeiten, jedoch nicht für Debian Stretch (PHP7.0): /superuser/913792 / php-5-3-10-on-debian-jessie
Zuerst muss ich wissen, ob es möglich ist, dass PHP7.0 und PHP5.3 auf Apache2 unter Debian Stretch zusammenarbeiten.
Zweitens muss ich herausfinden, wie dies getan werden kann .
Ich bin kein Systemadministrator, daher wächst mein Debian-Wissen von Tag zu Tag von Grund auf.
Vielen Dank.
Antworten:
Ich bin auf ein ähnliches Problem gestoßen und habe es geschafft, dass es funktioniert.
Ich musste einen Server mit debian 9 / nginx / php5.4 installieren. Obwohl dies nicht genau Ihren Voraussetzungen entspricht, gehe ich davon aus, dass die Lösung ähnlich ist. Ich werde die Schritte auflisten, die ich unternommen habe, um es für mich zu lösen.
Grundsätzlich müssen Sie PHP aus Quellen installieren, und dies stellt ein Problem dar, wenn Sie OpenSSL-Unterstützung (--with-openssl) benötigen, da alte Versionen von PHP (<7.0) OpenSSL> = 1.1.0 nicht unterstützen Die Standardeinstellung in Debian 9. Sie müssen also eine ältere openssl-Version erstellen (ich habe 1.0.1u genommen).
Aber lassen Sie uns zuerst einige Abhängigkeiten installieren.
Dann bauen wir openssl.
Als Kettenreaktion müssen Sie libcurl und libc-client (für die IMAP-Unterstützung) mit Ihrem frisch erstellten openssl erstellen. Wir werden mit libcurl beginnen.
Dann libc-client. Ich habe tatsächlich die Quellen von Debian 8 verwendet, da es einige Patches enthielt. Der Build selbst schlug fehl, produzierte aber immer noch c-client.a, was alles ist, was ich brauchte.
Damit hatte ich alles, was ich brauchte, um PHP5.4 zu erstellen. Bitte beachten Sie, dass ich bei der Kompilierung eine Warnung für Postgresql-Bindungen erhalten habe (aufgrund der Nichtübereinstimmung zwischen lokaler und System-OpenSSL-Version). Ich denke, Sie müssen Ihre eigene libpq erstellen, wenn Sie sie verwenden möchten.
Die einzigen Dinge, die noch übrig sind, sind die Erstellung von php.ini und php-fpm.conf Dateien, die beide trivial sind, die Konfiguration des php-fpm Sockets und die Erstellung eines Initskripts (es gibt viele Beispiele online, ich kann nicht die vollständige Datei veröffentlichen hier) und die Konfiguration Ihres Webservers (fastcgi on socket).
quelle
/usr/local/imap-2007f/ipopd/ipop2d.c
Eine Woche später gelang es mir, es zum Laufen zu bringen, aber auf eine andere Art und Weise. Ich hörte auf, mich mit dem Host zu beschäftigen, und begann zu lernen, wie Docker mein Leben retten kann.
Dieser Beitrag gab mir den Schlüssel: Docker - Führen Sie Apache auf Host und Container für verschiedene Websites aus
Meine iniciatic Lektüre über Docker war diese: PHP Web Development mit Docker
Zusammenfassend muss ich Apache2.2 und PHP5.3 nicht auf meinem Host-Server installieren. Ich kann einen isolierten Container haben, in dem ich alles installieren kann, was ich brauche (normalerweise einen Dienst), und mögliche Inkompatibilitäten mit der Host-Betriebssystemversion vergessen. Docker verwaltet alles. Ich kann also einen Container mit Apache 2.2 + PHP 5.3 haben, wie es in einem Debian-Squeeze-Betriebssystem der Fall wäre. Ein weiterer Container mit Apache 2.2 + PHP 5.4 wie in einem Wheezy, ein anderer mit Apache 2.4 + PHP7.0 wie in Stretch und so weiter. Alle arbeiten zur gleichen Zeit und bedienen verschiedene Domänen. Um letzteres zu erreichen, muss Apache / Nginx auf dem Host als Reverse-Proxy fungieren und jede Domäne dank Docker-Port-Mapping in einen anderen Apache-PHP-Container umleiten. Sie müssen nicht einmal Apache / Nginx auf dem Host haben, es kann sich auch in einem Container befinden.
Der Docker-Weg besteht darin, jeden (Mikro-) Dienst in einem Container zu haben, damit Sie mariaDB in einem anderen Container usw. haben können.
Meine Schritte (zusammengefasst): ( Ich kann nicht mehr als auf Links posten, wenn ich genug Ruf habe, werde ich sie bearbeiten und hinzufügen )
0 - Lesen Sie mehr über Docker (je mehr desto besser): Erstellen von Bildern mit der Docker-Datei , Best Practices , Vernetzung innerhalb von Docker, ...
1 - Installieren Sie Docker: Befolgen Sie immer die offizielle Anleitung .
2 - Erstellen Sie ein Verzeichnis mit Ihrem zukünftigen Bildnamen (/ home / user / docker / images / apache22php53, z. B.). Erstellen Sie darin Ihre Docker-Datei und Konfigurationen (in diesem Fall virtualhost conf). Meine Docker-Datei war:
Fügen Sie im Verzeichnis Ihre conf-Datei virtualhost in den Pfad ein: conf / apache / virtualhosts /
3 - Erstellen Sie das Bild mit (vorherige CD im Verzeichnis):
4 - Starten Sie den Container mit:
Docker ordnet den Host-Port 2253 (-p) dem Container-Port 80 zu. Wir mounten (-v) auch unseren Host-Dokumentstamm (/ var / www / html) im Apache-Container-Dokumentstamm (in Squeeze ist / var / www). Sie setzen auch den Containernamen (--name).
5 - ssh zum Container mit:
und starten Sie Apache bei Bedarf (wie in meinem Fall). "exit", um zum Host-Cli zurückzukehren.
6 - Navigieren Sie zu ... yourvhostdomain.com:2253 und Sie sollten sehen, dass Ihr Apache mit geladenem PHP5.3 ausgeführt wird.
Das sind die Grundlagen. Anschließend erfahren Sie, wie Sie Hostdaten (www, Datenbanken usw.) in Containern bereitstellen, wie Container zwischen ihnen und dem Host kommunizieren können (private IPs im Docker-Netzwerk) und wie Sie mit Docker-Compose mehrere Container einrichten sofort (Web, Datenbank usw.), Reverse-Proxy für mehrere Container-Webserver usw.
quelle