Автор выбрал Apache Software Foundation для получения пожертвования в размере $100 в рамках программы Write for DOnations.
Стек ПО LEMP — это группа программного обеспечения с открытым исходным кодом, которая обычно устанавливается вместе, чтобы на сервере могли размещаться динамические веб-сайты и веб-приложения. Этот термин представляет собой акроним, представляющий операционную систему Linux с веб-сервером ENginx (который заменяет Apache в стеке LAMP). Данные сайта хранятся в базе данных MySQL (используется MariaDB), а за динамическое содержание отвечает PHP.
Компоненты стека LEMP иногда устанавливаются с помощью репозитория EPEL CentOS 7. Однако этот репозиторий содержит устаревшие пакеты. Например, вы не можете установить версию PHP старше 5.4.16 из EPEL, хотя этот релиз не поддерживается уже длительное время. Для получения новых версий программного обеспечения рекомендуется использовать набор Software Collections, также известный как SCL. SCL — это коллекции ресурсов для разработчиков, предоставленные RedHat, которые позволяют использовать различные версии программного обеспечения в одной и той же системе без какого-либо влияния на ранее установленные пакеты.
В этом руководстве вы установите стек LEMP на сервер с CentOS 7. Операционная система CentOS отвечает за работу компонентов Linux. Вы установите остальные компоненты с помощью репозитория Software Collections, а затем настроите их для обслуживания простой веб-страницы.
Прежде чем приступить к выполнению данного обучающего руководства, у вас должен быть сервер CentOS 7, настроенный согласно руководству по начальной настройке сервера CentOS 7, а также пользователь sudo без прав root.
Для получения доступа к SCL для CentOS установите release-файл для Software Collections в 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 на компьютере с CentOS 7 без удаления или вмешательства в работу Python 2.7.
Все файлы конфигурации для пакетов SCL хранятся в соответствующей директории внутри директории /etc/opt/rh/
. Пакеты SCL содержат скрипты, которые определяют переменные среды, необходимые для использования приложений внутри пакета, например, PATH
, LD_LIBRARY_PATH
и MANPATH
. Эти скрипты хранятся в файловой системе в каталоге /opt/rh/package-name/enable
.
Теперь вы можете начать установку пакетов, описанных в этом руководстве.
Для показа веб-страниц посетителям мы будем использовать 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 см. в статье Настройка брандмауэра с помощью FirewallD в 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.
Теперь, когда у нас есть веб-сервер, пришло время установить 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 на своем сервере.
Теперь у вас есть Nginx для обслуживания ваших страниц и MariaDB для хранения и управления данными, однако у вас до сих пор не установлено ПО, которое может генерировать динамическое содержание. Именно для этого и нужен PHP.
Поскольку Nginx не поддерживает нативную обработку PHP, как некоторые другие веб-серверы, вам потребуется установить php-fpm
, т.е. «менеджер процессов fastCGI». Затем вы должны будете настроить Nginx, чтобы передавать PHP-запросы этому программному продукту.
Установите этот модуль, а также захватите пакет helper, который позволит 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»:
cgi.fix_pathinfo=0
Сохраните и `закройте файл после завершения редактирования (нажмите ESC, введите :wq, а затем нажмите ENTER).`````
Теперь откройте файл конфигурации php-fpm по адресу www.conf
:
- sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf
По умолчанию этот файл настроен для работы с сервером Apache. Поскольку на вашем сервере установлен Nginx, найдите строки, которые устанавливают user
и group
и измените их значения с «apache» на «nginx»:
user = nginx
group = nginx
Затем сохраните и закройте файл.
Теперь запустите процессор PHP с помощью следующей команды:
- sudo systemctl start rh-php71-php-fpm
Активируйте запуск php-fpm при загрузке:
- sudo systemctl enable rh-php71-php-fpm
Поздравляем, вы успешно установили PHP на свой сервер. Однако он должен быть настроен для работы с другим ПО, которое вы установили, чтобы позволить вашему серверу корректно обслуживать содержание вашего сайта.
На данный момент у вас есть все необходимые компоненты стека LEMP. Вам осталось внести последнее изменение конфигурацию, чтобы сообщить Nginx о необходимости использовать процессор PHP для динамического содержания.
Это изменение конфигурации выполняется уровне блока server (блоки сервера похожи на виртуальные хосты в 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 узнать местоположение документа root, где он сможет найти файлы для обработки.
После внесения необходимых изменений блок server
будет выглядеть следующим образом:
...
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 способна корректно предоставлять содержание для посетителей вашего сайта.
Ваш стек LEMP полностью настроен, и вы можете протестировать его, чтобы убедиться, что Nginx может корректно предоставлять файлы .php
вашему процессору PHP. Для этого мы создадим тестовый файл PHP в корневой директории документа.
Откройте новый файл с названием info.php
внутри корневой директории документа:
- sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
Добавьте в новый файл следующую строку. Это корректный код PHP, который будет возвращать информацию о вашем сервере:
<?php phpinfo(); ?>
После завершения редактирования сохраните и закройте файл. Затем откройте эту страницу в браузере, указав в адресной строке доменное имя вашего сервера или открытый 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
Дополнительную информацию о Software Collections вы можете найти на официальном сайте.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.