DISCLAIMER: стаття написана PHP програмістом, який вирішив у першій годині ночі побути у ролі DevOps.
Попередня конфігурація: Ubuntu 16.04, Apache2
Буває, що на одному і тому ж веб-сервері працює одразу декілька веб-сайтів, і кожному з них потрібно певну версію PHP. За допомогою apache mod PHP можна одночасно використовувати лише одну версію PHP для усіх сайтів.
Ми покажемо як одночасно використовувати:
- php5.6 для веб-сайту http://php56.loc із встановленою Magento 1.7
- php7.2 для веб-сайту http://php72.loc із встановленою Magento 2.3.0.
Для вирішення цієї проблеми необхідно налаштувати PHP-FPM.
1. Встановіть PHP5.6 та PHP-FPM5.6
sudo apt install libapache2-mod-fastcgi php5.6-fpm php5.6 libapache2-mod-php5.6 php5.6-curl php5.6-intl php5.6-zip php5.6-soap php5.6-xml php5.6-mysqli php5.6-gd php5.6-mcrypt php5.6-mbstring php5.6-bcmath php5.6-pdo php5.6-xml php5.6-mysql
2. Встановіть PHP7.2 та PHP-FPM7.2
sudo apt install libapache2-mod-fastcgi php7.2-fpm php7.2 libapache2-mod-php7.2 php7.2-curl php7.2-intl php7.2-zip php7.2-soap php7.2-xml php7.2-mysqli php7.2-gd php7.2-mbstring php7.2-bcmath php7.2-pdo php7.2-xml php7.2-mysql
Команди для встановлення двох різних версій дуже схожі, відрізняються лише відсутністю php7.2-mcrypt у php7.2.
5. Вимкніть усі PHP Apache моди
Для того, щоб перевірити, чи увімкнені, пов'язані із PHP Apache моди, виконайте таку команду:
sudo ls -la /etc/apache2/mods-enabled | grep php
Результат виконання може мати такий вигляд:
lrwxrwxrwx 1 root root 29 лют 9 17:16 php7.2.conf -> ../mods-available/php7.2.conf
lrwxrwxrwx 1 root root 29 лют 9 17:16 php7.2.load -> ../mods-available/php7.2.load
lrwxrwxrwx 1 root root 29 лют 9 17:16 php5.6.conf -> ../mods-available/php5.6.conf
lrwxrwxrwx 1 root root 29 лют 9 17:16 php5.6.load -> ../mods-available/php5.6.load
Вимкніть моди, які були знайдені. Виконайте команди:
sudo a2dismod php5.6
sudo a2dismod php7.2
6. Вимкніть усі PHP Apache налаштування
Для перевірки увімкненості, пов'язаних із PHP Apache налаштувань, виконайте команду:
sudo ls -la /etc/apache2/conf-enabled | grep php
Щоб вимкнути знайдені налаштування, виконайте команду:
sudo a2disconf назва_конфіга
7. Увімкніть actions та fastcgi Apache2 моди
sudo a2enmod actions
sudo a2enmod fastcgi
8. Увімкніть PHP-FPM Apache2 конфіги
sudo a2enconf php5.6-fpm
sudo a2enconf php7.2-fpm
9. Налаштуйте Default Apache virtualhost
Додайте цей код у дефолтний віртуальний хоста Apache2 (Ви можете додати його наприклад на початок файлу)
<IfModule mod_fastcgi.c>
AddHandler php56-fcgi-www .php
Action php56-fcgi-www /php56-fcgi-www
Alias /php56-fcgi-www /usr/lib/cgi-bin/php56-fcgi-www
FastCgiExternalServer /usr/lib/cgi-bin/php56-fcgi-www -socket /run/php/php5.6-fpm.sock -pass-header Authorization
<Directory "/usr/lib/cgi-bin">
Require all granted
</Directory>
</IfModule>
<IfModule mod_fastcgi.c>
AddHandler php72-fcgi-www .php
Action php72-fcgi-www /php72-fcgi-www
Alias /php72-fcgi-www /usr/lib/cgi-bin/php72-fcgi-www
FastCgiExternalServer /usr/lib/cgi-bin/php72-fcgi-www -socket /run/php/php7.2-fpm.sock -idle-timeout 1800 -pass-header Authorization
<Directory "/usr/lib/cgi-bin">
Require all granted
</Directory>
</IfModule>
10. Увімкніть PHP5.6 для http://php56.loc
Для цього у файлі віртуального хоста цього ж домену (тег <VirtualHost>) вставте код:
<VirtualHost *:80>
...
<IfModule mod_fastcgi.c>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php56-fcgi-www
</FilesMatch>
</IfModule>
...
</VirtualHost>
11. Увімкніть PHP7.2 для http://php72.loc
Для цієї дії у файлі віртуального хоста цього домену (тег <VirtualHost>) вставте код:
<VirtualHost *:80>
...
<IfModule mod_fastcgi.c>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php72-fcgi-www
</FilesMatch>
</IfModule>
...
</VirtualHost>
12. Перезапустіть Apache2
sudo service apache2 restart
13. Перевірте результат
Це можна зробити за допомогою файлу info.php з кодом:
<?php echo phpinfo();
Посилання на джерела з яких взяті деякі команди:
https://stackoverflow.com/questions/42696856/running-two-php-versions-on-the-same-server (Running two PHP versions on the same server)
https://medium.com/@sbuckpesch/run-multiple-php-version-on-the-same-server-using-php-fpm-and-xdebug-on-ubuntu-16-04-6a84f5b7d7ce (Run multiple PHP version on the same server using php-fpm and xdebug on Ubuntu 16.04)