четверг, 2 июля 2015 г.

Установка MariaDB + Nginx + PHP-FPM на CentOS 7 (Часть 1)

Подобных "мануалов" в сети достаточно много. Но в большинстве из них авторы ограничиваются исключительно стандартной установкой "из коробки" не вдаваясь в подробности настроек, что сильно ограничивает использование как NGINX, так и PHP-FPM. Так, в очередной раз мне понадобилось установить данную связку с учетом того, что сайтов на сервере может крутиться несколько и под разными пользователями. Плюс каждому из них должен быть доступен PhpMyAdmin. Как всегда начав "гуглить" я обнаружил, что найденные мной опубликованные материалы то с одной, то с другой стороны не удовлетворяют требуемого мне результата. И перелопачивая очередной десяток результатов поиска, я себя все больше и больше ловил на мысли, что, чтобы вот так в очередной раз не перебирать немереное количество материала, лучше оставить заметки на страницах своего блога.

Что требуется получить на выходе? Каждый сервис может содержать несколько сайтов. Под "сервисом" в данном контексте, я подразумеваю какой-то портал, который может содержать как один сайт, так и несколько, которые могут (но не обязательно) работать отдельно друг от друга. Соответственно, каждый сервис будет располагаться под своей учетной записью и распоряжаться исключительно своими файлами и управляться только своим процессом, не мешая другим, если таковые будут. Так же для каждого из сервисов должен быть доступен один общий сервис (например, для размещения того же PhpMyAdmin или другого подобного), доступ к которому каждый сможет получить, авторизовавшись под выделенным ему логину и паролю. Это чисто теоретический план желаемого результата.


Что касательно технической части, то она будет выглядеть следующим образом. NGINX и PHP-FPM запустят свои мастер-процессы и будут ожидать очередной команды на создание дочернего процесса. Так, NGINX получив очередной запрос, перенаправит его на соответствующий сервер, описанный в его конфигурации. Тем самым будет порожден дочерний процесс, которому будет отдано управление. В свою очередь, если в настройках сервера есть директива обработки fastcgi, он даст команду для создания дочернего процесса (пула) PHP-FPM. При этом, каждый дочерний процесс (как NGINX, так и PHP-FPM) не будет каждый раз создавать новый, а будет отдавать обработку уже существующим процессам определенного сервиса, пока количество обработчиков не достигнет максимального количества, который будет описан в конфигурации.

Итак, у меня будет 3 рабочих сайта: один сайт со статическими страницами NGINX (то есть в его рамках не будет использоваться PHP), один, образно говоря, пользовательский сервис и один общий сервис.

Содержание:

  1. Проверка текущей версии CentOS
  2. Установка FTP сервера (vsFTPd)
  3. Создание пользователя с правами root
  4. Настройка строки приглашения
  5. Установка MariaDB (MySQL)
  6. Настройка MariaDB
  7. Установка PHP
  8. Настройка PHP-FPM
  9. Установка NGINX
  10. Ключ на старт...
  11. Послесловие

1. Проверка текущей версии CentOS.

Что мы имеет на текущий момент? Версия CentOS версии 7 [1], установленная пакетом Minimal из дистрибутива NetInstall. После чего был сделан update системы (yum update) до текущей рабочей версии.

[root@centos7 ~]# cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)
[root@centos7 ~]# uname -a
Linux centos7.local 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

2. Установка FTP сервера (vsFTPd).

Так как каждый новый сервис будет находиться на сервере под своим аккаунтом, ему понадобится доступ к своим файлам. Для этого поднимаем FTP-сервер. Я предпочитаю vsFTPd, однако вы можете установить любой другой.

[root@centos7 ~]# yum install vsftpd

[...skipped...]

Install  1 Package

Total download size: 165 k
Installed size: 343 k
Is this ok [y/d/N]: y

[...skipped...]

Installed:
  vsftpd.x86_64 0:3.0.2-9.el7

Complete!
[root@centos7 ~]# vi /etc/vsftpd/vsftpd.conf

Закрываем доступ неавторизованным пользователям, и "chroot-тим" существующих локальных.

[...skipped...]

anonymous_enable=NO

[...skipped...]

chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list

[...skipped...]

Запускаем сервис и ставим его в автозагрузку. Обратите внимание, что команды по сравнению с предыдущими версиями CentOS изменились.

[root@centos7 ~]# systemctl start vsftpd.service
[root@centos7 ~]# ps ax | grep ftp
12175 ?        Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
12243 pts/0    S+     0:00 grep --color=auto ftp
[root@centos7 ~]# systemctl enable vsftpd.service
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
[root@centos7 ~]# systemctl list-unit-files | grep vsftpd
vsftpd.service                              enabled
vsftpd@.service                             disabled
vsftpd.target                               disabled

3. Создание пользователя с правами root.

Создаем нового пользователя и задаем ему пароль для входа в систему. Данный логин и пароль будут являться входом через FTP. На приглашение "New password:" вводим пароль, после чего на приглашение "Retype new password:" повторяем его.

[root@centos7 ~]# useradd ebabenko
[root@centos7 ~]# passwd ebabenko
Changing password for user ebabenko.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Так как это мой личный аккаунт на сервере, я добавлю аккаунт в группу администраторов (wheel) для того, чтобы из под него можно было выполнять команды под "рутом". Однако, если это будет какая то сторонняя учетная запись, этого делать крайне не рекомендую. Так же, надо понимать, что добавление пользователя в эту группу недостаточно для выполнения "рутовых" команд, потребуется ещё подправить конфигурацию sudo.

[root@centos7 ~]# usermod -a -G wheel ebabenko
[root@centos7 ~]# visudo

Находим указанную ниже строчку и раскомментируем ее (если она закомментирована), тем самым указав sudo, что все пользователи, входящие в группу wheel, будут иметь право выполнять команды с правами пользователя root.

[...skipped...]

## Allows people in group wheel to run all commands
%wheel        ALL=(ALL)       ALL

[...skipped...]

4. Настройка строки приглашения.

По правде говоря, следующие настройки имеют исключительно эстетический характер, нежели технический. Но тем не менее, эти настройки мне позволяют себя более комфортно чувствовать в командной строке. CentOS уже предоставляет вывод информации в цветовой гамме (папки одним цветом, запускаемые файлы другим и т.д.). Осталось только сделать командную строку более дружественной. Я привык к тому, что находясь под обычным пользователем, его ник в строке приглашения подсвечивается фиолетовым цветом. Если же пользователь root, то желтым. Так же очень удобно в строке приглашения видеть текущее время и полный путь каталога нахождения. Собственно, сделаем соответствующие изменения. Более подробно, какие цвета и команды существуют для "раскрашивания" строки приглашения, вы можете найти в интернете. Этой информации в сети достаточно много, поэтому я не буду указывать какой-то конкретный ресурс. Итак, изменяем строку приглашения для пользователя root.

[root@centos ~]# vi /root/.bashrc

В конец файла добавляем следующую строку

PS1='[\[\e[1;32m\]\A \[\e[1;33m\]\u\[\e[0m\]@\h \[\e[0;1;34m\]\w\[\e[0m\]]# '

А так же делаем изменения для нового созданного пользователя

[root@centos ~]# vi /home/ebabenko/.bashrc

И так же добавляем в конец файла строку

PS1='[\[\e[1;32m\]\A \[\e[1;35m\]\u\[\e[0m\]@\h \[\e[0;1;34m\]\w\[\e[0m\]]$ '

Теперь проверяем, что получилось в результате.

ВАЖНО! Чтобы проверить нововведенные параметры, вам достаточно параллельно открыть новую сессию через SSH и посмотреть как это все будет выглядеть. Тем кто работает на самом CentOS, достаточно переключиться в другую консоль (Alt+F2, Alt+F3 и т.д.). И пока не будете уверены в том, что вы сделали все правильно, советую вам не разлогиниваться с сервера по текущей сессии, иначе при неправильно установленных параметрах, вы не сможете управлять сервером и придется переустанавливать систему.

После того, как вы удостоверились, что командная строка у вас настроена и отображает все корректно, применяем изменения в текущей сессии (или консоли):

[root@centos7 ~]# source .bashrc
[00:46 root@centos7 ~]# su ebabenko
[00:49 ebabenko@centos7 /root]$ whoami
ebabenko
[00:49 ebabenko@centos7 /root]$ exit
[00:49 root@centos7 ~]# whoami
root

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

Продолжение статьи "Установка MariaDB + Nginx + PHP-FPM на CentOS 7 (Часть 2)".

Источники:
[1] http://centos.org/ (вернутсья к тексту)