php fpm несколько версий php
Nginx + несколько версий php-fpm
Nginx + несколько версий php-fpm
Post by dmitry_stas » Sun Feb 18, 2018 10:10 pm
Нужны одновременно php5.6 и php7. Если просто устанавливаю второй версию php5.6, то панель начинает ругаться
при создании/редактировании домена.
Есть способ сделать несколько версий php-fpm?
Re: Nginx + несколько версий php-fpm
Post by imperio » Mon Feb 19, 2018 8:45 am
Здравствуйте. Можете посмотреть эту тему, но вроде для php-fpm нельзя.
Из коробки php селектор планируется.
Re: Nginx + несколько версий php-fpm
Post by dmitry_stas » Mon Feb 19, 2018 9:39 am
а для php5 правлю потом конфиг сайта руками. Это конечно так себе велосипед, но другого пока не смог придумать. Шаблонами там не решить, нужно менять логику ядра, добавлять именно селект выбора php, и дальше уже с его значением работать.
А не подскажите ориентировочные сроки селектора из коробки?
Re: Nginx + несколько версий php-fpm
Post by Deeryo » Mon Feb 19, 2018 11:21 am
Re: Nginx + несколько версий php-fpm
Post by dmitry_stas » Mon Feb 19, 2018 6:00 pm
Привет, спасибо, это тоже читал.
Откровенно говоря я не могу понять как это у вас работает. В domain.sh prepare_web_backend есть определение папки pool.d
Re: Nginx + несколько версий php-fpm
Post by Deeryo » Tue Feb 20, 2018 9:45 am
Re: Nginx + несколько версий php-fpm
Post by demian » Tue Feb 20, 2018 1:32 pm
Из коробки php селектор планируется.
если вы хотите поставить phpbrew, не знаю как оно под бубунту(имхо не является нормальной сборкой OS Linux) и дебиан, под Centos не надо оно кривое.
если под центос нужны несколько версий пыха. remi репозитории есть готовые сборки пакетов которые ставятся рядом. нужны только линки и шаблоны.
php 5.2 и 5.3 не соберутся на новой системе, используя адаптированный под centos 7, набором скриптов phpbrew, следовательно оно абсолютно бесполезно. да и реализация php-fpm для версий 5.2 и 5.3 некорректная, лучше пускать php-cgi или spawn-fcgi
ТС: под CentOS без проблем можно запустить пулы с разными версиями php-fpm, с небольшой правкой шаблонов.
ЗЫ: сам не использовал реализацию пулов реализованную в Vesta.
ЗЫЫ: мануал писать как скомпилировать 5.2 и 5.2 под центос не буду слишком много нюансов и правки исходников, желающим могу выложить скомпилированные версии под центос 7 x64.
Несколько версий PHP на хосте с помощью Docker
Часто перед разработчиками PHP встаёт задача проверить работу веб-приложения под несколько версий интерпретатора. Решить её можно разными способами. Можно банально установить разные версии PHP на один хост, но это чревато конфликтами библиотек и другими сложностями. Вторая крайность — сделать несколько изолированных виртуальных машин с разным окружением, но здесь не обойтись без чрезмерного использования аппаратных ресурсов и излишней траты времени на разворачивание рабочего окружения. На настоящий момент наиболее просто решить данную задачу можно с помощью Docker.
Ниже я опишу рабочее решение под Ubuntu 18, где в качестве стека используется связка Nginx + PHP-FPM. Данное решение легко масштабируется: контейнер с PHP-FPM занимает всего 300 Мб в памяти, а добавить контейнеры с другими версиями интерпретатора можно тремя командами (или в зависимости от предпочтений даже одной — run). Второй плюс этого решения в том, что разработчику не нужно переключать веб-сервер между интерпретаторами, так как они уже разнесены в разные контейнеры (код приложения при этом используется один и тот же).
Дополнение: Судя по комментариям, некоторые читатели не поняли, для каких случаев подходит описанное решение. Поэтому хочу обратить внимание, что всё нижеизложенное предназначено для использования ИСКЛЮЧИТЕЛЬНО на рабочей станции разработчика, а также может с некоторыми оговорками подойти для стейдж-сервера.
1. Устанавливаем Docker
2. Устанавливаем контейнеры с нужными версиями PHP
В качестве примера создания рабочего окружения использованы PHP версий 7.1 и 7.2 из официального Docker-репозитория PHP. По аналогии при наличии образа можно установить какие угодно версии PHP:
PHP-FPM по умолчанию работает на 9000 порту. При создании образов мы опубликовали 9000-е порты контейнеров на свободные 9071 и 9072 порты хост-машины (номера взяты произвольно из непривилегированного диапазона). Далее на эти порты мы будем проксировать запросы на обработку PHP (параметр fastcgi_pass в конфигурации виртуальных хостов Nginx).
Также понадобилось пробросить внутрь контейнеров каталог с проектами (/var/www), иначе PHP-FPM ругается, что не видит файлов (если знаете, как сделать этот момент лучше/правильней, то пишите в комментарии).
Проверяем, что контейнеры запущены, а порты опубликованы правильно:
3. Настраиваем окружение для виртуальных хостов
Добавляем в /etc/hosts строки:
Создаём каталог для проекта:
Название для проекта (project.local) и виртуальных хостов (project.local.php71/72) я взял произвольно, но вы можете использовать удобные для вас названия (только не забудьте при этом поменять настройки виртуальных хостов).
Изначально в индексный файл была положена только одна команда phpinfo, после настройки и проверки работоспособности системы, index.php нужно будет заменить на тот, что используется в проекте.
4. Устанавливаем nginx и настраиваем виртуальные хосты
Создаём файл /etc/nginx/sites-available/project.local.php71 с описанием первого виртуального хоста (он будет использоваться для проверки работы проекта под PHP v.7.1):
Точно так же файл /etc/nginx/sites-available/project.local.php72 для второго виртуального хоста:
Теперь делаем симлинки на вышесозданные конфигурации виртуальных хостов и перегружаем Nginx:
5. Проверяем
В качестве результата мы должны получить версию PHP (как результат обработки команды phpinfo интерпретаторами разных версий).
NGINX + PHP-FPM. Как запускать разные версии PHP для разных юзеров?
Есть сервер, на котором в данный момент NGINX + PHP-FPM как fastcgi. Версия PHP 5.6. Каждый отдельный сайт создаётся на сервере под новым юзером. Отсюда несколько вопросов:
1) Как можно установить рядом с PHP 5.6 ещё и версию PHP7?
2) Можно ли в итоге в каком-то конфиге для юзера будет прописать, какую версию PHP запускать для него?
DevMan: Спасибо за информацию! А вообще я задавал также и второй вопрос, как раз о запуске из под разных юзеров разных версий ПХП:
«2) Можно ли в итоге в каком-то конфиге для юзера будет прописать, какую версию PHP запускать для него?»
DevMan:
в мане все комманды от юзера, а в твоем комменте бинарники ложаться в /opt
Мне не совсем понятно, ето автоматизация управления версиями на уровне пользователя или на уровне системы?
Если на уровне системы, то пхп-фпм добавляется в автостарт и можно ли ето поведение изменить?
sim3x: > ето автоматизация управления версиями на уровне пользователя или на уровне системы?
это как сами хотите: может быть per user, может быть system-wide.
> можно ли ето поведение изменить?
емнип, phpbrew ничего не добавляет в автостарт.
Запуск нескольких версий PHP на одном сервере с помощью Apache и PHP-FPM в Ubuntu 20.04
Веб-сервер Apache использует виртуальные хосты для управления несколькими доменами в рамках одного сервера. Точно так же для управления несколькими версиями PHP в рамках одного сервера PHP-FPM использует специальный демон. Объединив эти возможности Apache и PHP-FPM, вы можете одновременно разместить на одном сервере несколько веб-приложений PHP, каждое из которых будет использовать индивидуальную версию PHP. Это удобно, потому что для разных приложений могут потребоваться разные версии PHP, но обычно серверные стеки (например, стандартный LAMP) могут управлять только одной версией. Сочетание Apache с PHP-FPM – экономное решение, ведь вам не придется размещать каждое приложение на отдельном сервере.
PHP-FPM также предлагает параметры для логирования stderr и stdout, аварийных перезапусков и адаптивного порождения процессов, что полезно для сайтов с высоким трафиком.
Фактически связка Apache+PHP-FPM – один из лучших стеков для размещения приложений PHP, особенно когда дело касается производительности. PHP-FPM не только позволяет запускать несколько версий PHP одновременно, он также предоставляет множество дополнительных функций, что полезно для сильно загруженных сайтов.
В этом мануале мы покажем, как запустить два сайта PHP на одном сервере. Каждый сайт будет использовать свой собственный домен, каждый домен будет развертывать свою собственную версию PHP. Первый, site1.your_domain, использует PHP 7.2; второй, site2.your_domain, использует версию PHP 7.3.
Требования
1: Установка PHP 7.2 и PHP 7.3
Выполнив предварительные требования к мануалу, мы можем установить PHP версий 7.2 и 7.3, а также PHP-FPM и несколько дополнительных расширений. Для начала нам необходимо включить репозиторий Ondrej PHP.
Прежде чем добавить репозиторий в свою систему, установите software-properties-common:
Этот пакет предоставляет команду apt-add-repository, с помощью которой вы сможете добавить PPA-репозиторий ondrej/php.
Теперь добавьте репозиторий ondrej/php в вашу систему. Этот PPA (Personal Package Archive) содержит более современные версии PHP, чем официальные репозитории Ubuntu, а также позволит вам установить несколько версий PHP в одной системе.
sudo add-apt-repository ppa:ondrej/php
Затем установите php7.2, php7.2-fpm, php7.2-mysql, libapache2-mod-php7.2 и libapache2-mod-fcgid с помощью следующей команды:
Теперь повторите весь процесс для PHP версии 7.3. Установите php7.3, php7.3-fpm, php7.3-mysql и libapache2-mod-php7.3:
После установки обеих версий PHP запустите сервис php7.2-fpm:
sudo systemctl start php7.2-fpm
Затем проверьте статус этого сервиса с помощью следующей команды:
sudo systemctl status php7.2-fpm
Вы увидите следующий результат:
Повторите этот процесс для версии 7.3; запустите сервис php7.3-fpm:
sudo systemctl start php7.3-fpm
А затем проверьте состояние сервиса с помощью следующей команды:
sudo systemctl status php7.3-fpm
Вы увидите следующий результат:
В заключение вам нужно включить пару модулей, чтобы сервис Apache2 мог поддерживать несколько версий PHP одновременно:
sudo a2enmod actions fcgid alias proxy_fcgi
Перезапустите Apache, чтобы изменения вступили в силу:
sudo systemctl restart apache2
Теперь на вашем сервере есть две версии PHP. После этого мы можем создать структуру каталогов для каждого сайта, который должен обслуживаться этим сервером.
2: Создание структуры каталогов для сайтов
Теперь мы создадим корневые каталоги для каждого сайта, который будет развернут на этом сервере. В нашем мануале мы развернем 2 сайта: site1.your_domain и site2.your_domain. Создавая каталоги, укажите домены ваших сайтов.
sudo mkdir /var/www/site1.your_domain
sudo mkdir /var/www/site2.your_domain
По умолчанию веб-сервер Apache запускается как пользователь и группа www-data. Чтобы убедиться, что права собственности и доступа на корневые каталоги сайтов установлены верно, выполните следующие команды:
Затем внутри каждого корневого каталога мы создадим файл info.php. Позже он поможет нам отобразить информацию о версии PHP каждого веб-сайта. Начните с site1:
sudo nano /var/www/site1.your_domain/info.php
Добавьте в файл следующую строку:
Сохраните и закройте файл. Теперь скопируйте созданный вами файл 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/apache2/sites-available/000-default.conf, мы создадим два новых файла в каталоге /etc/apache2/sites-available/.
Сначала создайте конфигурационный файл виртуального хоста для сайта site1.your_domain. Здесь мы настроим Apache для обработки контента с помощью php7.2.
sudo nano /etc/apache2/sites-available/site1.your_domain.conf
Вставьте в файл следующие строки. Убедитесь, что вы указали правильный путь к корневому каталогу, ServerName и версию PHP.
В DocumentRoot укажите путь к корневому каталогу вашего веб-сайта. В ServerAdmin укажите адрес электронной почты для администратора сайта your_domain. В директиве ServerName определяется URL-адрес первого поддомена. Директива SetHandler позволяет запускать PHP как процесс fastCGI.
Сохраните и закройте файл.
Затем создайте новый конфигурационный файл виртуального хоста для сайта site2.your_domain. Этот поддомен будет обслуживаться версией php7.3.
sudo nano /etc/apache2/sites-available/site2.your_domain.conf
Добавьте следующий код в файл. Убедитесь, что путь к корневому каталогу, ServerName и версия PHP соответствуют вашей конфигурации.
Сохраните и закройте файл. Затем проверьте конфигурации Apache на наличие синтаксических ошибок с помощью следующей команды:
sudo apachectl configtest
Если ошибок нет, вы увидите вывод:
Теперь включите новые виртуальные хосты:
sudo a2ensite site1.your_domain
sudo a2ensite site2.your_domain
Отключите стандартный виртуальный хост, так как в дальнейшем он нам не понадобится:
sudo a2dissite 000-default.conf
После этого можно перезапустить сервис Apache, чтобы изменения вступили в силу:
sudo systemctl restart apache2
Теперь, когда мы настроили Apache для обслуживания каждого сайта, мы должны протестировать сайты и убедиться, что все работает правильно.
4: Тестирование настройки
Итак, мы уже настроили два веб-сайта, которые работают на двух разных версиях PHP. Давайте проверим результаты.
Откройте браузер и посетите оба сайта.
Вы увидите две страницы с информацией о PHP. Обратите внимание на заголовки этих страниц. На первой странице указано, что site1.your_domain использует PHP версии 7.2. Вторая страница сообщает, что site2.your_domain развернул PHP версии 7.3.
Теперь, когда вы проверили свои сайты, удалите файлы info.php. Они содержат конфиденциальную информацию о вашем сервере и доступны неавторизованным пользователям – следовательно, они представляют собой уязвимость системы безопасности. Чтобы удалить оба файла, введите:
Теперь у вас есть сервер Ubuntu 20.04, обслуживающий два веб-сайта с двумя разными версиями PHP.
Заключение
В этом мануале вы научились объединять виртуальные хосты и PHP-FPM для обслуживания нескольких веб-сайтов и нескольких версий PHP на одном сервере. Единственное практическое ограничение на количество сайтов PHP и версий PHP, которые может обрабатывать Apache, – это вычислительная мощность вашего экземпляра.
Здесь вы можете изучить более продвинутые функции PHP-FPM, такие как адаптивное порождение процессов или возможности логирования sdtout и stderr. Кроме того, теперь вы можете защитить свои сайты с помощью бесплатных сертификатов TLS/SSL от Let’s Encrypt.
Запуск нескольких версий PHP на одном сервере с использованием Apache и PHP-FPM в Ubuntu 18.04
Published on April 29, 2020
Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.
Введение
Веб-сервер Apache использует виртуальные хосты для управления несколькими доменами в одной системе. PHP-FPM использует демона для управления несколькими версиями PHP в одной системе. Вы можете использовать Apache и PHP-FPM для одновременного хостинга на одном сервере нескольких веб-приложений PHP на основе разных версий PHP. Эта возможность полезна, поскольку разным приложениям могут требоваться разные версии PHP, но некоторые серверные комплексы, в том числе стек LAMP в стандартной конфигурации, могут работать только с одной версией. Сочетание Apache с PHP-FPM более экономично по сравнению с хостингом каждого приложения на отдельном экземпляре сервера.
В этом обучающем руководстве мы настроим два сайта PHP для работы на одном экземпляре сервера. Каждый сайт будет использовать собственный домен, и на каждом домене будет использоваться собственная версия PHP. Первый сайт site1.your_domain развернет PHP 7.0. Второй сайт site2.your_domain развернет PHP 7.2.
Предварительные требования
Шаг 1 — Установка PHP версий 7.0 и 7.2 с помощью PHP-FPM
Запустите команду apt-get для установки software-properties-common :
После установки обеих версий PHP запустите службу php7.0-fpm :
Затем проверьте статус службы php7.0-fpm :
Вывод должен выглядеть так:
Повторите процедуру и запустите службу php7.2-fpm :
Проверьте статус службы php7.2-fpm :
Вывод должен выглядеть так:
В заключение необходимо активировать несколько модулей, чтобы служба Apache2 могла работать с несколькими версиями PHP:
actions используется для выполнения скриптов CGI на основе типа носителя или метода запроса.
alias позволяет создавать схемы разных деталей файловой системы хоста в дереве документов и для целей переадресации URL.
proxy_fcgi позволяет Apache перенаправлять запросы PHP-FPM.
Перезапустите службу Apache, чтобы применить изменения:
Мы установили на сервере две версии PHP. Теперь создадим структуру директорий для каждого сайта, который будем развертывать.
Шаг 2 — Создание структур директорий для обоих сайтов
В этом разделе мы создадим корневую директорию документов и страницу индекса для каждого из двух сайтов.
Вначале создайте корневые директории документов для site1.your_domain и site2.your_domain :
Далее вы создадите файл info.php в корневой директории каждого сайта. В нем будет отображаться информация о версии PHP для каждого сайта. Начнем с site1 :
Добавьте следующую строку:
Сохраните и закройте файл. Скопируйте созданный файл info.php в site2 :
Теперь на вашем веб-сервере должны иметься корневые директории документов, которые требуются каждому сайту для предоставления данных посетителям. Далее мы настроим веб-сервер Apache для работы с двумя разными версиями PHP.
Шаг 3 — Настройка Apache для обоих сайтов
В этом разделе мы создадим два файла конфигурации виртуального хоста. Это позволит двум нашим сайтам одновременно работать с двумя разными версиями PHP.
Добавьте в файл следующее: Убедитесь, что путь к директории сайта, имя сервера и версия PHP соответствуют вашей системе:
Сохраните и закройте файл.
Добавьте в файл следующее: Убедитесь, что путь к директории сайта, имя сервера и версия PHP соответствуют уникальным параметрам вашей системы:
Сохраните файл и закройте его после завершения. Проверьте файл конфигурации Apache на наличие синтаксических ошибок:
Вывод должен выглядеть так:
Активируйте оба файла конфигурации виртуального хоста:
Отключите сайт по умолчанию, поскольку он не потребуется:
Перезапустите службу Apache, чтобы применить изменения:
Мы настроили Apache для обслуживания каждого из сайтов и теперь протестируем их и убедимся, что на них работают правильные версии PHP.
Шаг 4 — Тестирование сайтов
Мы настроили два сайта для работы с двумя разными версиями PHP. Теперь проверим результаты.
Обратите внимание на заголовки. На первой странице указано, что на сайте site1.your_domain развернута версия PHP 7.0. На второй странице указано, что на сайте site2.your_domain развернута версия PHP 7.2.
Теперь у вас имеется один сервер Ubuntu 18.04, обслуживающий два сайта с двумя разными версиями PHP. Однако PHP-FPM можно применять и для других целей.
Заключение
Мы объединили виртуальные хосты и PHP-FPM для обслуживания нескольких сайтов и нескольких версий PHP на одном сервере. Количество сайтов PHP и версий PHP, которые может обслуживать ваш сервер Apache, зависит исключительно от вычислительной мощности вашего экземпляра.