Někdy SysAdmin obdrží podivné požadavky. Například:před pár dny můj klient potřeboval nahrát nový web, tento nový web potřebuje PHP7.4, zatímco jejich server běží s PHP7.2. Nainstaloval jsem tehdy 7.4, ale všechny ostatní VirtualHosts (alespoň ty důležité) se pod php7.4 zlomily. Původně jsem přemýšlel o nějakém druhu kontejnerů, ale našel jsem něco jednoduššího. Takto lze spouštět různé verze PHP na stejném serveru.
Moje nastavení
Vždy vytvářím nebo znovu používám virtuální stroj pro všechny své články zde. Protože byste měli vždy otestovat, než něco důležitého zlomíte.
Pro tento tutoriál jsem vytvořil novou instalaci ¿starého? Server Ubuntu 18.04. Budu mít web, sitio1 (sitio je web ve španělštině), který potřebuje PHP 7.2; a další web, který potřebuje PHP 7.4, sitio2 .
1. Přidejte Ondřej php repozitář
Za mých časů jste museli konfigurační soubory upravovat ručně. Nyní však máme tento balíček software-properties-common, který umožňuje snadnou správu vaší distribuce a zdrojů softwaru nezávislých dodavatelů softwaru.
Takže naším prvním krokem je nainstalovat tento balíček:
sudo apt-get install software-properties-common

Naším 2. krokem je skutečně přidat úložiště spuštěním:
sudo add-apt-repository ppa:ondrej/php

Věnujte pozornost zprávám na obrazovce a postupujte podle pokynů. Potom spusťte
sudo apt-get update
2. Nainstalujte dvě různé verze PHP
2.1. PHP 7.2
Cílem tohoto tutoriálu je ukázat vám, jak se mi podařilo spustit různé verze php na stejném serveru. Neinstaluji (téměř) žádný php modul, ale pokud to čtete, určitě některé z nich potřebujete, například podporu mysql. Nezapomeňte je nainstalovat.
sudo apt-get install php7.2 php7.2-fpm libapache2-mod-php7.2 libapache2-mod-fcgid

2.2 PHP 7.4
Nyní opakujte proces s php 7.4. Nezapomeňte nainstalovat potřebné php moduly.
sudo apt-get install php7.4 php7.4-fpm libapache2-mod-php7.4

3. Spusťte služby fpm
Nyní musíme spustit službu fpm pro obě verze
sudo systemctl start php7.2-fpm sudo systemctl start php7.4-fpm
Poté můžete zkontrolovat stav těchto spuštěných služeb:
sudo systemctl status php7.x-fpm

4. Vytváření virtuálních hostitelů
4.1 Data VirtualHost
Chystáme se vytvořit první adresáře pod /var/www pro každého VirtualHost.
mkdir /var/www/sitio1 mkdir /var/www/sitio2 chown -R www-data:www-data /var/www
Za druhé, vytvořte v každém adresáři soubor php s následujícím obsahem pouze pro zobrazení informací o php:
<?php
phpinfo();
?>

4.2 Konfigurace VirtualHost
Potřebujeme vytvořit soubor .conf pro každý web s následujícím obsahem:
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>
Vytvořte další soubor /etc/apache2/sites-available/sitio2.conf, který změní správné informace (sitio1 se změní na sitio2, php7.2 se změní na php7.4 atd.)

5. Přidejte informace DNS
Nebo ne. Myslím tím, že v reálném životě budete muset vytvořit správné záznamy DNS pro obě stránky. Protože je to pouze pro účely testování a učení, vytvářím záznamy pouze na svém /etc/hosts
soubor. IP adresa tohoto virtuálního počítače je 192.168.122.14

Vím, že jsem schopen vyřešit sitio1 a sitio2.
6. Povolení všeho
Musíme povolit některé moduly Apache potřebné pro zpracování této konfigurace. Poté povolit tyto virtuální hostitele a nakonec spustit apache:
sudo a2enmod actions fcgid alias proxy_fcgi sudo a2ensite sitio1 sudo a2ensite sitio2 sudo systemctl start apache2

Můžete také otestovat konfiguraci na překlepy, chybějící moduly nebo jakýkoli jiný problém pomocí apachetcl configtest
.
7. zkušební čas
Nyní musíme nasměrovat prohlížeč na http://sitio1 a http://sitio2 a zkontrolovat, zda používají správnou verzi PHP:


¡Jo!. A to je způsob, jak spustit různé verze PHP na stejném serveru. Teď jsem zvědavý, jaké další kombinace bych mohl vyzkoušet.
Bonus:Starší ubuntus
Můj klient má ve skutečnosti Ubuntu 16, které přestalo být podporováno v dubnu 2021. Úložiště, které jsem musel přidat, bylo ppa:tomvlk/php-archive