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 или другие методы.