ЗАПУСК НЕСКОЛЬКИХ ВЕРСИЙ PHP НА ОДНОМ СЕРВЕРЕ. APACHE И PHP-FPM

Thank you for reading this post, don't forget to subscribe!

два сай­та PHP на одном сер­ве­ре. Каж­дый сайт будет исполь­зо­вать свой соб­ствен­ный домен, каж­дый домен будет раз­вер­ты­вать свою соб­ствен­ную вер­сию PHP. Пер­вый, site1.your_domain, исполь­зу­ет PHP 7.3; вто­рой, site2.your_domain, исполь­зу­ет вер­сию PHP 7.4.

1: Установка PHP 7.3 и PHP 7.4

Выпол­нив пред­ва­ри­тель­ные тре­бо­ва­ния к ману­а­лу, мы можем уста­но­вить PHP вер­сий 7.3 и 7.4, а так­же PHP-FPM и несколь­ко допол­ни­тель­ных рас­ши­ре­ний. Что­бы уста­но­вить несколь­ко вер­сий PHP на один сер­вер, необ­хо­ди­мо уста­но­вить и вклю­чить репо­зи­то­рий Remi. Этот репо­зи­то­рий пред­ла­га­ет послед­ние вер­сии сте­ка PHP для систе­мы CentOS 8.

Вы може­те доба­вить репо­зи­то­рий в свою систе­му, исполь­зуя сле­ду­ю­щую команду:

sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm

При­ве­ден­ная выше коман­да так­же акти­ви­ру­ет репо­зи­то­рий EPEL.

Сна­ча­ла давай­те узна­ем, какие вер­сии PHP 7 доступ­ны в Remi:

sudo dnf module list php

Вы уви­ди­те такой результат:

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                     Stream                       Profiles                                       Summary

php                      remi-7.2                     common [d], devel, minimal                     PHP scripting language

php                      remi-7.3                     common [d], devel, minimal                     PHP scripting language

php                      remi-7.4                     common [d], devel, minimal                     PHP scripting language

Теперь отклю­чи­те стан­дарт­ный модуль PHP и акти­ви­руй­те модуль PHP7.3 из Remi:

sudo dnf module reset php
sudo dnf module enable php:remi-7.3

Давай­те уста­но­вим php73 и php73-php-fpm:

sudo dnf install php73 php73-php-fpm -y

  • php73 — это мета­па­кет, кото­рый мож­но исполь­зо­вать для запус­ка при­ло­же­ния PHP.
  • php73-php-fpm предо­став­ля­ет интер­пре­та­тор Fast Process Manager, кото­рый рабо­та­ет как демон и при­ни­ма­ет запро­сы Fast/CGI.

Теперь повто­ри­те весь про­цесс для PHP вер­сии 7.4. Уста­но­ви­те php74 и php74-php-fpm.

sudo dnf module reset php
sudo dnf module enable php:remi-7.4
sudo dnf install php74 php74-php-fpm -y

После уста­нов­ки обе­их вер­сий PHP запу­сти­те сер­вис php73-php-fpm и вклю­чи­те его в авто­за­груз­ку с помо­щью сле­ду­ю­щих команд:

sudo systemctl start php73-php-fpm
sudo systemctl enable php73-php-fpm

Затем про­верь­те ста­тус сер­ви­са php73-php-fpm с помо­щью сле­ду­ю­щей команды:

sudo systemctl status php73-php-fpm

Вы уви­ди­те сле­ду­ю­щий результат:

php73-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php73-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-04-22 05:14:46 UTC; 52s ago
Main PID: 14206 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 5059)
Memory: 25.9M
CGroup: /system.slice/php73-php-fpm.service
├─14206 php-fpm: master process (/etc/opt/remi/php73/php-fpm.conf)
├─14207 php-fpm: pool www
├─14208 php-fpm: pool www
├─14209 php-fpm: pool www
├─14210 php-fpm: pool www
└─14211 php-fpm: pool www
Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.

Повто­ри­те этот про­цесс для вер­сии 7.4; запу­сти­те сер­вис php74-php-fpm и добавь­те его в авто­за­груз­ку с помо­щью сле­ду­ю­щих команд:

sudo systemctl start php74-php-fpm
sudo systemctl enable php74-php-fpm

А затем про­верь­те состо­я­ние сер­ви­са php74-php-fpm с помо­щью сле­ду­ю­щей команды:

sudo systemctl status php74-php-fpm

Вы уви­ди­те сле­ду­ю­щий результат:

php74-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php74-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-04-22 05:16:16 UTC; 23s ago
Main PID: 14244 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 5059)
Memory: 18.8M
CGroup: /system.slice/php74-php-fpm.service
├─14244 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
├─14245 php-fpm: pool www
├─14246 php-fpm: pool www
├─14247 php-fpm: pool www
├─14248 php-fpm: pool www
└─14249 php-fpm: pool www
Apr 22 05:16:15 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 22 05:16:16 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.

Теперь на вашем сер­ве­ре есть две вер­сии PHP. После это­го мы можем создать струк­ту­ру ката­ло­гов для каж­до­го сай­та, кото­рый дол­жен обслу­жи­вать­ся этим сервером.

2: Создание структуры каталогов для сайтов

Теперь мы созда­дим кор­не­вые ката­ло­ги для каж­до­го сай­та, кото­рый будет раз­вер­нут на этом сер­ве­ре. В нашем мануа­ле мы раз­вер­нем 2 сай­та: site1.your_domain и site2.your_domain. Созда­вая ката­ло­ги, ука­жи­те доме­ны ваших сайтов.

sudo mkdir /var/www/site1.your_domain
sudo mkdir /var/www/site2.your_domain

По умол­ча­нию веб-сер­вер Apache запус­ка­ет­ся как поль­зо­ва­тель и груп­па apache. Что­бы убе­дить­ся, что пра­ва соб­ствен­но­сти и досту­па на кор­не­вые ката­ло­ги сай­тов уста­нов­ле­ны вер­но, выпол­ни­те сле­ду­ю­щие команды:

sudo chown -R apache:apache /var/www/site1.your_domain
sudo chown -R apache:apache /var/www/site2.your_domain
sudo chmod -R 755 /var/www/site1.your_domain
sudo chmod -R 755 /var/www/site2.your_domain

Коман­да chown пере­да­ет пра­ва на ката­ло­ги сай­тов поль­зо­ва­те­лю apache и груп­пе apache. Коман­да chmod изме­ня­ет пра­ва досту­па это­го поль­зо­ва­те­ля и груп­пы, а так­же с дру­гих поль­зо­ва­те­лей в системе.

Затем внут­ри каж­до­го кор­не­во­го ката­ло­га мы созда­дим файл info.php. Поз­же он помо­жет нам отоб­ра­зить инфор­ма­цию о вер­сии PHP каж­до­го веб-сай­та. Нач­ни­те с site1:

sudo vi /var/www/site1.your_domain/info.php

Добавь­те в файл сле­ду­ю­щую строку:

<?php phpinfo(); ?>

Сохра­ни­те и закрой­те файл. Теперь ско­пи­руй­те создан­ный вами файл info.php для site2:

sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

Теперь у вас есть кор­не­вые ката­ло­ги, необ­хо­ди­мые каж­до­му сай­ту для обслу­жи­ва­ния дан­ных. Затем мы настро­им свой веб-сер­вер Apache для под­держ­ки двух раз­ных вер­сий PHP.

3: Настройка Apache для поддержки двух сайтов

В этом раз­де­ле вы созда­ди­те два фай­ла кон­фи­гу­ра­ции вир­ту­аль­но­го хоста. Это поз­во­лит двум вашим веб-сай­там одно­вре­мен­но рабо­тать с дву­мя раз­ны­ми вер­си­я­ми PHP.

Что­бы Apache обслу­жи­вал этот кон­тент, необ­хо­ди­мо создать файл вир­ту­аль­но­го хоста с пра­виль­ны­ми дирек­ти­ва­ми. Вы созда­ди­те два новых фай­ла кон­фи­гу­ра­ции вир­ту­аль­но­го хоста в ката­ло­ге /etc/httpd/conf.d/.

Сна­ча­ла создай­те новый кон­фи­гу­ра­ци­он­ный файл вир­ту­аль­но­го хоста для сай­та site1.your_domain. Здесь мы настро­им Apache для обра­бот­ки кон­тен­та с помо­щью php7.3.

sudo vi /etc/httpd/conf.d/site1.your_domain.conf

Вставь­те в файл такие стро­ки. Убе­ди­тесь, что вы ука­за­ли пра­виль­ный путь к кор­не­во­му ката­ло­гу, ServerName и вер­сию PHP.

[codesyntax lang="php"]

[/codesyntax]

В DocumentRoot ука­жи­те путь к кор­не­во­му ката­ло­гу ваше­го веб-сай­та. В ServerAdmin ука­жи­те адрес элек­трон­ной почты для адми­ни­стра­то­ра сай­та your_domain. В дирек­ти­ве ServerName опре­де­ля­ет­ся URL-адрес пер­во­го под­до­ме­на. В SetHandler нуж­но задать файл соке­та PHP-FPM для php7.3.

Сохра­ни­те и закрой­те файл.

Затем создай­те новый кон­фи­гу­ра­ци­он­ный файл вир­ту­аль­но­го хоста для сай­та site2.your_domain. Этот под­до­мен будет обслу­жи­вать­ся вер­си­ей php7.4.

sudo vi /etc/httpd/conf.d/site2.your_domain.conf

Добавь­те сле­ду­ю­щий код в файл. Убе­ди­тесь, что путь к кор­не­во­му ката­ло­гу, ServerName и вер­сия PHP соот­вет­ству­ют вашей конфигурации.

[codesyntax lang="php"]

[/codesyntax]

Сохра­ни­те и закрой­те файл. Затем про­верь­те кон­фи­гу­ра­ции Apache на нали­чие син­так­си­че­ских оши­бок с помо­щью сле­ду­ю­щей команды:

sudo apachectl configtest

Если оши­бок нет, вы уви­ди­те вывод:

Syntax OK

Теперь мож­но пере­за­пу­стить сер­вис Apache, что­бы изме­не­ния всту­пи­ли в силу:

sudo systemctl restart httpd

Теперь, когда мы настро­и­ли Apache для обслу­жи­ва­ния каж­до­го сай­та, мы долж­ны про­те­сти­ро­вать их, что­бы убе­дить­ся, что все рабо­та­ет правильно.

4: Тестирование настройки

Итак, мы уже настро­и­ли два веб-сай­та, кото­рые рабо­та­ют на двух раз­ных вер­си­ях PHP. Давай­те про­ве­рим результаты.

Открой­те бра­у­зер и посе­ти­те оба сайта.

http://site1.your_domain
http://site2.your_domain

Вы уви­ди­те две стра­ни­цы с инфор­ма­ци­ей о PHP. Обра­ти­те вни­ма­ние на заго­лов­ки этих стра­ниц. На пер­вой стра­ни­це ука­за­но, что site1.your_domain исполь­зу­ет PHP вер­сии 7.3. Вто­рая стра­ни­ца сооб­ща­ет, что site2.your_domain раз­вер­нул PHP вер­сии 7.4.

Теперь, когда вы про­ве­ри­ли свои сай­ты, уда­ли­те фай­лы info.php. Они содер­жат кон­фи­ден­ци­аль­ную инфор­ма­цию о вашем сер­ве­ре и доступ­ны неав­то­ри­зо­ван­ным поль­зо­ва­те­лям – сле­до­ва­тель­но, они пред­став­ля­ют собой уяз­ви­мость систе­мы без­опас­но­сти. Что­бы уда­лить оба фай­ла, выпол­ни­те сле­ду­ю­щие команды:

sudo rm -rf /var/www/site1.your_domain/info.php
sudo rm -rf /var/www/site2.your_domain/info.php