Статья последний раз была обновлена 04.03.2023
Установка PHP 7 в CentOS 7
В данной статье я расскажу о установке PHP 7, выпуск финальной версии которого стал одним из важнейших событий прошедшего года. Команда разработчиков выполнила просто огромную работу, судя по тестам, производительность PHP 7 вплотную приблизилась к показателям конкурента HHVM. Следует отметить, что рост производительности был достигнуть за счет оптимизации и никак не повлиял на увеличение потребления ресурсов.
Если сравнивать с предыдущей версией, то по моему мнению, PHP 7 абсолютно лишен недостатков. Исходя из имеющейся информации, можно сделать прогноз, что темпы перехода на PHP 7 будут достаточно быстрыми. Ранее я уже описывал процесс установки PHP 7 из исходников или репозитория Debian, в этой записи я расскажу как быстро установить PHP 7 в Cent OS 7.
На данный момент в официальном репозитории Cent OS 7 отсутствуют пакеты для установки PHP 7. Связи с чем, стоит немного повременить с переводом на PHP 7 серьезных коммерческих проектов. Зато будет не лишним установить PHP 7 на тестовый серевер, чтобы заранее проверить совместимость приложений и ознакомиться с новыми возможностями языка PHP 7.
В этой записи я опишу свой опыт установки PHP 7 для использования его в сочетании с веб-сервером Nginx. Для установки я использовал систему CentOS 7.1 и пакеты PHP 7 из неофициального репозитория IUS.
Установка PHP 7 в Cent OS 7
Перед установкой PHP 7 нам необходимо подключить к Cent OS репозиторий IUS. Для этого нам необходимо загрузить и выполнить специальный скрипт, после его запуска репозиторий IUS будет автоматически добавлен в систему.
Переходим в каталог tmp
и загружаем скрипт на сервер:
cd /tmp curl 'https://setup.ius.io/' -o setup-ius.sh
Затем выполните скрипт командой:
bash setup-ius.sh
Если на сервере присутствует PHP, удалите все установленные пакеты. Для первой установки PHP 7 на сервере, следующий пункт нужно пропустить.
yum remove php-fpm php-cli php-common
Чтобы установить PHP 7 и модули php-fpm
, php-mysqlnd
, выполните команду:
yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd
Я установил PHP 7 с минимальным набором модулей. В дальнейшем вы можете установить дополнительные модули по своему усмотрению. Если у вас процесс установки прошел без ошибок — я вас поздравляю. У меня же первый блин был комом, с первой попытки установить PHP 7 в CentOS мне не удалось. Подробнее описание решения проблемы вы можете прочитать в конце статьи.
Настройка PHP 7 для работы с Nginx
После завершения установки PHP 7, нам нужно внести изменения в конфигурацию PHP-FPM и Nginx. По умолчанию в PHP 7 для соединений использует локальный TCP-порт. Общеизвестным фактом является то, что для лучшего быстродействия PHP-FPM и Nginx желательно использовать Unix-сокет.
Используя PHP-FPM можно обрабатывать несколько пулов дочерних процессов. По умолчанию в PHP 7 сконфигурирован на использование одного общего пула WWW
. Его настройки хранятся в файле /etc/php-fpm.d/www.conf
. Откройте этот файл в текстовом редакторе:
nano /etc/php-fpm.d/www.conf
Закомментируйте строку listen = 127.0.0.1:9000
, она отвечает за работу PHP-FPM через порт 9000. Вместо нее раскомментируйте строку listen = /run/php-fpm/www.sock
расположенную ниже.
;listen = 127.0.0.1:9000 ; WARNING: If you switch to a unix socket, you have to grant your webserver user ; access to that socket by setting listen.acl_users to the webserver user. listen = /run/php-fpm/www.sock
Затем найдите блок listen.acl_users
и раскомментируйте в нем строку listen.acl_users = nginx
.
; When POSIX Access Control Lists are supported you can set them using ; these options, value is a comma separated list of user/group names. ; When set, listen.owner and listen.group are ignored ;listen.acl_users = apache,nginx ;listen.acl_users = apache listen.acl_users = nginx ;listen.acl_groups =
Закройте файл и сохраните изменения. Теперь нам необходимо изменить конфигурацию Nginx, для того чтобы веб-сервер использовал сокет во время взаимодействия с PHP-FPM. Откройте файл:
nano /etc/nginx/conf.d/php-fpm.conf
Нам необходимо переключить способ взаимодействия Nginx и PHP-FPM с tcp-порта 9000
на использование сокета. Для этого измените содержимое файла следующим образом:
# PHP-FPM FastCGI server # network or unix domain socket configuration upstream php-fpm { #server 127.0.0.1:9000; server unix:/run/php-fpm/www.sock; }
Закройте файл и сохраните изменения. Чтобы новые директивы вступили в силу нам необходимо перезапустить PHP-FPM и Nginx:
systemctl restart php-fpm systemctl restart nginx
Вы можете проверить статус каждого сервиса, используя systemctl
:
systemctl status php-fpm systemctl status nginx
Проверка работы PHP 7
После того как мы установили PHP 7 и подготовили к работе веб-сервер Nginx, необходимо убедится, что все настроено правильно. Начните с проверки версии PHP, для этого выполните команду:
# php -v PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS ) Copyright (c) 1997-2015 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
Затем создадим в корневом каталоге веб-сервера файл info.php
:
nano /usr/share/nginx/html/info.php
Скопируйте в файл следующий код:
<?php phpinfo();
Закройте файл и сохраните изменения. Введите в браузере ip-адрес или доменное имя вашего сервера и укажите название файла info.php
:
http://server_ip/info.php
Если вы правильно установили и настроили PHP 7 в CentOS, вы должны увидеть страницу содержащую информацию о конфигурации PHP 7.
Проблемы во время установки PHP 7
Далее я расскажу о небольшой проблеме, с которой я столкнулся во время установки PHP 7 на CentOS 7.1.
Error: Package: php70u-fpm-7.0.1-1.ius.centos7.x86_64 (ius) Requires: libsystemd.so.0()(64bit) Error: Package: php70u-fpm-7.0.1-1.ius.centos7.x86_64 (ius) Requires: libsystemd.so.0(LIBSYSTEMD_209)(64bit) You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
Очень часто хостеры вносят свои изменения в шаблоны контейнеров виртуальных машин. В моем случае, проблема была вызвана тем, что CentOS 7 использовала кривые зеркала centos-base
и testing
репозиториев. Для тех, кто столкнулся с подобной проблемой, откройте файл:
nano /etc/yum.repos.d/CentOS-Base.repo
Чтобы устанавливать пакеты из официальных репозиториев CentOS 7, используйте конфигурацию ниже:
[base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
https://codebeer.ru/ustanovka-php-7-v-centos-7/
- Как узнать IP-адрес по MAC-адресу - 07.04.2023
- Пинг проходит, а страницы в браузере не открываются - 07.04.2023
- Что если сайт пингуется «извне», но не открывается из под «локалки»? - 07.04.2023