Установка PHP 7.2 на RedHat/CentOS 7 с помощью yum. Centos 7 установка php 7


Установка PHP 7 в CentOS

Не так давно появилась новая версия одного из самых популярных скриптовых языков программирования на просторах веб - PHP 7. Очень долго разработчики развивали пятую версию и было выпущено несколько минорных релизов, но, в конце концов, было решено пропустить шестой номер версии, и сразу выпустить PHP 7.0. Эта версия приносит множество полезных нововведений, о которых мы поговорим ниже.

Учитывая что CentOS - это очень стабильный дистрибутив, то его пользователи получат только в следующей версии. В этой статье мы рассмотрим как выполняется установка PHP 7 CentOS 7.

Содержание статьи:

Что нового в PHP 7

Новая версия PHP получила множество нововведений, но что самое главное для новых пользователей - очень сильную оптимизацию. Разработчики переработали кодовую базу и добавили новые алгоритмы, что дало прирост производительности в два раза, также уменьшено потребление памяти вполовину. Кроме того, были добавлены некоторые новые возможности:

  • Импорт пространств имен группами;
  • Добавлена возможность присвоить значение по умолчанию если переменная пустая;
  • В классах можно указывать ожидаемые типы данных для методов;
  • Добавлены анонимные классы;
  • Добавлена возможность создавать Escape последовательности для unicode;
  • Улучшены генераторы;

Но что более важно для нас, это те функции и возможности, которые были удалены. Это необходимо знать перед переходом на новую версию чтобы избежать возможных проблем с совместимостью ваших проектов. Из языка полностью удалены такие расширения:

  • interbase;
  • mssql;
  • oci8;
  • pdo_dblib;
  • pdo_oci;
  • sybase_ct;

Расширение ereg считается устаревшим, а imap и mcrypt пока поддерживаются, но, видимо, ненадолго. Также были убраны устаревшие теги: <%, <%=, <script language="php"> больше они не работают. Классы и интерфейсы больше нельзя именовать именами типов данных. Также изменен синтаксис работы с возвращаемыми методами данными. В основном это все, если ваш проект не содержит всех этих проблем, то вы можете спокойно переходить на PHP 7. Такие популярные CMS, как WordPress, Zend, Yii, Symfony и множество других уже давно поддерживают PHP 7. А теперь рассмотрим как установить PHP 7 CentOS 7.

Установка PHP CentOS 7

Мы будем использовать репозиторий Remi для установки PHP. Но перед тем как мы сможем его подключить, нам понадобиться дополнительно репозиторий EPEL:

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 

Дальше устанавливаем сам репозиторий Remi:

sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

После установки смотрим доступные репозитории Remi:

ls /etc/yum.repos.d/remi*

Как видите, есть несколько версий php, сейчас мы можем активировать php 7.1, для этого откройте соответствующий файл, найдите секцию [remi-php71], в ней найдите enabled и поменяйте значение с 0 на 1:

vi /etc/yum.repos.d/remi-php71.repo

enabled=1

Теперь самое интересное - установка php 7.1 centos 7. Если у вас уже установлена старая версия php, то вам не нужно ничего удалять, вы можете просто обновить систему и получите то, что нужно:

sudo yum update

Если же никакая версия php не установлена, просто установите нужные пакеты:

sudo yum install php php-fpm php-gd php-mysql

После завершения работы команды вы получите готовую и работающую версию php, и вы можете использовать ее для своего веб-сервера Apache или Nginx. Если вы используете Apache, то даже ничего перенастраивать не придется. Если вы используете подключение по сетевому сокету в Nginx, то вам нужно будет только перезапустить php-fpm:

sudo systemctl restart php-fpm

В случае с файловым сокетом, еще нужно будет прописать правильный путь к новому сокету. И даже когда в репозиториях CentOS 7.4 появиться эта версия PHP, все равно будет выгоднее использовать этот репозиторий, потому что тут уже будет более новая версия.

Выводы

В этой небольшой статье мы рассмотрели как выполняется установка PHP 7 CentOS 7. Как видите, это совсем несложно и вы можете установить все это на свой сервер чтобы получить максимальную производительность. Если у вас остались вопросы, спрашивайте в комментариях!

Оцените статью:

Загрузка...

losst.ru

Как установить PHP 7.2 с помощью yum на CentOS/RedHat 7

Все больше задач требуют для своей реализации последних версий пакетов, которые нельзя найти в стандартной поставке OS. Мне часто приходится разворачивать различные WEB приложения, требующие для своей работы последней версии PHP и самое простое решение – установка PHP с помощью YUM (yellowdog Updater, Modified) – консольного менеджера RPM-пакетов, используемого в RedHat/CentOS.

Кратко

# sudo yum -y install epel-release yum-utils # sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm # sudo yum-config-manager --enable remi-php72 # sudo yum -y update # sudo yum -y install php # php -v

Особенности установки

Для того, чтобы добавить в пакетный менеджер YUM новые пакеты или обновленные версии существующих, необходимо подключить репозиторий, содержащий требуемые пакеты.

Для PHP — это Remi’s RPM repository, который необходимо установить в YUM.

Для установки PHP 7.1/7.2 нам необходимо выполнить следующие предварительные действия:

  1. Установить пакет EPEL-Release.

    Проверяем, что пакет EPEL-Release еще не установлен в системе:

    # yum list installed epel-release Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.serverspace.co.uk * extras: mirror.sov.uk.goscomb.net * updates: mozart.ee.ic.ac.uk Error: No matching Packages to list

    И, если он не найден, устанавливаем его:

    # sudo yum -y install epel-release; sudo yum update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.serverspace.co.uk * extras: mirror.sov.uk.goscomb.net * updates: mozart.ee.ic.ac.uk Resolving Dependencies --> Running transaction check ---> Package epel-release.noarch 0:7-11 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: epel-release noarch 7-11 extras 15 k Transaction Summary ================================================================================ Install 1 Package Total download size: 15 k Installed size: 24 k Downloading packages: epel-release-7-11.noarch.rpm | 15 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : epel-release-7-11.noarch 1/1 Verifying : epel-release-7-11.noarch 1/1 Installed: epel-release.noarch 0:7-11 Complete! Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.serverspace.co.uk * epel: mirror.netweaver.uk * extras: mirror.sov.uk.goscomb.net * updates: mozart.ee.ic.ac.uk No packages marked for update
  2. Установить репозиторий Remi.

    С помощью следующей команды репозиторий Remi будет автоматически установлен, если его нет в системе, или обновлен, в противном случае:

    # sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm Loaded plugins: fastestmirror remi-release-7.rpm | 14 kB 00:00:00 Examining /var/tmp/yum-root-Ivu_lf/remi-release-7.rpm: remi-release-7.4-2.el7.remi.noarch Marking /var/tmp/yum-root-Ivu_lf/remi-release-7.rpm to be installed Resolving Dependencies --> Running transaction check ---> Package remi-release.noarch 0:7.4-2.el7.remi will be installed --> Finished Dependency Resolution Dependencies Resolved =================================================================================== Package Arch Version Repository Size =================================================================================== Installing: remi-release noarch 7.4-2.el7.remi /remi-release-7 15 k Transaction Summary =================================================================================== Install 1 Package Total size: 15 k Installed size: 15 k Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : remi-release-7.4-2.el7.remi.noarch 1/1 Verifying : remi-release-7.4-2.el7.remi.noarch 1/1 Installed: remi-release.noarch 0:7.4-2.el7.remi Complete!
  3. Обновить компоненты системы:

Установка PHP 7.1/7.2 с добавлением репозитория в YUM

После установки репозитория Remi его необходимо активировать, после чего можно приступать к установке PHP 7.2.

Для активации репозитория Remi в YUM необходимо выполнить следующую команду:

sudo yum-config-manager --enable remi-php72

После чего, установить PHP можно следующей командой:

# sudo yum -y install php

Проверяем, что установился PHP требуемой версии:

# php -v PHP 7.2.5 (cli) (built: Apr 24 2018 19:12:06) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Получить список всех доступных пакетов PHP 7.2 можно с помощью команды:

Установка PHP 7.1/7.2 с временным подключением репозитория

Такой способ может пригодиться, если Вы по каким-то причинам не хотите активировать новый репозиторий Remi в пакетном менеджере YUM. Но выполнить установку RPM пакета из раздела «Особенности установки» необходимо.

Так как без репозитория, содержащего нужный пакет, нам не обойтись (вы же его установили?), то мы подключим его «на лету» во время установки с помощью опции –enablerepo:

# sudo yum --enablerepo=remi-php72 install php

Проверяем, что была установлена корректная версия PHP:

# php -v PHP 7.2.5 (cli) (built: Apr 24 2018 19:12:06) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Установить остальные необходимые модули можно аналогично, а получить их полный список можно командой:

# sudo yum --enablerepo=remi-php72 search php72

drmini.ru

PHP и компоненты. Установка на CentOS 7

PHP

Будем устанавливать именно php 7.

Установка php 7 на CentOS 7 по сути делится на 2 этапа:

  1. Подготовка к установке,
  2. и сама установка.

Подготовка репозиториев

Для установки php 7 на CentOS 7 нужен подключенный репозиторий remi, но чтобы его можно было использовать, нужен другой репозиторий epel. Такая вот цепочка.

Установка репозитория epel:

yum install epel-release -y

yum install epel-release -y

И потом устанавливаем сам репозиторий remi

rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Вообще, заранее можно проверить наличие репозиториев такой командой:

Будет примерно такой список:

Лично у меня epel был установлен по умолчанию (возможно такая сборка от хостера), т.е повторно устанавливать его не пришлось.

После установки репозитория remi запускаем mc коммандер

и идем в каталог /etc/yum.repos.d/

Видим, что появились новые файлы, названия которых начинаются с remi.. а дальше версия php.

Т.е. примерно такие:

  • remi-php54.repo
  • remi-php70.repo
  • remi-php71.repo
  • remi-php72.repo

А теперь самый интересный момент: чтобы установить нужную версию php, нужно активировать соответствующий файл репозитория (из списка выше). Какой активируешь — тот и установится.

В каждом из них пока везде стоит enabled = 0. Если нужно установить версию php 7.1, то для активации нужно в секции [remi-php71] enabled = 0 поменять на 1. Как здесь.

Установка

Самый гемор с подготовкой прошли, т.е. подключили репозитории и активировали нужный.

Осталось запустить команду на установку

Или обновить систему, если установлена старая версия php, то php обновится до нужной версии:

Проверка работы

Должно вывести примерно следующее:

PHP 7.2.5 (cli) (built: Apr 24 2018 19:12:06) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

PHP 7.2.5 (cli) (built: Apr 24 2018 19:12:06) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

PHP-FPM

Для установки php-fpm на CentOS 7 уже должен быть готов (подключен и активирован) нужный репозиторий remi. О нем было рассказано чуть выше.

Теперь просто выполняем команду:

Перезапустим сервис:

systemctl restart php-fpm

systemctl restart php-fpm

Добавим PHP-FPM в автозагрузку:

Вроде как все.

Благодарности источникам:

  1. https://losst.ru/ustanovka-php-7-v-centos
  2. https://serveradmin.ru/ustanovka-i-nastroyka-nginx-php-fpm-php7-1-na-centos-7/#_php-fpm_71

kilobax.ru

Установка PHP 7 в CentOS 6 / 7 / RHEL

PHP7 вышел относительно недавно в декабре 2015 года. К основным достоинствам относится его высокая производительность (на картинке ниже) и отличная совместимость с ngix. Помимо прочего имеется следующие изменения:

  • Improved performance: PHP 7 is up to twice as fast as PHP 5.6
  • Significantly reduced memory usage
  • Abstract Syntax Tree
  • Consistent 64-bit support
  • Improved Exception hierarchy
  • Many fatal errors converted to Exceptions
  • Secure random number generator
  • Removed old and unsupported SAPIs and extensions
  • The null coalescing operator (??)
  • Return and Scalar Type Declarations
  • Anonymous Classes
  • Zero cost asserts

Сейчас рассмотрим установку на CentOS 6/7/RHEL (в моем случае использовался CentOS 6.5 64bit). Будем использовать Webtatic repo.

Шаг 1 – Заходим на наш сервер CentOS с правами root.

Шаг 2 – Выполняем обновление системы:

Шаг 3 (опционально) – устанавливаем Apache 2 web server (httpd):

Шаг 4 – Добавляем репозиторий webtatic repository  для CentOS 7.x:

1

2

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Для более ранней версии  CentOS 6.x используется другой репозиторий:

1

rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

Шаг 5 – устанавливаем PHP 7:

Либо устанавливаем все пакеты:

1

yum install php70w-cli php70w-common php70w-bcmath php70w-dba php70w-devel php70w-embedded php70w-fpm php70w-gd php70w-imap php70w-interbase php70w-intl php70w-ldap php70w-mbstring php70w-mcrypt php70w-mysql php70w-odbc php70w-opcache php70w-pdo php70w-pdo_dblib php70w-pear php70w-process php70w-pspell php70w-recode php70w-tidy php70w-xml php70w-xmlrpc

Готово! Установка PHP 7 в CentOS 6.5 / 7 завершена.

Проверить версию php можно следующей командой:

php -v

www.gotoadm.ru

Установка и настройка nginx php-fpm php7.1 на CentOS 7

Я уже писал статью по данной теме, и она формально даже не устарела, если брать все пакеты из официальных репозиториев. Сегодня я настрою производительный веб сервер на свежих версиях nginx, php-fpm, где сам php версии 7.1.  Сейчас использовать версию php54, которую предлагает CentOS по-умолчанию, очень странно, поэтому я решил актуализировать статью и все настроить в соответствии с современными реалиями.

Введение

Ранее я рассказывал о настройке nginx и php-fpm. В принципе, статья полностью актуальна, по ней получится настроить веб сервер, если вас устраивают версии предложенных в стандартном репозитории пакетов. Если же хочется версий посвежее, то читайте далее.

Работать будем на сервере под управлением CentOS 7. Если у вас его еще нет, то читайте мои статьи на тему установки и базовой настройки centos. Не забудьте уделить внимание теме настройки iptables. В данной статье я ее не буду касаться, хотя тема важная для web сервера.

В своей тестовой среде я буду использовать следующие сущности.

hl.zeroxzed.ru имя тестового виртуального хоста и сайта
/web/sites директория для размещения виртуальных хостов
 95.169.190.64  внешний ip адрес сервера
 p1m2a.zeroxzed.ru  имя виртуального хоста для phpmyadmin

Подопытным сервером будет выступать виртуальная машина от keyweb, расположенная на сервере в Германии. Характеристики следующие:

Процессор 2 ядра
Память 8 Gb
Диск 150 Gb SSD

Указанный сервер включает в себя администрирование. То есть вы можете его заказать и прислать в техподдержку ссылку на эту статью. Они за вас все настроят. Если все же хотите настраивать сами, то берите сервер из линейки PRO. Они дешевле, но настраивать все придется самому. Чем я и займусь 🙂

Установка nginx на CentOS 7

Для установки самой свежей стабильной версии nginx на centos подключим родной репозиторий.

# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Если по какой-то причине ссылка изменится или устареет, то можно создать файл с конфигурацией репозитория nginx вручную. Для этого рисуем такой конфиг /etc/yum.repos.d/nginx.repo.

[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1

Устанавливаем nginx на сервер.

# yum install nginx

Запускаем nginx и добавляем в автозагрузку.

# systemctl start nginx # systemctl enable nginx

Проверяем, запустился ли web сервер. Для этого идем по ссылке http://95.169.190.64/. Вы должны увидеть стандартную страницу заглушку.

Если страница не открывается, то скорее всего вы не настроили firewall. Свою статью по его настройке я приводил в самом начале.

Настройка nginx

Расскажу, как настроить nginx для работы разных виртуальных хостов. Создадим виртуальный хост и подготовим директории для размещения исходников сайта и панели управления phpmyadmin.

# mkdir -p /web/sites/hl.zeroxzed.ru/www && mkdir /web/sites/hl.zeroxzed.ru/log # mkdir -p /web/sites/p1m2a.zeroxzed.ru/www && mkdir /web/sites/p1m2a.zeroxzed.ru/log

Создадим конфиги nginx для этих виртуальных хостов. Я сразу буду делать их с учетом https, который мы настроим позже. Так что после создания не надо перезапускать веб сервер и проверять работу — будут ошибки. Виртуальный хост сайта показан на примере wordpress. Конфигурация собрана на основе рекомендаций из официальной документации конкретно для веб сервера nginx.

# mcedit /etc/nginx/conf.d/hl.zeroxzed.ru.conf server { listen 80; server_name hl.zeroxzed.ru; root /web/sites/hl.zeroxzed.ru/www/; index index.php index.html index.htm; access_log /web/sites/hl.zeroxzed.ru/log/access.log main; error_log /web/sites/hl.zeroxzed.ru/log/error.log; location / { return 301 https://hl.zeroxzed.ru$request_uri; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ { return 301 https://hl.zeroxzed.ru$request_uri; } location ~ \.php$ { return 301 https://hl.zeroxzed.ru$request_uri; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { rewrite ^ /robots.txt break; allow all; log_not_found off; access_log off; } location ~ /\.ht { deny all; } } server { listen 80; server_name www.hl.zeroxzed.ru; rewrite ^ https://hl.zeroxzed.ru$request_uri? permanent; } server { listen 443 ssl http2; server_name hl.zeroxzed.ru; root /web/sites/hl.zeroxzed.ru/www/; index index.php index.html index.htm; access_log /web/sites/hl.zeroxzed.ru/log/ssl-access.log main; error_log /web/sites/hl.zeroxzed.ru/log/ssl-error.log; keepalive_timeout 60; ssl_certificate /etc/letsencrypt/live/hl.zeroxzed.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hl.zeroxzed.ru/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_dhparam /etc/ssl/certs/dhparam.pem; add_header Strict-Transport-Security 'max-age=604800'; location / { try_files $uri $uri/ /index.php?$args; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ { access_log off; expires max; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/hl.zeroxzed.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/hl.zeroxzed.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/hl.zeroxzed.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param HTTPS on; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\.ht { deny all; } } server { listen 443 ssl http2; server_name www.hl.zeroxzed.ru; rewrite ^ https://hl.zeroxzed.ru$request_uri? permanent; }

В данной конфигурации настроены все необходимые редиректы, при этом отключен редирект файла robots.txt. Он отдельно отдается по http и https. Это требуется для яндекса во время перехода с http на https и склейки зеркал.

Для phpmyadmin рисуем конфиг попроще.

# mcedit /etc/nginx/conf.d/p1m2a.zeroxzed.ru.conf server { listen 443 ssl http2; server_name p1m2a.zeroxzed.ru; root /web/sites/p1m2a.zeroxzed.ru/www/; index index.php index.html index.htm; access_log /web/sites/p1m2a.zeroxzed.ru/log/ssl-access.log main; error_log /web/sites/p1m2a.zeroxzed.ru/log/ssl-error.log; keepalive_timeout 60; ssl_certificate /etc/letsencrypt/live/p1m2a.zeroxzed.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/p1m2a.zeroxzed.ru/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_dhparam /etc/ssl/certs/dhparam.pem; add_header Strict-Transport-Security 'max-age=604800'; location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/p1m2a.zeroxzed.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/p1m2a.zeroxzed.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/p1m2a.zeroxzed.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } } server { listen 443 ssl http2; server_name www.p1m2a.zeroxzed.ru; rewrite ^ https://p1m2a.zeroxzed.ru$request_uri? permanent; } server { listen 80; server_name p1m2a.zeroxzed.ru; root /web/sites/p1m2a.zeroxzed.ru/www/; index index.php index.html index.htm; access_log /web/sites/p1m2a.zeroxzed.ru/log/access.log main; error_log /web/sites/p1m2a.zeroxzed.ru/log/error.log; location / { return 301 https://p1m2a.zeroxzed.ru$request_uri; try_files $uri $uri/ /index.php?$args; } }

Сохраняем конфиги виртуальных хостов nginx и продолжаем настройку производительного веб сервера.

Установка php-fpm 7.1

Установка и настройка 7-й версии php на centos не очень простая задача. Ранее я уже рассказывал как обновить php до 7-й версии, но в итоге откатился назад. Прошло прилично времени и откатываться уже не будем, так как большинство проблем исправлены.

Основные трудности возникают с тем, что в официальных репозиториях очень старые версии php, но при этом они часто есть в зависимостях к другим пакетам. В итоге, обновившись неаккуратно до 7.1 можно получить проблемы с установкой и обновлением, к примеру, phpmyadmin или zabbix. В комментариях к моим статьям я иногда вижу эти ошибки и по тексту ошибок сразу понимаю, что проблема с зависимостями.

Вторая проблема в том, что надо определить, какой репозиторий использовать для установки php7. Их существует очень много. К примеру, мой хороший знакомый в своей статье по настройке web сервера использует репозиторий Webtatic. В принципе, чтобы просто поставить php 7-й версии это нормальный вариант. Но если вы после этого захотите установить phpmyadmin через yum уже ничего не получится. Будет ошибка зависимостей, которые нужно будет как-то руками разбирать.

То же самое будет и с другими пакетами. К примеру, zabbix без плясок с бубнами скорее всего не встанет. В сторонних репозиториях есть еще одна проблема. Иногда они закрываются. И это станет для вас большой проблемой на боевом сервере. Так что к выбору репозитория нужно подходить очень аккуратно и внимательно. Я до сих пор иногда встречаю настроенные сервера centos 5 с очень популярным в прошлом репозиторием centos.alt.ru, который закрылся. Сейчас это уже не так актуально, так как таких серверов осталось мало, но некоторое время назад мне это доставляло серьезные неудобства.

Для установки свежей версии php я буду использовать репозиторий Remi. Это известный и популярный репозиторий, который ведет сотрудник RedHat. И хотя надежность репозитория, который ведет один человек не так высока, но ничего лучше и надежнее remi лично я не нашел для своих целей. Если вы можете что-то посоветовать на этот счет — комментарии в вашем распоряжении. Буду благодарен за дельный совет.

Подключаем remi репозиторий для centos 7.

# rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Я получил ошибку:

Retrieving http://rpms.remirepo.net/enterprise/remi-release-7.rpm warning: /var/tmp/rpm-tmp.nwcDV1: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY error: Failed dependencies: epel-release = 7 is needed by remi-release-7.3-2.el7.remi.noarch

Тут все понятно, нужен репозиторий epel. Те, кто готовили сервер по моей статье по базовой настройке сервера его уже подключили, а те кто не делали этого, подключают сейчас:

# yum install epel-release

После этого повторяем установку remi, все должно пройти нормально. Проверим список подключенных репозиториев.

# yum repolist

У меня такая картинка получилась.

Активируем репу remi-php71, для этого выполняем команду:

# yum-config-manager --enable remi-php71

Если получаете ошибку:

bash: yum-config-manager: command not found

то установите пакет yum-utils.

# yum install yum-utils

Теперь устанавливаем php7.1.

# yum install php71

Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.

# yum install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip

Запускаем php-fpm и добавляем в автозагрузку.

# systemctl start php-fpm # systemctl enable php-fpm

Проверяем, запустился ли он.

# netstat -tulpn | grep php-fpm tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9084/php-fpm: maste

Все в порядке, повис на порту 9000. Запустим его через unix сокет. Для этого открываем конфиг /etc/php-fpm.d/www.conf и комментируем строку:

;listen = 127.0.0.1:9000

Вместо нее добавляем несколько других:

listen = /var/run/php-fpm/php-fpm.sock listen.mode = 0660 listen.owner = nginx listen.group = nginx

Заодно измените пользователя, от которого будет работать php-fpm. Вместо apache укажите nginx.

user = nginx group = nginx

Перезапускаем php-fpm.

# systemctl restart php-fpm

Проверяем, стартовал ли указанный сокет.

# ll /var/run/php-fpm/php-fpm.sock srw-rw----. 1 nginx nginx 0 Oct 26 18:08 /var/run/php-fpm/php-fpm.sock

На текущий момент с настройкой php-fpm закончили, двигаемся дальше.

Для того, чтобы проверить работу нашего веб сервера, нужно установить ssl сертификаты. Без них nginx с текущим конфигом не запустится. Исправляем это.

Настройка бесплатного ssl сертификата Lets Encrypt

Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt.

# yum install certbot

Запускаем программу для генерации сертификата.

# certbot certonly

Вам в консоли будут заданы несколько вопросов. Вот мои ответы, необходимые для успешного получения сертификата. Первый раз мы получим сертификаты, используя временный веб сервер самого certbot, так как наш еще не работает. Далее обновлять сертификаты будем в автоматическом режиме с помощью временной директории в корне виртуального хоста.

# certbot certonly Saving debug log to /var/log/letsencrypt/letsencrypt.log How would you like to authenticate with the ACME CA? ------------------------------------------------------------------------------- 1: Spin up a temporary webserver (standalone) 2: Place files in webroot directory (webroot) ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1 Plugins selected: Authenticator standalone, Installer None Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected] Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org ------------------------------------------------------------------------------- Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree in order to register with the ACME server at https://acme-v01.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (A)gree/(C)ancel: A ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: N Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): hl.zeroxzed.ru Obtaining a new certificate Performing the following challenges: tls-sni-01 challenge for hl.zeroxzed.ru Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/hl.zeroxzed.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/hl.zeroxzed.ru/privkey.pem Your cert will expire on 2018-01-24. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Для успешного создания бесплатных ssl сертификатов от lets encrypt у вас должны быть корректно настроены DNS записи для доменов, на которые выпускаются сертификаты.

Итак, сертификаты получили. Теперь можно проверить конфигурацию nginx и запустить его. Проверяем конфиг:

# nginx -t

Если получаете ошибку:

nginx: [emerg] BIO_new_file("/etc/ssl/certs/dhparam.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/ssl/certs/dhparam.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file) nginx: configuration file /etc/nginx/nginx.conf test failed

То генерируете необходимый ключ:

# openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Генерация будет длиться долго (у меня 20 минут длилось на двух ядрах). Снова проверяйте конфигурацию. Если ошибок нет, то перезапустим nginx.

# systemctl restart nginx

Настройка nginx на этом завершена. Он должен корректно запуститься и работать в рабочем режиме.

Теперь сделаем так, чтобы сертификаты автоматически обновлялись перед истечением срока действия. Для этого необходимо изменить конфигурации доменов. Они располагаются в директории /etc/letsencrypt/renewal. Так как мы генерировали сертификаты с помощью временного веб сервера, наш текущий конфиг hl.zeroxzed.ru.conf выглядит вот так:

# renew_before_expiry = 30 days version = 0.18.1 archive_dir = /etc/letsencrypt/archive/hl.zeroxzed.ru cert = /etc/letsencrypt/live/hl.zeroxzed.ru/cert.pem privkey = /etc/letsencrypt/live/hl.zeroxzed.ru/privkey.pem chain = /etc/letsencrypt/live/hl.zeroxzed.ru/chain.pem fullchain = /etc/letsencrypt/live/hl.zeroxzed.ru/fullchain.pem # Options used in the renewal process [renewalparams] authenticator = standalone installer = None account = e9c86e6aa57b45f9614bc7c0015927a5

Приводим его к следующему виду:

# renew_before_expiry = 30 days version = 0.18.1 archive_dir = /etc/letsencrypt/archive/hl.zeroxzed.ru cert = /etc/letsencrypt/live/hl.zeroxzed.ru/cert.pem privkey = /etc/letsencrypt/live/hl.zeroxzed.ru/privkey.pem chain = /etc/letsencrypt/live/hl.zeroxzed.ru/chain.pem fullchain = /etc/letsencrypt/live/hl.zeroxzed.ru/fullchain.pem # Options used in the renewal process [renewalparams] authenticator = webroot installer = None account = e9c86e6aa57b45f9614bc7c0015927a5 post_hook = nginx -s reload [[webroot_map]] www.hl.zeroxzed.ru = /web/sites/hl.zeroxzed.ru/www hl.zeroxzed.ru = /web/sites/hl.zeroxzed.ru/www

По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты let’s encrypt. Осталось дело за малым — настроить автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:

# Cert Renewal 30 2 * * * root /usr/bin/certbot renew --post-hook "nginx -s reload" >> /var/log/le-renew.log

Все, с сертификатами закончили. Двигаемся дальше в настройке web сервера.

Установка mariadb 10 на CentOS 7

Дошла очередь до установки сервера баз данных для web сервера на CentOS 7 — MariaDB. По аналогии с другим софтом, в официальном репозитории очень старая версия mariadb — 5.5. Я же буду устанавливать последнюю стабильную версию на момент написания статьи — 10.2.

Для того, чтобы подключить репозиторий MariaDB, можно воспользоваться специальной страницей на официальном сайте, где можно задать параметры системы и получить конфиг репозитория.

В моем случае конфиг получился следующий.

# cat /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

Устанавливаем последнюю версию mariadb на centos.

# yum install MariaDB-server MariaDB-client

Убедитесь, что база данных ставится из нужного репозитория.

Запускаем mariadb и добавляем в автозагрузку.

# systemctl start mariadb # systemctl enable mariadb

Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.

# /usr/bin/mysql_secure_installation

Сервер баз данных mysql для нашего web сервера готов. Продолжаем настройку. Установим панель управления mysql — phpmyadmin.

Установка phpmyadmin

Кратко расскажу про установку phpmyadmin в контексте данной статьи. Подробно не буду останавливаться на этом, так как статья и так получается очень объемная, а я еще не все рассказал. Вопрос настройки phpmyadmin я очень подробно рассмотрел отдельно. За подробностями можно сходить туда.

Устанавливаем phpmyadmin через yum. Если ранее все сделали правильно, то конфликтов с зависимостями быть не должно.

# yum install phpmyadmin

Phpmyadmin по-умолчанию сконфигурирована для работы с httpd. Для того, чтобы в будущем автоматически обновлять ее, просто сделаем символьную ссылку из директории с исходниками панели в наш виртуальный хост.

# rm -df /web/sites/p1m2a.zeroxzed.ru/www # ln -s /usr/share/phpMyAdmin /web/sites/p1m2a.zeroxzed.ru/www

Выставляем правильные права на директорию с php сессиями. Без этого работать phpmyadmin не будет.

# chown nginx:nginx /var/lib/php/session/

Можно заходить и проверять работу phpmyadmin. Ее установка закончена.

Доступ к сайту по sftp

Настройка сервера почти завершена. Если вы администратор и единственный пользователь, то больше можно ничего не делать. Вы и так сможете загрузить на сервер все что нужно тем или иным способом. Если же вы будете передавать управление сайтами другим людям, им нужен доступ к директории с исходниками сайта. Раньше для этих целей повсеместно использовали ftp. Если вы хотите так сделать, у меня есть статья по настройке ftp сервера vsftpd.

Я же предлагаю использовать sftp по нескольким причинам:

  1. Он безопаснее.
  2. Его быстрее настроить.
  3. Не надо отдельно настраивать firewall.

Статью по настройке sftp доступа я уже тоже писал, все подробности там. Здесь без комментариев выполним необходимые действия.

Создаем пользователя для подключения к сайту. Я обычно использую имя пользователя пересекающееся с названием сайта. Так удобнее управлять.

# useradd -s /sbin/nologin hl.zeroxzed.ru # passwd hl.zeroxzed.ru

Открываем конфиг ssh по пути /etc/ssh/sshd_config и комментируем там одну строку, добавляя далее несколько новых.

#Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp Match User hl.zeroxzed.ru ChrootDirectory /web/sites/hl.zeroxzed.ru ForceCommand internal-sftp

Перезапускаем службу sshd.

# systemctl restart sshd

Этого уже достаточно, чтобы вы могли подключиться к сайту, к примеру, с помощью программы winscp. Если что-то пойдет не так и будут какие-то ошибки, то смотреть подробности нужно в логе /var/log/secure. Но тут возникает много нюансов с правами к файлам и директориям. Дальше я расскажу, как их аккуратно и грамотно разрулить, чтобы у нас не было проблем с дальнейшей работой сайтов от разных пользователей.

Работа с сайтами разных пользователей на одном веб сервере

Самый простой способ решить проблему с правами доступа, это сделать владельцем папки с сайтом пользователя, который подключается по sftp. Тогда он сможет нормально работать с файлами, загружать и удалять их. Если доступ в качестве группы установить для nginx, то в целом все будет работать. Для каких-то сайтов такой вариант может оказаться подходящим. То есть сделать надо вот так:

# chown -R hl.zeroxzed.ru:nginx /web/sites/hl.zeroxzed.ru/ # chmod -R 0775 /web/sites/hl.zeroxzed.ru/

Но при такой схеме будут проблемы с движками сайтов, которые автоматом что-то к себе загружают. Какие-то галереи не будут работать. К примеру, wordpress не сможет автоматически загружать плагины, будет просить доступ к ftp. В общем, могут возникнуть некоторые неудобства. Сейчас мы их исправим.

Еще обращаю внимание на один нюанс. Chroot доступ для sftp не будет работать, если владельцем директории, куда чрутимся, будет не root. Только что мы сделали владельцем каталога с сайтом и всего, что внутри него пользователя hl.zeroxzed.ru. Теперь надо вернуть обратно владельцем исходного каталога рута, а все, что внутри него остается как мы и хотим — будет принадлежать hl.zeroxzed.ru.

# chown root:root /web/sites/hl.zeroxzed.ru/ # chmod 0755 /web/sites/hl.zeroxzed.ru/

А теперь сделаем все красиво. Назначаем владельцем содержимого нашего сайта только отдельного пользователя.

# chown -R hl.zeroxzed.ru:hl.zeroxzed.ru /web/sites/hl.zeroxzed.ru/

Возвращаем обратно рута владельцем корня chroot.

# chown root:root /web/sites/hl.zeroxzed.ru/ # chmod 0755 /web/sites/hl.zeroxzed.ru/

Обращаю внимание, что сначала мы рекурсивно назначаем права на все содержимое директорий, а потом возвращаем владельца root только на корень.

Добавляем пользователя nginx в группу hl.zeroxzed.ru.

# usermod -aG hl.zeroxzed.ru nginx

Создаем отдельный pool для php-fpm, который будет обслуживать сайт hl.zeroxzed.ru и будет запускаться от этого пользователя. Для этого копируем существующий конфиг /etc/php-fpm.d/www.conf и изменяем в нем несколько строк.

# cd /etc/php-fpm.d && cp www.conf hl.zeroxzed.ru.conf [hl.zeroxzed.ru] user = hl.zeroxzed.ru group = hl.zeroxzed.ru listen = /var/run/php-fpm/hl.zeroxzed.ru.sock listen.owner = hl.zeroxzed.ru listen.group = hl.zeroxzed.ru

Мы поменяли название пула, запустили его от отдельного пользователя и назначили ему отдельный сокет. Теперь идем в настройки этого виртуального хоста в nginx — /etc/nginx/conf.d/hl.zeroxzed.ru.conf и везде меняем старое значение сокета

fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;

на новое

fastcgi_pass unix:/var/run/php-fpm/hl.zeroxzed.ru.sock;

Перезапускаем nginx и php-fpm и проверяем работу сайта от отдельного пользователя.

# systemctl restart nginx # systemctl restart php-fpm

Я рекомендую подключиться по sftp, закинуть исходники wordpress, установить его и добавить новую тему, чтобы проверить, что все корректно работает.  По аналогии проделанные выше действия повторяются для всех остальных сайтов.

Ротация логов виртуальных хостов

Последний штрих в настройке web сервера — ротация логов виртуальных хостов. Если этого не сделать, то через какое-то, обычно продолжительное, время возникает проблема в связи с огромным размером лог файла.

У нас уже будет файл конфигурации logrotate для nginx, который был создан во время установки — /etc/logrotate.d/nginx. Приведем его к следующему виду:

/var/log/nginx/*log /web/sites/p1m2a.zeroxzed.ru/log/*log { create 0644 nginx nginx size=1M rotate 10 missingok notifempty compress sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript } /web/sites/hl.zeroxzed.ru/log/*log { create 0644 hl.zeroxzed.ru hl.zeroxzed.ru size=1M rotate 10 missingok notifempty compress sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript }

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

Это просто пример конфигурации. Все параметры вы можете поменять по своему усмотрению. Примеров конфигурации logrotate в интернете много.

На этом все. Я рассмотрел все основные моменты, которые необходимы для установки и настройки производительного web сервера на основе nginx и php-fpm последних версий. При этом рассказал о некоторых вещах, которые повышают удобство и гибкость эксплуатации сервера.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Тема настройки веб сервера обширна. Рассмотреть все варианты в одной статье невозможно, так как функционал будет разниться, в зависимости от назначения сервера. Тем не менее приведу еще несколько ссылок на материалы, которые имеют отношение к настройке web сервера:

Если еще что-то полезное вспомню, добавлю ссылки. Пока вроде все. Жду комментариев и отзывов. Написал все по своему опыту, как я обычно настраиваю веб сервера. Возможно что-то можно сделать более удобно и правильно.

Эта статья будет первой из цикла статей по настройке современного веб сервера. Далее мы будем защищать web сервер и готовить его к максимальным нагрузкам.

Помогла статья? Есть возможность отблагодарить автора

serveradmin.ru

PHP 7 обновление в CentOS 7

Рассмотрим обновление на PHP 7-ой версии в системе CentOS 7 работающей с Nginx. Произведем настройку после обновления необходимых конфигурационных файлов для работы ресурсов использующих php. Процесс обновления сложный требующий внимания и ответственности.

Введение

Рано или поздно приходит время обновить старую версию PHP на новую. Как правило это обусловлено требование при обновлении ресурсов которые не смогут работать со старой версией. Редко обновление приходит без ручного вмешательства в редактирование конфигурационных файлов.

Обязательно перед обновление сделайте резервную копию системы и после обновления максимально проверьте все ресурсы использующие PHP!

В моем случае я обновляю версию которую устанавливал в статье Установка и настройка PHP.

Удаление старой версии PHP

Перед тем как установить новую версию нам надо определить какая стоит версия, какие пакеты и с какого репазитория.

Подготовка перед удалением

Проверим установленную версию:

php -v = вывод команды = PHP 5.6.30 (cli) (built: Jan 26 2017 00:22:46) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

Выведем весь список установленных пакетов:

rpm -qa | grep php = вывод команды = php-pecl-jsonc-1.3.10-2.el7.remi.5.6.x86_64 php-pdo-5.6.31-1.el7.remi.x86_64 php-pecl-memcache-3.0.8-4.el7.remi.5.6.x86_64 php-soap-5.6.31-1.el7.remi.x86_64 php-mbstring-5.6.31-1.el7.remi.x86_64 php-common-5.6.31-1.el7.remi.x86_64 php-xml-5.6.31-1.el7.remi.x86_64 php-cli-5.6.31-1.el7.remi.x86_64 php-pear-1.10.5-2.el7.remi.noarch php-gd-5.6.31-1.el7.remi.x86_64 php-mysqlnd-5.6.31-1.el7.remi.x86_64 php-xmlrpc-5.6.31-1.el7.remi.x86_64 php-imap-5.6.31-1.el7.remi.x86_64 php-fpm-5.6.31-1.el7.remi.x86_64 php-snmp-5.6.31-1.el7.remi.x86_64 php-pecl-zip-1.15.1-1.el7.remi.5.6.x86_64 php-process-5.6.31-1.el7.remi.x86_64 php-odbc-5.6.31-1.el7.remi.x86_64 php-ldap-5.6.31-1.el7.remi.x86_64 php-opcache-5.6.31-1.el7.remi.x86_64

Исходя из вывода удалим все эти пакеты. Новую версию php мы будем устанавливать с другого репазитория. Репозиторий remi нам больше не нужен и мы его удалим.

Удаление PHP 5.6

Удалим одной командой:

yum remove php-pecl-jsonc php-pdo php-pecl-memcache php-soap php-mbstring php-common php-xml php-cli php-pear php-gd php-mysqlnd php-xmlrpc php-imap php-fpm php-snmp php-pecl php-process php-odbc php-ldap php-opcache

Внимательно смотрим лог обновления на предмет ошибок и предупреждений! Сохраните все ошибки и предупреждения. Уверяю в последствии это сильно сократит время в настройке после обновления!

Удаление репозитория Remi-safe

Не вижу смысла держать репозитории которые больше не используются и всегда их удаляю.

Выведем список всех используемых репозиториев:

yum repolist = вывод части команды = Загружены модули: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.yandex.ru * epel: mirror.yandex.ru * extras: mirror.yandex.ru * remi-safe: mirror.awanti.com * updates: mirror.yandex.ru Идентификатор репозитория репозиторий состояние !remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 2 509

В выводе видим точное имя которое мы используем при удалении:

yum-config-manager --disable remi-safe В случае ошибки установите пакет yum-utils! yum -y install yum-utils

После всех действий обновим систему чтобы окончательно всё подготовить к установке новой версии:

yum update

Установка новой версии PHP

Выбор репозитория и версии PHP 7

Вероятно есть разные варианты установки PHP 7 версии, но мне нравится репозиторий WebtaticEL про него и расскажу.

Всегда старайтесь смотреть документацию разработчиков при работе с любыми программами и пакетами. Копировать бездумно команды с множества статей в интернете плохая привычка. Помимо того что вы можете все испортить непониманием вводимых команды вы может напрочь убить настраиваемую систему. В своих статьях я стараюсь указывать источник и перед опубликованием всегда проверяю написанное на своих рабочих или тестовых системах.

PHP от WebtaticEL

Перейдя по ссылке что я указал выше вы увидите все варианты версий возможных для установки а так же способы их установки в необходимую вам систему. Мой выбор пал на версию PHP 7.1 так как на данный момент это самая стабильная новая версия.

Добавление репозитория Webtatic

Добавим репозиторий в систему:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

После добавление любого репазитория необходимо обновить список пакетов и и в CentOS это можно сделать командой вывода всех репозиториев которая заодно и обновит весь список пакетов:

yum repolist

Установка PHP 7.1

Установим все нужные мне пакеты исходя из тех что удалял:

yum install php71w-fpm php71w-pdo php71w-soap php71w-mbstring php71w-common php71w-xml php71w-cli php71w-pear php71w-gd php71w-mysqlnd php71w-xmlrpc php71w-imap php71w-fpm php71w-snmp php71w-process php71w-odbc php71w-ldap php71w-opcache

Сознательно не стал ставить параметр с которым всё установится без вопросов. Лучше всегда быть на контроле таких сложных и ответственных обновлений.

Можем уставим все что есть, но решать вам самим что для вас лучше:

yum install php70w-cli php70w-common php70w-bcmath php70w-dba php70w-devel php70w-embedded php70w-fpm php70w-gd php70w-imap php70w-interbase php70w-intl php70w-ldap php70w-mbstring php70w-mcrypt php70w-mysql php70w-odbc php70w-opcache php70w-pdo php70w-pdo_dblib php70w-pear php70w-process php70w-pspell php70w-recode php70w-tidy php70w-xml php70w-xmlrpc

После обновления я предпочитая перезагрузить систему чтобы окончательно избавится от сомнений что что то работает по старой схеме и после перезагрузки перестанет работать.

Проверка после обновления PHP

После обновления первым делом проверим какая версия php в системе:

php -v = вывод команды = PHP 7.1.8 (cli) (built: Aug 9 2017 19:19:49) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.1.8, Copyright (c) 1999-2017, by Zend Technologies

Видим что установилась новая версия, но почти со 100% уверенностью могу сказать что при попытке открыть свой интернет ресурс вы обнаружите что он не работает. Вот тут то и пригодятся все наши сохранённые предупреждения при удалении, обновлении и установке новых пакетов.

Ошибки в логах установки/удаления

В моем случае было несколько предупреждений:

  • warning: /etc/nsswitch.conf created as /etc/nsswitch.conf.rpmnew;
  • предупреждение: /etc/php-fpm.d/www.conf сохранен как /etc/php-fpm.d/www.conf.rpmsave;
  • предупреждение: /etc/php.ini сохранен как /etc/php.ini.rpmsave.

Как видите система сказала что в двух случаях она создала новые файлы а старые сохранила с пометкой rpmsave. В случае когда система не смогла создать новый файл она создала его с пометкой rpmnew.

Любыми удобными вам способами сохраните копии созданных новых рабочих файлов. Необходимый вам код из старых сохраненных обновлением файлов перенесите в новые рабочие файлы. Мне было необходимо отредактировать два файла /etc/php-fpm.d/www.conf и /etc/php.ini.

На моих системах, с которыми я работаю, мне не доставляет это большого труда, так как весь код что я правлю документируется. Всегда комментирую старый код и пишу новый с пометками. При таком подходе мне проще понять код и тому кто будет работать с системой после меня будет проще разобраться при возникновении проблем.

Настройка PHP-FPM после обновления

Так как у нас работает Nginx и для связки с php используется php-fpm мы проверим необходимую службу:

systemctl status php-fpm.service ● php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled) Active: inactive (dead)

Из вывода мы видим что служба остановлена и отсутствует в автозагрузке. Добавим в автозагрузку, запустим и посмотрим статус:

systemctl enable php-fpm.service = вывод команды = Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service. systemctl start php-fpm.service = вывод команды говорящей об ошибке запуска= Job for php-fpm.service failed because the control process exited with error code. See "systemctl status php-fpm.service" and "journalctl -xe" for details. systemctl status php-fpm.service = вывод части команды = ● php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Пт 2017-09-15 22:00:06 MSK; 13s ago Process: 11678 ExecStart=/usr/sbin/php-fpm --nodaemonize --fpm-config /etc/php-fpm.conf (code=exited, status=78) Main PID: 11678 (code=exited, status=78) [15-Sep-2017 22:00:06] ERROR: [/etc/php-fpm.d/www.conf:2] value is NULL for a ZEND_INI_PARSER_ENTRY сен 15 22:00:06 lemp.sevo44.loc php-fpm[11678]: [15-Sep-2017 22:00:06] ERROR: Unable to include /etc/php-fpm.d/www.conf from /etc/php-fpm.conf at line 2 сен 15 22:00:06 lemp.sevo44.loc php-fpm[11678]: [15-Sep-2017 22:00:06] ERROR: failed to load configuration file '/etc/php-fpm.conf'

Из вывода команды мы видим ошибку во второй строке файла /etc/php-fpm.d/www.conf. Откроем и посмотрим код:

cat /etc/php-fpm.d/www.conf = вывод команды = [www] #Используем порт 9000 по адресу 127.0.0.1 listen = 127.0.0.1:9000; listen.allowed_clients = 127.0.0.1 #Пользователь и группа от которой работает php

Видим что вторая строке и отключена знаком #. Посмотрев в сохранном созданном установщиком новом файле увидим что все отключения идут знаком ;. Заменив все знаки # на ; сохраним и перезапустим службу и посмотрим статус:

systemctl restart php-fpm.service = вывод пустой если нет ошибок = systemctl status php-fpm.service = вывод команды = ● php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Пт 2017-09-15 22:02:48 MSK; 4s ago Main PID: 11749 (php-fpm) Status: "Ready to handle connections" CGroup: /system.slice/php-fpm.service ├─11749 php-fpm: master process (/etc/php-fpm.conf) ├─11750 php-fpm: pool www сен 15 22:02:48 lemp.sevo44.loc systemd[1]: Starting The PHP FastCGI Process Manager... сен 15 22:02:48 lemp.sevo44.loc systemd[1]: Started The PHP FastCGI Process Manager.

Видим что служба находится в автозагрузке и работает.

Вывод всех параметров PHP 7

Последнее что нам осталось сделать для полного понимания проделанной работы это посмотреть вывод всей информации о версии php. Создадим на работающем ресурсе в корневой директории сайта файл info.php и поместим туда код:

<?php phpinfo(); ?>

Достаточно набрать в строке браузера http://IP или ИМЯ/info/php и вы увидите страницу примерно с таким содержанием:

System Linux lemp.sevo44.loc 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64
Build Date Aug 9 2017 19:21:59
Server API FPM/FastCGI
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc
Loaded Configuration File /etc/php.ini
Scan this dir for additional .ini files /etc/php.d

и тд. и тп.

Вывод

Судя по статье может показаться что обновление версии PHP не такое уж и сложное дело но уверяю что эта простота придет только с опытом. Многое зависит от того как долго не обновляли систему, какие ресурсы там работают и какие у каждого в отдельности требования к версии php. В случае если вам досталась система с которой работали разные люди и мало чего комментировали в коде сложностей может возникнуть очень много и единственное что вас спасет от головной боли в случае неправильной работы важных ресурсов это резервное копирование перед выполнением обновления. Лучшим вариантом при обновлении таких систем это сделать клон системы и производить все действия на нем. Конечно при работе с клоном может возникнуть дополнительные сложности но это уже другая тема.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

sevo44.ru