Автор выбрал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. Прежде чем продолжить, включите 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 с Nginx.
Убедившись, что Nginx правильно отображает страницу, лучше удалить созданный вами файл, поскольку он может дать неавторизованным пользователям некоторые подсказки о вашей конфигурации, которые могут помочь им попытаться взломать. Вы всегда можете восстановить этот файл, если он понадобится вам позже.
Удалите файл, набрав:
sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
Этим вы подтвердили, что все компоненты стека LEMP установлены и правильно настроены на вашем сервере.
Заключение
Теперь у вас есть полностью сконфигурированный стек LEMP на вашем сервере CentOS 7. Это дает вам очень гибкую основу для предоставления веб-контента вашим посетителям.
SCL также используются для установки различных версий программного обеспечения и переключения между ними. Вы можете увидеть список всех установленных коллекций в системе, запустив:
scl --list
Если интересно, вы можете найти дополнительную информацию о коллекциях программного обеспечения наofficial site.