Установка php-fpm 7.1
Установка и настройка 7-й версии php на centos не очень простая задача. Ранее я уже рассказывал как обновить php до 7-й версии, но в итоге откатился назад. Прошло прилично времени и откатываться уже не будем, так как большинство проблем исправлены.
Вторая проблема в том, что надо определить, какой репозиторий использовать для установки 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-opcache 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 с текущим конфигом не запустится. Исправляем это.
Конфигурационные файлы репозиториев (*.repo)
Все конфигурационные файлы репозиториев расположены в директории /etc/yum.repos.d/. В конфигурационных файл *.repo. Типовой конфигурационный файл репозитория содержит следующие параметры:
- name — имя репозитория;
- baseurl — ссылка на репозиторий (может быть ftp://address, http://address, https://address или file://address для локального репозитория);
- enabled – нужно ли использовать данный репозиторий: 1 – репозиторий подключен, 0 – отключен;
- async – использовать ли параллельную загрузку пакетов (auto/on/off);
- gpgcheck – нужно ли выполнять проверку GPG (1 – проверять);
- gpgkey — ссылка на GPG ключ;
- exclude — список исключенных пакетов;
- includepkgs — список включенных пакетов;
- mirrorlist – список зеркал репозитория.
В минимальном случае repo файл может выглядеть так:
name=rep_name baseurl=rep_url
Например, после подключения репозитория REMII, в директории репозиториев появится несколько конфигурационных файлов Remi (remi-*.repo).
Как вы видите, Remi имеет отдельный конфигурационный файл для каждой версии php. Вам нужно включить нужную вам версию в конфигурационном файле, например у меня на сервере будет стоять версия php 7.3, для этого я включил именно этот репозиторий (в файле remi-php73.repo указал enabled=1):
Вы можете подключит репозиторий вручную, для этого нужно создать конфигурационный файл репозитория в директории /etc/yum.repos.d/. Подключим репозиторий MaruaDB.
Добавим в него данные, которое нам предоставляет разработчик пакета MariaDB:
name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos73-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Что представляет собой репозиторий CentOSPlus?
CentOSPlus репозиторий содержит пакеты, которые обновляют те, что входят в состав основного репозитория. Эти пакеты не являются частью базового набора и расширяют функциональность CentOS в ущерб предшествующей его совместимости с дистрибутивом основного поставщика. Подключение этого репозитория приведет в дальнейшем к изменению CentOS. Дополнительную информацию вы можете получить в файле Readme для CentOS 4 и CentOS 5. Так же просмотрите каталог CentOSPlus для CentOS 4 или CentOS 5 на наших зеркалах для той архитектуры которую вы собираетесь использовать.
Репозиторий CentOSPlus содержит группы пакетов, все из которых являются обновлениями. Может стать так, что вы не захотите использовать CentOSPlus целиком, а будете выбирать только те пакеты, которые вы хотите использовать. |
CentOSPlus репозиторий содержит также CentOS Web Stack. Если вы заинтересованы в обновлении до CentOS Web Stack см. на этой странице. CentOS Web Stack содержит обновления для Apache (httpd) 2.0.58, MySQL 5.0, PostgreSQL 8.1, Perl 5.88, mod_perl 2, PHP 5.1.6, and ODBC. |
Перед тем как подключать репозиторий CentOSPlus вы должны ознакомится с применением опций в yum, таких как includepkgs= и/или exclude=. Чтобы прочитать об этих возможностях используйте следующую команду в терминале:
man yum.conf
Добавление репозитория EPEL
EPEL — самый простой в установке репозиторий. Epel-release package включен в стандартный Extras repository и доступен по умолчанию. Для его установки достаточно выполнить команду:
yum install epel-release -y
В процессе установки будет создан файл «epel.repo», который будет содержать все данные для работы с репозиторием. Выполним команду выводящую содержимое файла.
cat /etc/yum.repos.d/epel.repo name=Extra Packages for Enterprise Linux 7 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 name=Extra Packages for Enterprise Linux 7 - $basearch - Debug #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=1 name=Extra Packages for Enterprise Linux 7 - $basearch - Source #baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=1
Создание репозитория
Настроим свой репозиторий, в котором будут храниться установочные пакеты. Также настроим их автоматическую синхронизацию с репозиторием CentOS.
Устанавливаем необходимые утилиты для работы с локальным репозиторием:
yum install createrepo yum-utils
Создаем каталоги для репозитория:
mkdir -p /usr/share/nginx/html/repos/7/{os,updates}/x86_64
* в данном примере будет создан каталог /usr/share/nginx/html/repos/7, а внутри него каталоги os (стандартный репозиторий для установка пакетов) и updates (обновления), в каждой из которых каталог x86_64 (для систем x64 архитектуры x86).
Синхронизируем наш будущий репозиторий с источником пакетов, например, с зеркалом от Яндекса:
rsync -iavrt —delete —exclude=’repo*’ rsync://mirror.yandex.ru/centos/7/os/x86_64/ /usr/share/nginx/html/repos/7/os/x86_64/
… ждем …
После синхронизируем updates:
rsync -iavrt —delete —exclude=’repo*’ rsync://mirror.yandex.ru/centos/7/updates/x86_64/ /usr/share/nginx/html/repos/7/updates/x86_64/
Создаем репозитории:
createrepo -v /usr/share/nginx/html/repos/7/os/x86_64
createrepo -v /usr/share/nginx/html/repos/7/updates/x86_64
А также разрешаем группы:
createrepo /usr/share/nginx/html/repos/7/os/x86_64 -g /usr/share/nginx/html/repos/7/os/x86_64/repodata/repomd.xml
createrepo /usr/share/nginx/html/repos/7/updates/x86_64 -g /usr/share/nginx/html/repos/updates/os/x86_64/repodata/repomd.xml
* в некоторых репозиториях файл repomd.xml может иметь другое название, например, comps.xml.
Настраиваем nginx:
vi /etc/nginx/conf.d/default.conf
…
location / {
root /usr/share/nginx/html;
index index.html index.htm;
autoindex on;
}
…
* в данном примере мы добавили autoindex on для удобства — это позволит просматривать содержимое репозитория в браузере.
Перезапускаем nginx:
systemctl restart nginx
Открываем браузер и переходим по адресу http://<IP-адрес сервера>/repos/7 — мы должны увидеть список os и updates. Походив по нему, мы найдем список скачанных пакетов.
Управление репозиториями в CentOS
Управление пакетами и репозиториями осуществляет утилита YUM (Yellowdog Updater, Modified) — менеджер RPM-пакетов, использующийся в дистрибутивах: RHEL, SentOS, Scientific Linux. В его задачи входит: поиск, установка, удаление пакетов, обновление системы.
Процесс установки пакетов происходит после выполнения команды — yum install packagename. После ввода команды менеджер пакетов проверяет наличие конфигурационных файлов «*.repo», эти файлы содержат информацию о репозиториях и хранятся в директории /etc/yum.repos.d. Во время проверки YUM получает всю необходимую информацию, указывающую откуда загружать пакет и какие зависимости имеют к нему отношение. После чего происходит установка пакета.
Конфигурационные файлы репозиториев содержат следующие параметры:
- name — имя репозитория, может быть любым.
- baseurl — ссылка указывающая на репозиторий. Может быть вида: ftp://link, http://link, https://link, если репозиторий размещен в сети интернет, или file://path, если репозиторий размещен локально.
- enabled — указывает на активацию репозитория при выполнении обновления. Может иметь следующие значения, 1 — если подключен, 0 — если отключен.
- gpgcheck — включить или выключить проверку сигнатуры GPG. Может иметь следующие значения, 1 — проверять, 0- не проверять.
- gpgkey — ссылка на ключ GPG.
- exclude — список исключаемых пакетов.
- includepkgs — список включаемых пакетов.
- mirrorlist — вместо ссылки на конкретный адрес репозитория, может использоваться ссылка на список адресов из которых будет выбран нужный адрес.
Подключение репозиториев в CentOS
Добавить репозиторий в CentOS можно несколькими способами. Можно создать файл «.repo» в директории /etc/yum.repos.d или установить rpm-пакет с информацией о репозитории. Если rpm-пакет отсутствует, то добавлять приходится ручками, создавая конф. файл репозитория.
Для просмотра списка активных репозиториев выполняют команду — yum repolist
yum repolist # Выхлоп: repo id repo name status base/7/x86_64 CentOS-7 - Base 9,007 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 10,580 extras/7/x86_64 CentOS-7 - Extras 390 updates/7/x86_64 CentOS-7 - Updates 2,469 repolist: 22,446 # repo id - id репозитория # repo name - имя репозитория # status - количество пакетов
Удаление репозиториев в CentOS
Для удаления репозиториев в системе должен быть установлен пакет yum-utils.
yum install yum-utils -y
Допустим мы хотим удалить из системы репозитории REMI и ELRepo, для этого надо узнать «repo id» при помощи команды yum repolist.
yum repolist Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.yandex.ru * elrepo: elrepo.0m3n.net * epel: mirror.23media.de * extras: mirror.yandex.ru * remi-safe: mirror.23media.de * updates: mirror.yandex.ru repo id repo name status base/7/x86_64 CentOS-7 - Base 9,007 elrepo ELRepo.org Community Enterprise Linux Repository - el7 162 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 10,580 extras/7/x86_64 CentOS-7 - Extras 390 remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 1,144 updates/7/x86_64 CentOS-7 - Updates 2,469 repolist: 23,752
Удалим указанные репозитории.
yum-config-manager --disable remi-safe --disable elrepo
Команда скорее отключает указанные репозитории, чем удаляет их. Она выставляет значение параметра enabled равным 0. Файлы репозиториев «.repo» останутся на месте. Если выполнить команду yum repolist, то репозитории будут недоступны.
yum repolist Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.yandex.ru * epel: fedora-mirror01.rbc.ru * extras: mirror.yandex.ru * updates: mirror.yandex.ru repo id repo name status base/7/x86_64 CentOS-7 - Base 9,007 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 10,580 extras/7/x86_64 CentOS-7 - Extras 390 updates/7/x86_64 CentOS-7 - Updates 2,469 repolist: 22,446
Теперь нужно обновить кэш YUM.
yum clean all yum makecache
Для полного удаления репозиториев следует удалить их конфигурационные файлы.
# Переходим в каталог /etc/yum.repos.d cd /etc/yum.repos.d # Удаляем файлы rm -f elrepo.repo remi-php70.repo remi-php71.repo remi-safe.repo remi.repo
Ротация логов виртуальных хостов
Последний штрих в настройке 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 }
Это просто пример конфигурации. Все параметры вы можете поменять по своему усмотрению. Примеров конфигурации logrotate в интернете много.
На этом все. Я рассмотрел все основные моменты, которые необходимы для установки и настройки производительного web сервера на основе nginx и php-fpm последних версий. При этом рассказал о некоторых вещах, которые повышают удобство и гибкость эксплуатации сервера.
Доступ к сайту по sftp
Настройка сервера почти завершена. Если вы администратор и единственный пользователь, то больше можно ничего не делать. Вы и так сможете загрузить на сервер все что нужно тем или иным способом. Если же вы будете передавать управление сайтами другим людям, им нужен доступ к директории с исходниками сайта. Раньше для этих целей повсеместно использовали ftp. Если вы хотите так сделать, у меня есть статья по настройке ftp сервера vsftpd.
Я же предлагаю использовать sftp по нескольким причинам:
- Он безопаснее.
- Его быстрее настроить.
- Не надо отдельно настраивать 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. Но тут возникает много нюансов с правами к файлам и директориям. Дальше я расскажу, как их аккуратно и грамотно разрулить, чтобы у нас не было проблем с дальнейшей работой сайтов от разных пользователей.
Резюме
Использование репозитория CentOSPlus считается более опасным, чем при использовании других репозиториев CentOS, так как он рассчитан на обновление пакетов и не предназначен быть полностью включенным.
Вы можете использовать все пакеты из CentOSPlus, но обычно берутся необходимые пакеты и используется строка exclude= и includepkgs= (или exclude= и плагин yum-plugin-priorities (yum-priorities)) чтобы использовать только необходимые пакеты из репозитория CentOSPlus.
Пожалуйста, убедитесь, что вы понимаете все эти конепциии, прежде чем использовать репозиторий CentOSPlus.
Заключение
Подведем итог того, что мы сделали:
- Настроили сервисы nginx, apache, php-fpm таким образом, чтобы они отдавали информацию о своем состоянии.
- С помощью zabbix агентов передали эту информацию на сервер.
- Используя зависимые элементы (dependent items) настроили парсинг метрик.
- Настроили на сервере мониторинга необходимые шаблоны и прикрепили их к наблюдаемым серверам.
- Собрали dashboard для мониторинга за веб сервером.
То есть выполнили весь комплекс действий для организации полноценного мониторинга web сервера в zabbix.
Одно из применений подобного мониторинга — выбор более быстрого хостинга для сайта. К примеру, мне некоторое время назад понадобилось сменить хостинг. Но как узнать, будет ли он быстрее текущего или нет. Характеристики примерно у всех одинаковые. Я просто взял тестовый период, настроил на сервере все, что мне нужно, в том числе мониторинг веб сервера, перенес туда сайт и понаблюдал сутки. Уже по времени отклика nginx и php-fpm мне стало понятно, что новый хостинг быстрее:
Время отклика страниц сайта и скорость их загрузки в целом тоже улучшились. Я однозначно понял, что надо переезжать и не ошибся.
Это пример из старой версии статьи, где показаны старые метрики и графики. Оставил его, так как он в целом информативен. Текущий мониторинг web сайта так же можно использовать для анализа производительности хостинга.
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Что даст вам этот курс:
- Знание архитектуры Linux.
- Освоение современных методов и инструментов анализа и обработки данных.
- Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
- Владение основными рабочими инструментами системного администратора.
- Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
- Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .