Как установить и настроить стек LEMP с помощью программных коллекций в CentOS 7

Автор выбралApache Software Foundation для получения пожертвования в размере 100 долларов в рамках программыWrite for DOnations.

Вступление

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

Компоненты стека LEMP иногда устанавливаются с использованием CentOS 7EPEL repository. Однако этот репозиторий содержит устаревшие пакеты. Например, вы не можете установить какую-либо версию PHP выше 5.4.16 из EPEL, даже если этот выпуск не поддерживаетсяfor a long time. Для получения более новых версий программного обеспечения рекомендуется использовать Коллекции программного обеспечения, также известные как SCL. SCL - это наборы ресурсов разработчика, предоставляемые RedHat, которые позволяют вам использовать несколько версий программного обеспечения в одной системе, не затрагивая ранее установленные пакеты.

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

Предпосылки

Прежде чем приступить к этому руководству, вы должны настроить сервер CentOS 7, выполнивthe CentOS 7 initial server setup guide, включая пользователя sudo без полномочий root.

[[шаг-1 -—- включение-репозитория-коллекций-программного обеспечения]] == Шаг 1. Включение репозитория коллекций ПО

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

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 на компьютере с CentOS 7, не удаляя и не вмешиваясь в Python 2.7.

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

Теперь вы готовы начать установку пакетов, описанных в этом руководстве.

[[step-2 -—- install-the-nginx-web-server]] == Шаг 2 - Установка веб-сервера Nginx

Чтобы показывать веб-страницы посетителям, мы собираемся использовать Nginx, современный, эффективный веб-сервер.

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

sudo yum install rh-nginx112

После завершения установки запустите службу Nginx:

sudo systemctl start rh-nginx112-nginx

Подтвердите, что Nginx запущен, введя командуsystemctl status:

sudo systemctl status rh-nginx112-nginx
Output● 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 вHow To Set Up a Firewall Using FirewallD on CentOS 7.

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

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

curl -4 icanhazip.com

Введите полученный IP-адрес в адресную строку вашего веб-браузера, и вы увидите целевую страницу Nginx по умолчанию:

http://server_domain_or_IP

Nginx default page

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

sudo systemctl enable rh-nginx112-nginx

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

[[шаг-3 -—- install-mariadb-to-manage-site-data]] == Шаг 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

На данный момент ваша система баз данных настроена, и вы можете перейти к настройке PHP на вашем сервере.

[[step-4 -—- install-and-configuring-php-for-processing]] == Шаг 4 - Установка и настройка PHP для обработки

Теперь у вас установлен Nginx для обслуживания ваших страниц и MariaDB для хранения ваших данных и управления ими. Однако у вас все еще не установлено ничего, что могло бы генерировать динамический контент. Вот где приходит PHP.

Поскольку Nginx не поддерживает встроенную обработку PHP, как некоторые другие веб-серверы, вам необходимо установитьphp-fpm, что означает «менеджер процессов fastCGI». Позже вы сконфигурируете Nginx для передачи PHP-запросов к этой программе для обработки.

Установите этот модуль и также получите вспомогательный пакет, который позволит PHP взаимодействовать с вашей базой данных базы данных. При установке будут загружены необходимые файлы ядра PHP. Сделайте это, набрав:

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

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

Откройте основной файл конфигурацииphp.ini с правамиroot:

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

В этом файле найдите параметр, который устанавливаетcgi.fix_pathinfo. Это будет закомментировано точкой с запятой (;) и будет установлено в «1» по умолчанию.

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

Измените оба эти условия, раскомментировав строку и установив ее в «0» следующим образом:

71/php.ini’>/etc/opt/rh/rh-php71/php.ini

cgi.fix_pathinfo=0

По завершении сохраните и закройте файл (нажмитеESC, введите:wq, затем нажмитеEnter).

Затем откройте файл конфигурации php-fpmwww.conf:

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

По умолчанию этот файл настроен для работы с сервером Apache. Поскольку на вашем сервере установлен Nginx, найдите строки, устанавливающиеuser иgroup, и измените их значения с «apache» на «nginx»:

71/php-fpm.d/www.conf’>/etc/opt/rh/rh-php71/php-fpm.d/www.conf

user = nginx
group = nginx

Затем сохраните и закройте файл.

Затем запустите ваш PHP-процессор, набрав:

sudo systemctl start rh-php71-php-fpm

Затем включите php-fpm для запуска при загрузке:

sudo systemctl enable rh-php71-php-fpm

После этого вы успешно установили PHP на свой сервер. Однако он все равно должен быть настроен для работы с другим установленным вами программным обеспечением, чтобы ваш сервер мог корректно обслуживать содержимое вашего сайта.

[[step-5 -—- configuring-nginx-to-use-the-php-processor]] == Шаг 5. Настройка Nginx для использования процессора PHP

На этом этапе у вас есть все необходимые компоненты стека LEMP. Единственное изменение конфигурации, которое вам все еще нужно сделать, это указать Nginx использовать ваш процессор PHP для динамического содержимого.

Это изменение конфигурации производится на уровне блоков сервера (блоки серверов аналогичны виртуальным хостам Apache). Откройте файл конфигурации блока 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 о расположении корня документа, где он может найти файлы для обработки.

После внесения необходимых изменений блокserver будет выглядеть так:

/etc/nginx/sites-available/default

...
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 способна правильно обслуживать контент для посетителей вашего сайта.

[[step-6 -—- created-a-php-file-to-test-configuration]] == Шаг 6. Создание файла PHP для проверки конфигурации

Теперь ваш стек LEMP полностью настроен, и вы можете протестировать его, чтобы убедиться, что Nginx может правильно передавать файлы.php вашему процессору PHP. Это делается путем создания тестового файла PHP в корне нашего документа.

Откройте новый файл с именемinfo.php в корне документа:

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

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

112/root/usr/share/nginx/html/info.php’>/opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Когда вы закончите, сохраните и закройте файл. Затем перейдите на эту страницу в своем веб-браузере, посетив доменное имя или общедоступный IP-адрес вашего сервера, а затем введите/info.php:

http://server_domain_or_IP/info.php

Вы увидите веб-страницу, созданную PHP, с информацией о вашем сервере:

PHP page info

Если вы видите страницу, которая выглядит следующим образом, вы успешно настроили обработку PHP с Nginx.

Убедившись, что Nginx правильно отображает страницу, лучше удалить созданный вами файл, поскольку он может дать неавторизованным пользователям некоторые подсказки о вашей конфигурации, которые могут помочь им попытаться взломать. Вы всегда можете восстановить этот файл, если он понадобится вам позже.

Удалите файл, набрав:

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

Этим вы подтвердили, что все компоненты стека LEMP установлены и правильно настроены на вашем сервере.

Заключение

Теперь у вас есть полностью сконфигурированный стек LEMP на вашем сервере CentOS 7. Это дает вам очень гибкую основу для предоставления веб-контента вашим посетителям.

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

scl --list

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

Related