LEMP — это стек программного обеспечения, используемый для разработки и развёртывания веб-приложений. Он обеспечивает высокую производительность и способен обрабатывать множество одновременных соединений благодаря использованию Nginx. LEMP широко используется для создания как статических, так и динамических сайтов, обеспечивая гибкость в выборе языков программирования и инструментов.
LEMP является альтернативой стека LAMP и включает в себя следующие компоненты:
- Linux — операционная система, на которой будет работать стек;
- Nginx — веб-сервер, который обрабатывает HTTP-запросы и отвечает на них;
- MariaDB или MySQL — системы управления базами данных (СУБД), используемые для хранения данных веб-приложений;
- PHP (или другие языки программирования, такие как Python или Ruby) — язык программирования, который обрабатывает динамический контент веб-приложений.
Как установить LEMP на CentOS Stream 9
В статье разберём, как установить LEMP на виртуальный выделенный сервер, работающий под управлением CentOS Stream 9, и разместить на нём сайт. В нашем примере стек LEMP будет состоять из Linux, Nginx, MariaDB и PHP.
Установка Nginx
Перед установкой нового программного обеспечения рекомендуется обновить список установленных пакетов до их последних доступных версий в репозиториях:
$ sudo dnf updateПосле чего установите веб-сервер Nginx:
$ sudo dnf install nginxКогда установка закончится, запустите веб-сервер:
$ sudo systemctl start nginxЗатем установите службу Nginx в автозагрузку, чтобы веб-сервер автоматически стартовал при загрузке системы:
$ sudo systemctl enable nginxСостояние Nginx можно проверить при помощи следующей команды:
$ systemctl status nginxВывод данной команды, как правило, выглядит примерно так, как на скриншоте ниже:

Чтобы получить доступ к сайту, размещённому на сервере, необходимо добавить в брандмауэр разрешающее правило для протокола HTTP. Список всех настроек и правил брандмауэра можно отобразить, выполнив команду:
$ sudo firewall-cmd --permanent --list-allПо умолчанию протокол HTTP отсутствует в списке разрешённых сервисов. Чтобы добавить его туда, запустите следующую команду:
$ sudo firewall-cmd --permanent --add-service=httpДля применения изменений, внесённых в настройки брандмауэра, перезагрузите его конфигурацию:
$ sudo firewall-cmd --reloadПосле этого вы сможете проверить работоспособность установленного веб-сервера, набрав в навигационной строке браузера адрес вида http://X.X.X.X, где замените X.X.X.X на IP-адрес виртуального сервера. Поскольку никакой сайт на сервере пока не размещён, браузер должен отобразить тестовую страницу веб-сервера.

Установка MariaDB
Следующий шаг — установка и первоначальная настройка СУБД. Чтобы установить MariaDB, выполните команду:
$ sudo dnf install mariadb-server mariadbПосле того, как установка завершится, запустите MariaDB:
$ sudo systemctl start mariadbЗатем установите MariaDB в автозагрузку:
$ sudo systemctl enable mariadbПроверить состояние службы СУБД можно при помощи команды:
$ systemctl status mariadb
Также, проверить корректность установки можно с помощью команды, которая должна вывести версию MariaDB:
$ mysql -V
Далее следует повысить уровень безопасности установки MariaDB. Следующая команда запускает пошаговый скрипт, который помогает настроить безопасные параметры СУБД. Во-первых, если не был задан пароль для административного пользователя СУБД, которым является root, скрипт предложит его установить. Если пароль уже существует, вы сможете изменить его. Во-вторых, скрипт предложит удалить анонимных пользователей, поскольку это представляет риск безопасности. Далее скрипт предложит отключить возможность подключения к СУБД для пользователя root с удалённых хостов, а также удалить тестовую базу данных и перезагрузить таблицы привилегий, чтобы изменения сразу вступили в силу.
$ sudo mysql_secure_installationУстановка PHP
Следующий этап — установка последней версии PHP. Для этого в нашем примере мы используем репозиторий Remi. Сначала установите пакет EPEL — репозиторий, содержащий дополнительные пакеты, которые не входят в стандартные репозитории Red Hat.
$ sudo dnf install epel-releaseЗатем установите пакет репозитория Remi:
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpmДля управления версиями PHP с использованием репозитория Remi установите утилиту dnf-utils:
$ sudo dnf install dnf-utilsНа момент написания статьи актуальной версией PHP является версия 8.3. Для её установки сначала сбросьте текущие настройки модуля PHP:
$ sudo dnf module reset phpПосле сброса активируйте нужную версию. В нашем случае — это PHP 8.3:
$ sudo dnf module enable php:remi-8.3Затем установите непосредственно PHP:
$ sudo dnf install php php-fpm php-mysqlndПоскольку PHP работает через PHP-FPM, следующей командой запустите службу PHP-FPM:
$ sudo systemctl start php-fpmЗатем установите её в автозапуск:
$ sudo systemctl enable php-fpmСостояние службы можно посмотреть с помощью команды:
$ systemctl status php-fpm
Следующей командой можно вывести на экран версию PHP:
$ php -v
Тестирование работы PHP
Чтобы протестировать работу PHP, перейдите к директории /usr/share/nginx/html/:
$ cd /usr/share/nginx/htmlИ там создайте файл info.php:
$ sudo touch info.phpПосле чего откройте созданный файл при помощи текстового редактора vi:
$ sudo vi info.phpИ внесите в него следующий текст:
<?php
phpinfo();
?>Затем закройте файл, сохранив внесённые в него изменения, после чего проверьте конфигурацию Nginx на наличие ошибок:
$ sudo nginx -tЕсли ошибок нет, вывод команды будет выглядеть следующим образом:

После чего перезапустите Nginx:
$ sudo systemctl restart nginxЗатем откройте браузер и перейдите по адресу http://X.X.X.X/info.php, где замените X.X.X.X на IP-адрес своего сервера. В результате браузер должен отобразить тестовую страницу PHP.

После тестирования рекомендуется удалить файл info.php по соображениям безопасности:
$ cd /usr/share/nginx/html
$ sudo rm info.phpЗапуск сайта
Чтобы разместить на сервере страницу сайта, перейдите в каталог /etc/nginx/conf.d/:
$ cd /etc/nginx/conf.dГде создайте новый конфигурационный файл Nginx. В данном случае замените your-domain.host на доменное имя своего сайта:
$ sudo touch your-domain.host.confОткройте созданный файл для редактирования:
$ sudo vi your-domain.host.confПосле чего добавьте в файл следующий блок, где также замените your-domain.host на доменное имя сайта:
server {
    listen 80;
    server_name your-domain.host www.your-domain.host;
    root /var/www/your-domain.host;
    index index.php index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    location ~ /\.ht {
        deny all;
    }
}Сохраните внесённые в файл изменения, закройте его и перейдите в директорию /var/www/:
$ cd /var/wwwВ данной директории создайте каталог с именем, соответствующим доменному имени размещаемого сайта:
$ sudo mkdir -p your-domain.hostУстановите права доступа на созданный каталог:
$ sudo chown -R nginx:nginx your-domain.host
$ sudo chmod -R 755 your-domain.hostЗатем перейдите в данный каталог:
$ cd /var/www/your-domain.hostИ там создайте файл стартовой страницы сайта:
$ sudo touch index.phpОткройте файл index.php для редактирования:
$ sudo vi index.phpВ нашем примере стартовая страница будет сформирована при помощи следующего кода:
<p>Ваш сайт - your-domain.host</p>
<p>Сайт <b>your-domain.host</b> размещён на CentOS Stream 9</p>После чего закройте файл, сохранив изменения, и проверьте синтаксис Nginx:
$ sudo nginx -tПерезапустите службу Nginx, если предыдущая команда не выявила никаких ошибок:
$ sudo systemctl restart nginxВ итоге вы уже сможете открыть страницу сайта, перейдя по адресу http://your-domain.host, где замените your-domain.host на имя своего сайта.
Установка SSL-сертификата (опционально)
Чтобы обеспечить безопасность сайта, рекомендуется настроить для него SSL-сертификат. Для получения бесплатного сертификата можно использовать Let’s Encrypt. Для этого установите пакет Certbot, который позволяет автоматизировать получение SSL-сертификата, и плагин python3-certbot-nginx:
$ sudo dnf install certbot python3-certbot-nginxВыполните следующую команду для получения сертификата для вашего домена, где замените your-domain.host на доменное имя своего сайта. Во время выполнения Certbot попросит вас выбрать вариант перенаправления HTTP на HTTPS. Рекомендуется выбрать вариант с автоматическим перенаправлением.
$ sudo certbot --nginx -d your-domain.host -d www.your-domain.hostСертификаты Let’s Encrypt действительны 90 дней, но их можно автоматически обновлять с помощью cron:
$ sudo crontab -eДля автоматического обновления вставьте следующую строку:
0 0 * * * /usr/bin/certbot renew --quietПосле чего добавьте в брандмауэр разрешающее правило для протокола HTTPS:
$ sudo firewall-cmd --permanent --add-service=httpsЗатем перезапустите конфигурацию брандмауэра:
$ sudo firewall-cmd --reloadНа данном этапе вы уже сможете протестировать доступность страницы сайта при помощи подключения с использованием протокола HTTPS.

Теперь, когда мы разобрали, как установить LEMP на CentOS Stream 9, вы можете загрузить файлы вашего сайта в директорию, соответствующую каталогу /var/www/your-domain.host в нашем примере. Для загрузки контента на сервер используйте SFTP, SCP или другие методы.
