Установка и настройка стека LEMP из коллекций программного обеспечения в CentOS 7

Программный стек LEMP – это программного обеспечения с открытым исходным кодом, которая позволяет размещать динамические сайты и веб-приложения. LEMP – это аббревиатура, где L обозначает операционную систему Linux, Е – веб-сервер ENginx (вместо Apache в стеке LAMP), M – базу данных MySQL (или MariaDB), а Р – PHP.

Компоненты стека LEMP иногда устанавливаются из репозитория CentOS 7 EPEL. Однако этот репозиторий содержит устаревшие пакеты. Например, вы не можете установить из EPEL версию PHP выше 5.4.16, хотя эта версия уже давно не поддерживается. Чтобы получить более новые версии программ, рекомендуется использовать коллекции программного обеспечения (Software Collections), также известных как SCL. SCL – это коллекции ресурсов разработчика, предоставляемых RedHat, которые позволяют использовать несколько версий программного обеспечения в одной и той же системе, не затрагивая ранее установленные пакеты.

Данный мануал поможет установить стек LEMP на сервер CentOS 7. Операционная система CentOS – это уже первый компонент стека, поскольку это дистрибутив Linux. В мануале вы узнаете, как установить остальные компоненты, используя репозиторий Software Collections, а затем настроить их для обслуживания простой веб-страницы.

Требования

Для работы вам нужен сервер CentOS 7, настроенный по этому мануалу.

1: Добавление репозитория Software Collections

Чтобы получить доступ к SCL для CentOS, установите этот файл:

sudo yum install centos-release-scl

Просмотрите список пакетов SCL:

yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available

Чтобы избежать общесистемных конфликтов, пакеты SCL устанавливаются в каталоге /opt/rh . Это позволяет, например, установить Python 3.5, не удаляя и не нарушая работы Python 2.7.

Все конфигурационные файлы для пакетов SCL хранятся в соответствующем каталоге в /etc/opt/rh/. Пакеты SCL предоставляют сценарии оболочки, которые определяют переменные среды, необходимые для использования включенных приложений (PATH, LD_LIBRARY_PATH и MANPATH). Эти сценарии хранятся в файловой системе как /opt/rh/package-name/enable.

Теперь вы можете устанавливать пакеты из коллекций.

2: Установка Nginx

Чтобы отображать веб-страницы, нужно использовать современный веб-сервер, например Nginx.

Установите Nginx, используя команду yum. Обязательно замените выделенное значение версией Nginx, которую вы хотите установить (на момент написания статьи последней является 112).

sudo yum install rh-nginx112

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

sudo systemctl start rh-nginx112-nginx

Убедитесь, что сервис запущен:

sudo systemctl status rh-nginx112-nginx
rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago
Main PID: 10556 (nginx)
CGroup: /system.slice/rh-nginx112-nginx.service
├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx
├─10557 nginx: worker process
└─10558 nginx: worker process
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server.
Hint: Some lines were ellipsized, use -l to show in full.

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

sudo yum install firewalld

Теперь запустите сервис firewalld:

sudo systemctl start firewalld

Добавьте правила брандмауэра, которые разрешат SSH-доступ к серверу и подключения HTTP и HTTPS к Nginx:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https

Перезапустите firewalld:

sudo firewall-cmd --reload

Читайте также: Настройка брандмауэра FirewallD в CentOS 7

При добавлении этих новых правил брандмауэра вы можете проверить, запущен ли сервер, открыв домен или внешний IP-адрес сервера в веб-браузере.

Если у вас нет домена, указывающего на сервер, и вы не знаете внешний IP-адрес своего сервера, вы можете узнать его, введя в свой терминал следующее:

curl -4 icanhazip.com

Используйте полученный IP в ссылке:

http://server_domain_or_IP

Вы увидите стандартную посадочную страницу Nginx. Если это так – вы успешно установили Nginx. Прежде чем продолжить, добавьте Nginx в автозагрузку:

sudo systemctl enable rh-nginx112-nginx

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

3: Установка MariaDB для управления данными сайта

Теперь, когда у вас есть веб-сервер, пришло время установить MariaDB (это аналог MySQL) для хранения и управления данными сайта.

Установите MariaDB с помощью следующей команды. Опять же, замените выделенное значение номером версии, которую вы хотите установить (на момент написания этой статьи последней доступной версией является 102):

sudo yum install rh-mariadb102

Когда установка MariaDB закончится, запустите СУБД:

sudo systemctl start rh-mariadb102-mariadb

Теперь MariaDB установлена и запущена. Теперь нужно настроить СУБД.

Чтобы защитить установку, используйте сценарий, который по умолчанию поставляется с MariaDB. Запустите его:

source /opt/rh/rh-mariadb102/enable
mysql_secure_installation

Сценарий запросит текущий пароль root. Поскольку вы только что установили MySQL, у вас, скорее всего, еще нет такого пароля, поэтому оставьте поле пустым, нажав Enter. Затем сценарий предложит установить пароль root. Введите Y и следуйте инструкциям:

. . .
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorization.
Set root password? [Y/n] Y
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
... Success!
. . .

Чтобы принять значения по умолчанию для других запросов, просто нажмите Enter. Сценарий удалит анонимных пользователей и тестовые базы данных, отключит удаленный root логин и обновит правила MariaDB в текущей сессии.

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

sudo systemctl enable rh-mariadb102-mariadb

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

Теперь у вас есть веб-сервер Nginx и БД MariaDB. Но пока что у вас нет компонента для генерирования динамического контента. Для этого используется PHP.

Поскольку Nginx не предлагает встроенной обработки PHP, в отличие от других веб-серверов, вам нужно установить php-fpm (fastCGI process manager). Позже вы настроите Nginx для передачи PHP-запросов в эту программу.

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

sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd

Компоненты PHP установлены. Теперь нужно отладить настройки.

Откройте главный файл php.ini:

sudo vi /etc/opt/rh/rh-php71/php.ini

В нем найдите параметр cgi.fix_pathinfo. Он будет закомментирован (символом ;) и со значением 1.

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

Раскомментируйте параметр и укажите значение 0:

cgi.fix_pathinfo=0

Сохраните и закройте файл.

Откройте конфигурационный файл php-fpm,

www.conf:
sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf

По умолчанию этот файл предназначен для работы с сервером Apache. Поскольку вы установили Nginx, нужно изменить параметры user и group:

user = nginx
group = nginx

Сохраните и закройте файл.

Запустите PHP-процессор:

sudo systemctl start rh-php71-php-fpm

Добавьте PHP в автозагрузку:

sudo systemctl enable rh-php71-php-fpm

Теперь PHP установлен на ваш сервер. Однако его еще нужно настроить для взаимодействия с остальными программами.

5: Настройка взаимодействия Nginx и PHP

Итак, вы установили все необходимые компоненты стека LEMP. Осталось только изменить настройки Nginx, чтобы веб-сервер поддерживал PHP.

Это изменение нужно внести на уровне блока server (это аналог виртуального хоста в Apache). Откройте стандартный блок server Nginx:

sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf

Раскомментируйте блок location ~ \.php$ (этот фрагмент файла обрабатывает запросы PHP и находится в блоке server) и его компоненты, удалив символ # в начале каждой строки. Также вам нужно обновить опциюfastcgi_param, указав в ней SCRIPT FILENAME $document_root$fastcgi_script_name. Это сообщит PHP о том, где находится корневой каталог веб-сервера, document root.

В результате файл будет выглядеть так:

...
server {
listen       80 default_server;
listen       [::]:80 default_server;
server_name  _;
root         /opt/rh/rh-nginx112/root/usr/share/nginx/html;
# Load configuration files for the default server block.
include      /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504  /50x.html;
location = /50x.html {
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
<^>location ~ \.php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
include        fastcgi_params;
}<^>
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}
...

Сохраните и закройте файл.

Теперь нужно проверить ошибки в конфигурации:

source /opt/rh/rh-nginx112/enable

sudo nginx -t

Если команда найдет ошибки, вернитесь в файл и исправьте их

Когда ошибок не будет, перезапустите Nginx:

sudo systemctl reload rh-nginx112-nginx

Теперь Nginx, PHP и MariaDB установлены и настроены. Осталось только убедиться, что компоненты LEMP могут работать вместе.

6: Создание тестового PHP-файла

Стек LEMP полностью укомплектован. Теперь нужно убедиться, что Nginx может корректно обрабатывать файлы .php. Для этого нужно создать PHP-файл в каталоге document root.

Откройте info.php:

sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Добавьте следующую строку в новый файл. Это код PHP, который выводит информацию о вашем сервере.

<?php phpinfo(); ?>

Сохраните и закройте файл.

Теперь откройте в браузере ссылку:

http://server_domain_or_IP/info.php

На экране появится справочная страница PHP с информацией о сервере. Если это так – поздравляем, вы успешно настроили стек.

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

Удалите файл:

sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Заключение

Теперь у вас есть полностью настроенный стек LEMP на сервере CentOS 7.

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

scl --list

Больше информации о Software Collections можно найти на официальном сайте.

Tags: , , , , , ,