Как установить php 7 для запуска около php 5 в Ubuntu с помощью nginx

9

Я хочу попробовать php 7 и заставить мой сайт работать на php 7, в то же время оставляя другие сайты работающими на php 5 на всякий случай. так что из конфигурации виртуального хоста домена я могу решить, какой php запускать.

Я посмотрел на управление версиями php и увидел, что можно запустить две версии, хотя те, которые я нашел, похоже на apache. Я ищу более четкие инструкции о том, как сделать это под Nginx. У меня также есть HHVM работает в случае, если это имеет значение.

Ужасная точка с запятой
источник

Ответы:

11

Во-первых, вам нужно установить php5-fpmи php7.0-fpmиз PPA Ondřej Surý для совместной установки php5 и php7.0. :

sudo apt-get install python-software-properties
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

Затем мы nginxпредлагаем использовать пакеты FPM. Итак, установите пакеты соответственно:

sudo apt-get update

# We need to ***remove*** php5 packages, so we can use php5.6 packages
# from the PPA instead
sudo apt-get remove php5-common
sudo apt-get autoremove

# Now we install php5.6 packages.
sudo apt-get install php5.6-fpm

# Now, install php7.0-fpm.  You may need to install separate PHP plugins
# for databases, extensions, etc. later.
sudo apt-get install php7.0-fpm

Источник: Ответ на вопрос «Как установить php 7?» вопрос , и пользовательские комментарии и модификации от меня.


Во- вторых, nginx. nginxтолько в состоянии быть так же хорошо, как ваши конфигурации. Скорее всего, у вас есть блок обработки PHP на ваших блоках сервера nginx, подобный этому (из примера конфигурации «по умолчанию»):

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Эта конфигурация будет только переходить на php5-fpm. По сути, это будет применяться для всего вашего блока сервера. Самый простой способ сделать это - иметь второй блок сервера (скажем, для этого test.domain.tld) и предоставить вместо него назначение PHP 7.0 fastcgi_pass. В php7.0 на Xenial это закончится примерно так (извлечено из исправления, недавно загруженного в пакет Xenial nginx), однако я не знаю макет пакета Ondrej, поэтому я не могу дать там точные подробности (проверьте /etc/php7.0/fpm/pool.d/www.confили похоже, чтобы определить, где он слушает)

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.0-fpm:
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}

Вам нужно будет сделать нечто подобное для вашего php5блока, чтобы проверить, что php5.6используются сокеты вместо встроенного php5сокета (который мы только что удалили).

Затем используйте второй тестовый домен для запуска php7.0тестирования. Тем не менее, обязательно сделайте копию своего сайта, если вы хотите сделать это - вероятно, вам потребуется отдельная тестовая копия, чтобы после того, как вы закончили работу с ней php7.0, вы могли просто «переключиться» без вопрос.

К сожалению, не существует простого способа создать php5и php7.0работать в одном и том же блоке сервера, не изменяя пути для вашего сайта, приложений и т. Д., Чтобы иметь один для php5и один для php7.0; такая переработка сайтов может стать неприятной, поэтому предлагается запустить две отдельные копии кода сайта, одну для php7.0миграции и одну для php5работы.

Томас Уорд
источник
Если вы выберете этот путь, то вам следует придерживаться *php5.6*пакетов, которые предоставляет Ondřej, и удалять простые php5пакеты.
Муру
@muru , вероятно , правы, я буду писать , что
Томас Уорд
Спасибо! Это сработало лучше, чем я ожидал. сначала были проблемы с грушей и кли, но оказалось, что это была ошибка в репозитории, которую мне нужно было обновить, и это сработало. Мой сайт работает очень быстро на php7. это потрясающе
Ужасная точка с запятой
У носка fpm было 5.6 в названии также.
toster-cx
По состоянию на почти 2018 год конфиг php5.6 для NGINXfastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters