Продолжение статьи об установке MariaDB + Nginx + PHP-FPM на сервер под управлением CentOS 7. Предыдущие части: Часть 1, Часть 2.
В предыдущих двух статьях я рассказал каким образом я настраивают CentOS под себя, чтобы с ней было удобно работать, а так же описал установку сервера баз данных MariaDB. Теперь пришло время установить движки для обработки Web. В качестве Web-сервера я оставил выбор за NGINX. В качестве препроцессора - PHP-FPM. Но обо все по порядку. Сейчас подошло время для установки PHP.
Содержание:
- Проверка текущей версии CentOS
- Установка FTP сервера (vsFTPd)
- Создание пользователя с правами root
- Настройка строки приглашения
- Установка MariaDB (MySQL)
- Настройка MariaDB
- Установка PHP
- Настройка PHP-FPM
- Установка NGINX
- Ключ на старт...
- Послесловие
7. Установка PHP.
Продолжим свой путь "в ногу со временем" и установим PHP версии 5.6. Сейчас активно развивается репозитарий Remi (ссылка [3]). Кому интересно, могут посмотреть текущий список доступных репозитариев PHP по ссылке [4]. В любом случае, для установки пакета Remi PHP, понадобится установить Extra Packages for Enterprise Linux (EPEL, ссылка [1]). Полный список пакетов вы можете посмотреть по ссылке [2]. На момент установки была доступна версия EPEL http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm, Remi http://rpms.famillecollet.com/enterprise/remi-release-7.rpm. Так, вроде обо всем рассказал, все линки указал... Поехали.
[01:55 ebabenko@centos7 ~]$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm Retrieving http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm warning: /var/tmp/rpm-tmp.ajfbma: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:epel-release-7-5 ################################# [100%] [01:56 ebabenko@centos7 ~]$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm Retrieving http://rpms.famillecollet.com/enterprise/remi-release-7.rpm warning: /var/tmp/rpm-tmp.16Bmcg: Header V3 DSA/SHA1 Signature, key ID 00f97f56: NOKEY Preparing... ################################# [100%] Updating / installing... 1:remi-release-7.1-1.el7.remi ################################# [100%] [01:56 ebabenko@centos7 ~]$ sudo yum repolist Loaded plugins: fastestmirror epel/x86_64/metalink | 25 kB 00:00:00 epel | 4.4 kB 00:00:00 remi-safe | 2.9 kB 00:00:00 (1/3): remi-safe/primary_db | 69 kB 00:00:00 (2/3): epel/x86_64/group_gz | 169 kB 00:00:00 (3/3): epel/x86_64/primary_db | 3.6 MB 00:00:01 (1/2): epel/x86_64/updateinfo | 415 kB 00:00:00 (2/2): epel/x86_64/pkgtags | 1.6 MB 00:00:00 Loading mirror speeds from cached hostfile * base: mirrors-ru.go-parts.com * epel: fedora-mirror01.rbc.ru * extras: mirrors-ru.go-parts.com * remi-safe: mirror.h1host.ru * updates: mirrors-ru.go-parts.com repo id repo name status base/7/x86_64 CentOS-7 - Base 8,652 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 8,142 extras/7/x86_64 CentOS-7 - Extras 149 mariadb MariaDB 11 remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 124 updates/7/x86_64 CentOS-7 - Updates 928 repolist: 18,006 [01:57 ebabenko@centos7 ~]$ ll /etc/yum.repos.d total 44 -rw-r--r--. 1 root root 1664 Apr 1 01:27 CentOS-Base.repo -rw-r--r--. 1 root root 1309 Apr 1 01:27 CentOS-CR.repo -rw-r--r--. 1 root root 649 Apr 1 01:27 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 290 Apr 1 01:27 CentOS-fasttrack.repo -rw-r--r--. 1 root root 1331 Apr 1 01:27 CentOS-Sources.repo -rw-r--r--. 1 root root 1002 Apr 1 01:27 CentOS-Vault.repo -rw-r--r--. 1 root root 957 Nov 25 2014 epel.repo -rw-r--r--. 1 root root 1056 Nov 25 2014 epel-testing.repo -rw-r--r--. 1 root root 135 Jul 1 01:11 MariaDB.repo -rw-r--r--. 1 root root 2260 Jun 2 18:39 remi.repo -rw-r--r--. 1 root root 449 Jun 2 18:39 remi-safe.repo [01:58 ebabenko@centos7 ~]$ sudo vi /etc/yum.repos.d/remi.repo
Для того, чтобы установить PHP версии 5.6, требуется в разделе [remi] установить параметр enabled=1, а так же в нужном разделе php так же указать этот параметр. Для данной установки, я этот параметр указываю в разделе [remi-php56].
[remi] name=Remi's RPM repository for Enterprise Linux 7 - $basearch #baseurl=http://rpms.remirepo.net/enterprise/7/remi/$basearch/ mirrorlist=http://rpms.remirepo.net/enterprise/7/remi/mirror enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[...skipped...] [remi-php56]
name=Remi's PHP 5.6 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php56/$basearch/
mirrorlist=http://rpms.remirepo.net/enterprise/7/php56/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi [...skipped...]
Производим установку. Из списка, который я указал ниже, вы можете поставить только те, которые вам требуются, т.е. не просто скопировать командную строку, а выбрать те пакеты, с которыми вы будете работать (или будет работать тот Framework или CMS, который вы собираетесь использовать). Для данного контекста обязательными являются пакеты php-cli и php-fpm, все остальные опциональны. В любом случае "перегружать" PHP установленными пакетами я не рекомендую. При необходимости, вы всегда сможете доставить все то, что вам требуется. В прочем, и деинсталировать ненужные пакеты вы так же сможете, но об этом чаще всего просто забываешь.
[02:06 ebabenko@centos7 ~]$ sudo yum install php-cli php-fpm php-mysqli php-mcrypt [...skipped...] Install 4 Packages (+6 Dependent packages) Total download size: 7.1 M Installed size: 27 M Is this ok [y/d/N]: y [...skipped...] Installed: php-cli.x86_64 0:5.6.10-1.el7.remi php-fpm.x86_64 0:5.6.10-1.el7.remi php-mcrypt.x86_64 0:5.6.10-1.el7.remi php-mysqlnd.x86_64 0:5.6.10-1.el7.remi Dependency Installed: libmcrypt.x86_64 0:2.5.8-13.el7 libtool-ltdl.x86_64 0:2.4.2-20.el7 php-common.x86_64 0:5.6.10-1.el7.remi php-pdo.x86_64 0:5.6.10-1.el7.remi php-pecl-jsonc.x86_64 0:1.3.7-1.el7.remi.5.6 php-pecl-zip.x86_64 0:1.12.5-1.el7.remi.5.6 Complete!
Установим таймзону, соответствующую региону, на котором будет работать сервер:
[02:11 ebabenko@centos7 ~]$ sudo vi /etc/php.ini
[...skipped...]
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Moscow"
[...skipped...]
Проверим, что получилось в итоге
[02:13 ebabenko@centos7 ~]$ php -v PHP 5.6.10 (cli) (built: Jun 11 2015 07:45:02) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies [02:14 ebabenko@centos7 ~]$ php -m [PHP Modules] bz2 calendar Core [...skipped...] [Zend Modules]
8. Настройка PHP-FPM.
Тут я уже буду описывать настройки, опираясь на собственный опыт и подобных настроек, по правде говоря, я не увидел ни у кого (во всяком случае не нашел и Google мне тут не помог). Не помню, под какой версией Linux я первый раз увидел подобную настройку NGINX, но суть такой реализации мне оказалась по душе. Смысл этих настроек заключался в том, что один сервер может содержать большое количество конфигураций, но загружаться будут только те, которые располагаются в определенной директории. Таким образом, в NGINX все конфигурации находились в директории sites-available, загружаемые - в директории sites-enabled. И чтобы загрузить какую-либо конфигурацию, достаточно прописать симлинк на существующий конфиг и перегрузить сервис NGINX. Создадим подобную структуру для загрузки конфигурация PHP-FPM. По умолчанию, FPM загружает все конфигурации, расположенные в директории /etc/php-fpm.d. Я же в ней создам директорию pool-available, где буду сохранять все возможные пулы, но запускаться будут только те, симлинки которых будут помещены в директорию pool-enabled. Существующий пул www.conf я перенесу с именем pool.example как эталон конфигурации, так как там описаны комментарии к параметрам настроек.
[02:29 ebabenko@centos7 ~]$ cd /etc/php-fpm.d [02:36 ebabenko@centos7 /etc/php-fpm.d]$ ll total 20 -rw-r--r--. 1 root root 18549 Jun 11 08:48 www.conf [02:36 ebabenko@centos7 /etc/php-fpm.d]$ sudo mkdir pool-available pool-enabled [02:37 ebabenko@centos7 /etc/php-fpm.d]$ ll total 20 drwxr-xr-x. 2 root root 6 Jul 1 21:07 pool-available drwxr-xr-x. 2 root root 6 Jul 1 21:07 pool-enabled -rw-r--r--. 1 root root 18549 Jun 11 08:48 www.conf [02:37 ebabenko@centos7 /etc/php-fpm.d]$ sudo mv www.conf pool-available/pool.example [02:38 ebabenko@centos7 /etc/php-fpm.d]$ ll total 0 drwxr-xr-x. 2 root root 25 Jul 1 21:08 pool-available drwxr-xr-x. 2 root root 6 Jul 1 21:07 pool-enabled [02:38 ebabenko@centos7 /etc/php-fpm.d]$ ll pool-available total 20 -rw-r--r--. 1 root root 18549 Jun 11 08:48 pool.example
Директории созданы, шаблон конфигурации пула перенесен. Настроим основной конфигурационный файл.
[03:08 ebabenko@centos7 /etc/php-fpm.d]$ sudo vi /etc/php-fpm.conf
Настроечных параметров в файле достаточно много и каждый может их настроить под свои нужды, как кому требуется. Однако, я ограничусь тем, что:
- укажу директорию и расширения файлов, которые будут загружаться. В моём случае это директория /etc/php-fpm.d/pool-enabled, загружаться будут все файлы с расширением conf;
- укажу куда будут писаться логи ошибок мастер-процесса;
- укажу механизм FPM. По умолчанию этот параметр закомментирован и система сама определяет какой процесс лучше выбрать. Однако, я укажу принудительно epol, указав что FPM работает под управлением OS Linux.
[...skipped...] ; Include one or more files. If glob(3) exists, it is used to include a bunch of ; files from a glob(3) pattern. This directive can be used everywhere in the ; file. include=/etc/php-fpm.d/pool-enabled/*.conf [...skipped...] ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written ; in a local file. ; Default Value: /var/log/php-fpm.log error_log = /var/log/php-fpm/error.master.log [...skipped...] ; Specify the event mechanism FPM will use. The following is available: ; - select (any POSIX os) ; - poll (any POSIX os) ; - epoll (linux >= 2.5.44) ; Default Value: not set (auto detection) events.mechanism = epoll [...skipped...]
Создаем требуемые пулы. Согласно описанию в начале статьи, мне потребуется создать 2 пула: для общего сервиса и для пользовательского.
[03:14 ebabenko@centos7 /etc/php-fpm.d]$ cd pool-available [03:14 ebabenko@centos7 /etc/php-fpm.d/pool-available]$ sudo vi www.conf
Данный пул будет обрабатывать общий сервис. Комментарии к каждому параметру я описал.
; имя пула [www] ; имя пользователя пула user = www ; группа пользователя пула group = www ; путь к сокету пула listen = /var/run/php5-fpm-$pool.sock ; права доступа к сокету listen.mode = 0666 ; тип контроля за процессами пула: определяется системой pm = ondemand ; Максимальное количество подключений на пул pm.max_children = 50 ; путь к логу доступа access.log = /var/log/php-fpm/access.$pool.log ; формат лога доступа access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" ; путь к логу медленных обработок slowlog = /var/log/php-fpm/slow.$pool.log
Хочу остановить внимание на следующих параметрах:
- [www] - имя пула. Задавать можно любые имена, главное, чтобы у вас не было 2 разных пула с одинаковым именем. Я придерживаюсь правила, что имя пулу даётся согласно имени его файла.
- $pool - данная переменная подставит в любую часть конфигурации имя пула. В данном случае, где прописана эта переменная, после инициализации будет подставлено www. Это очень удобно при создании конфигурации нового пула. Обычно, я просто копирую существующую конфигурацию с новым именем, при редактировании даю новое имя и прописываю пользователя и группу, от кого будет работать пул. Остальные параметры автоматически пропишутся нужным образом (например, сокет пула будет создан как /var/run/php5-fpm-www.sock). По сути, можно было бы эту переменную так же вставить и в имя пользователя и группы, однако не всегда это правило справедливо, так как очень часто у меня под одним пользователем крутятся разные пулы.
- listen.mode = 0666 - до не давнего времени, данный параметр был закомментирован в конфигурации пула и по правде говоря я не понимал, для чего он нужен если и без него все работает. Однако, последние версии PHP претерпели изменения, где этот параметр стал использоваться и даже больше: без него NGINX не мог получить доступ к сокету пула.
- pm = ondemand - описание данного параметра процесс-менеджера так же не всегда можно найти. Суть его заключается в том, что система сама будет определять, сколько и в какой момент требуется запускать пулов одновременно. С другими типами всегда требуется изрядного копания и экспериментирования, дабы добиться нужного результата. Этот тип может и не на столько является оптимальным, но с моей точки зрения даже на очень загруженном сервере этот параметр показал отличную производительность.
[03:20 ebabenko@centos7 /etc/php-fpm.d/pool-available]$ sudo vi ebabenko.conf
По тому же принципу создаем пул для пользовательского сервиса.
[ebabenko] user = ebabenko group = ebabenko listen = /var/run/php5-fpm-$pool.sock listen.mode = 0666 pm = ondemand pm.max_children = 50 access.log = /var/log/php-fpm/access.$pool.log access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" slowlog = /var/log/php-fpm/slow.$pool.log
На этом настройка PHP-FPM закончена. Осталось только прописать созданные конфигурации в запускаемой директории, для чего создадим симлинки на существующие файлы.
[03:27 ebabenko@centos7 /etc/php-fpm.d/pool-available]$ cd ../pool-enabled [03:27 ebabenko@centos7 /etc/php-fpm.d/pool-enabled]$ sudo ln -s /etc/php-fpm.d/pool-available/ebabenko.conf [03:27 ebabenko@centos7 /etc/php-fpm.d/pool-enabled]$ sudo ln -s /etc/php-fpm.d/pool-available/www.conf [03:28 ebabenko@centos7 /etc/php-fpm.d/pool-enabled]$ ll total 0 lrwxrwxrwx. 1 root root 43 Jul 1 22:27 ebabenko.conf -> /etc/php-fpm.d/pool-available/ebabenko.conf lrwxrwxrwx. 1 root root 38 Jul 1 22:28 www.conf -> /etc/php-fpm.d/pool-available/www.conf [03:28 ebabenko@centos7 /etc/php-fpm.d/pool-enabled]$ ll ../pool-available total 28 -rw-r--r--. 1 root root 302 Jul 1 22:26 ebabenko.conf -rw-r--r--. 1 root root 18549 Jun 11 08:48 pool.example -rw-r--r--. 1 root root 802 Jul 1 22:21 www.conf
Продолжение статьи "Установка MariaDB + Nginx + PHP-FPM на CentOS 7 (Часть 4)".
Источники:
[1] http://fedoraproject.org/wiki/EPEL (вернутсья к тексту)
[2] http://dl.fedoraproject.org/pub/epel/7/x86_64/ (вернутсья к тексту)
[3] http://rpms.famillecollet.com/ (вернутсья к тексту)
[4] http://rpms.famillecollet.com/enterprise/7/ (вернутсья к тексту)
Комментариев нет :
Отправить комментарий