GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit různé verze PHP na stejném serveru

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


Linux
  1. Jak získat verze MySQL/Apache/PHP

  2. Jak spustit více verzí PHP s Nginx na Ubuntu?

  3. Jak zajistím, aby můj webový server Golang běžel na pozadí?

  1. Spusťte více verzí PHP pro různé domény v NGNIX

  2. Jak používat dvě různé verze Wine na stejné instalaci?

  3. Jak přiřadit různé statické IP adresy stejnému stroji v závislosti na jeho OS?

  1. jak spustit server tomcat v linuxu?

  2. Jak mohu spustit jiný příkaz, ale se stejnými argumenty?

  3. Jak přesměruji subdomény na jiný port na stejném serveru?