Manchmal erhält ein SysAdmin seltsame Anfragen. Zum Beispiel:Vor ein paar Tagen musste mein Kunde eine neue Seite hochladen, diese neue Seite benötigt PHP7.4, während ihr Server mit PHP7.2 läuft. Ich habe damals 7.4 installiert, aber alle anderen VirtualHosts (zumindest die wichtigen) sind unter php7.4 kaputt gegangen. Anfangs dachte ich an eine Art Container, aber ich habe etwas Einfacheres gefunden. So führen Sie verschiedene PHP-Versionen auf demselben Server aus.
Mein Setup
Ich erstelle oder verwende hier immer eine virtuelle Maschine für alle meine Artikel. Denn man sollte immer vor der Pause etwas Wichtiges testen.
Für dieses Tutorial habe ich eine Neuinstallation eines ¿alten? Ubuntu-Server 18.04. Ich werde eine Website haben, sitio1 (sitio ist eine Website auf Spanisch), die PHP 7.2 benötigt; und eine andere Site, die PHP 7.4 benötigt, sitio2 .
1. Fügen Sie das Ondrej-PHP-Repository hinzu
Zu meiner Zeit musste man Konfigurationsdateien von Hand bearbeiten. Aber jetzt haben wir dieses Paket Software-Properties-Common, um Ihre Distribution und Softwarequellen unabhängiger Softwareanbieter einfach zu verwalten.
Unser erster Schritt besteht also darin, dieses Paket zu installieren:
sudo apt-get install software-properties-common
Unser zweiter Schritt besteht darin, das Repository tatsächlich hinzuzufügen, indem Sie Folgendes ausführen:
sudo add-apt-repository ppa:ondrej/php
Achten Sie auf die Meldungen auf dem Bildschirm und befolgen Sie die Anweisungen. Dann ausführen
sudo apt-get update
2. Installieren Sie zwei verschiedene PHP-Versionen
2.1. PHP 7.2
Das Ziel dieses Tutorials ist es, Ihnen zu zeigen, wie ich es geschafft habe, verschiedene PHP-Versionen auf demselben Server auszuführen. Ich installiere (fast) kein PHP-Modul, aber wenn Sie dies lesen, brauchen Sie sicherlich einige davon, zum Beispiel MySQL-Unterstützung. Vergessen Sie nicht, sie zu installieren.
sudo apt-get install php7.2 php7.2-fpm libapache2-mod-php7.2 libapache2-mod-fcgid
2.2 PHP 7.4
Wiederholen Sie nun den Vorgang mit php 7.4. Denken Sie daran, die benötigten PHP-Module zu installieren.
sudo apt-get install php7.4 php7.4-fpm libapache2-mod-php7.4
3. fpm-Dienste starten
Jetzt müssen wir den fpm-Dienst für beide Versionen starten
sudo systemctl start php7.2-fpm sudo systemctl start php7.4-fpm
Sie können dann den Status der laufenden Dienste überprüfen:
sudo systemctl status php7.x-fpm
4. Erstellen der VirtualHosts
4.1 VirtualHost-Daten
Wir werden erste Verzeichnisse unter /var/www für jeden VirtualHost erstellen.
mkdir /var/www/sitio1 mkdir /var/www/sitio2 chown -R www-data:www-data /var/www
Zweitens erstellen Sie in jedem Verzeichnis eine PHP-Datei mit folgendem Inhalt, nur um PHP-Informationen anzuzeigen:
<?php
phpinfo();
?>
4.2 VirtualHost-Konfiguration
Wir müssen für jede Site eine .conf-Datei mit folgendem Inhalt erstellen:
nano /etc/apache2/sites-available/sitio1.conf <VirtualHost *:80> ServerAdmin admin@sitio1 ServerName sitio1 DocumentRoot /var/www/sitio1 DirectoryIndex info.php <Directory /var/www/sitio1> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <FilesMatch \.php$> # this part do the trick SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/sitio1_error.log CustomLog ${APACHE_LOG_DIR}/sitio1_access.log combined </VirtualHost>
Erstellen Sie eine weitere Datei /etc/apache2/sites-available/sitio2.conf und ändern Sie die richtigen Informationen (sitio1 wird sitio2, php7.2 wird php7.4 usw.)
5. DNS-Informationen hinzufügen
Oder nicht. Ich meine, im wirklichen Leben müssen Sie für beide Seiten die richtigen DNS-Einträge erstellen. Da dies nur zu Test- und Lernzwecken dient, erstelle ich nur Datensätze auf meinen /etc/hosts
Datei. Die IP-Adresse dieser virtuellen Maschine lautet 192.168.122.14
Wissen, dass ich sitio1 und sitio2 auflösen kann.
6. Alles aktivieren
Wir müssen einige Apache-Module aktivieren, die für diese Konfiguration erforderlich sind. Dann diese virtuellen Hosts aktivieren und schließlich Apache starten:
sudo a2enmod actions fcgid alias proxy_fcgi sudo a2ensite sitio1 sudo a2ensite sitio2 sudo systemctl start apache2
Sie können die Konfiguration auch auf Rechtschreibfehler, fehlende Module oder andere Probleme mit apachetcl configtest
testen .
7. Testzeit
Jetzt müssen wir einen Browser auf http://sitio1 und http://sitio2 verweisen und prüfen, ob dort die richtige PHP-Version ausgeführt wird:
Yay!. Und so können Sie verschiedene PHP-Versionen auf demselben Server ausführen. Jetzt bin ich gespannt, welche anderen Kombinationen ich ausprobieren könnte.
Bonus:Ältere Ubuntus
Mein Kunde hat tatsächlich Ubuntu 16, das im April 2021 nicht mehr unterstützt wurde. Das Repository, das ich hinzufügen musste, war ppa:tomvlk/php-archive