В сфере разработки веб-приложений выбор подходящего программного стека может стать решающим фактором для успешного развертывания вашего приложения. Стек LEMP, аббревиатура которого образована от четырех компонентов с открытым исходным кодом - Linux, NGINX, MariaDB и PHP, является мощным, гибким и масштабируемым решением для управления веб-серверами.
LAMP
В отличие от своего аналога LAMP (который использует Apache), стек LEMP использует NGINX для своей серверной функциональности. NGINX выделяется своей уникальной архитектурой, способной обрабатывать большое количество одновременных соединений. Это делает его эффективным выбором для сайтов с высокой посещаемостью, где требуется надежная обработка множества одновременных запросов.
NGINX предлагает мощный набор функций, включая балансировку нагрузки, обратный прокси, почтовый прокси и HTTP-кэш.
Его событийно-ориентированная архитектура позволяет более эффективно использовать процессор и память, особенно при высоких нагрузках.
Он предлагает прямую поддержку протоколов SSL/TLS, способствуя созданию безопасной веб-среды.
В качестве системы управления базами данных в стеке LEMP используется MariaDB. Эта реляционная система баз данных с открытым исходным кодом, разработанная авторами MySQL, обеспечивает высокую производительность, надежность и простоту использования.
MariaDB предлагает более широкий набор функций и механизмов хранения данных, чем MySQL.
Она обеспечивает превосходную репликацию с различными режимами и повышенной производительностью.
Ее приверженность философии открытого исходного кода и обратная совместимость с MySQL делает ее предпочтительным выбором среди многих разработчиков.
В сердце стека LEMP находится PHP-FPM (FastCGI Process Manager). Это продвинутая, высокоэффективная альтернативная реализация PHP FastCGI со значительными улучшениями по сравнению с mod_php, прежде всего, в способности обрабатывать высокие нагрузки.
PHP-FPM поддерживает пулы (рабочие, которые могут отвечать на запросы PHP) для выполнения этой задачи.
Он предоставляет различные функции управления, такие как адаптивное порождение процессов и возможность запуска рабочих с различными способностями.
Аспект FastCGI позволяет NGINX обрабатывать файлы PHP и обслуживать динамический контент, что значительно ускоряет работу PHP.
Развертывание стека LEMP - это не просто достижение работающей конфигурации; это использование возможностей каждого отдельного компонента для создания высокопроизводительной, безопасной и масштабируемой серверной среды, которая соответствует специфическим требованиям вашего веб-приложения.
В следующем руководстве мы рассмотрим шаги по установке стека LEMP на Debian 12 Bookworm, Debian 11 Bullseye или Debian 10 Buster, вооружив вас знаниями и шагами для получения максимальной отдачи от вашей серверной среды.
Установка NGINX - первого компонента стека LEMP
Шаг 1: Обновление системы Debian
Основой для успешной установки стека LEMP является актуальная операционная система. Убедиться в том, что ваша система Debian обновлена, очень важно для предотвращения конфликтов пакетов и обеспечения бесперебойного выполнения последующих процессов. Эта практика приводит вашу систему в соответствие с последними исправлениями безопасности и улучшениями программного обеспечения. Выполните следующую команду для обновления системы:
1 | sudo apt update && sudo apt upgrade |
С помощью этой команды sudo apt update обновляет список доступных пакетов и их версии, а sudo apt upgrade устанавливает последние версии имеющихся пакетов.
Шаг 2: Установка NGINX
Краеугольным камнем стека LEMP является NGINX, который является нашей следующей целью установки. Выполнив следующую команду, будет установлен NGINX, высокопроизводительный HTTP-сервер и обратный прокси-сервер с открытым исходным кодом:
1 | sudo apt install nginx |
После завершения установки NGINX служба обычно запускается автоматически. Тем не менее, хорошей практикой является подтверждение этого и уверенность в том, что она работает так, как ожидается. Вы можете проверить состояние службы NGINX, выполнив следующую команду:
1 | systemctl status nginx |
На этом этапе вы должны увидеть вывод, указывающий на активный (запущенный) статус службы NGINX, подтверждающий успешную инициацию NGINX.
Однако если сервер по какой-либо причине не запустился, следующая команда может запустить его, а также настроить NGINX на автоматический запуск при перезагрузке системы:
1 | sudo systemctl enable nginx --now |
Эта команда гарантирует, что служба NGINX как включена для запуска при загрузке (enable), так и запущена немедленно (--now).
По желанию, вы можете посетить IP-адрес сервера, чтобы убедиться, что Nginx установлен.
Дальнейшее чтение
Для пользователей, заинтересованных в установке последней версии NGINX mainline или stable непосредственно из APT-репозитория NGINX, обратитесь к нашему подробному руководству: Установка NGINX Mainline на Debian Linux. Этот ресурс предлагает пошаговое руководство, вооружив вас информацией для дальнейшей оптимизации возможностей вашего сервера.
Включение MariaDB в стек LEMP
Процесс сборки стека LEMP продолжается установкой модуля базы данных. MariaDB имеет более высокую репутацию, чем MySQL в стеке LEMP, благодаря своей повышенной производительности и различным дополнительным атрибутам. Приведенные здесь пошаговые инструкции используют репозитории Debian для получения ресурсов MariaDB. Однако, если ваши требования направлены на использование версии, отличной от официальных библиотек MariaDB.org.
Шаг 1: Начало установки MariaDB
Инициация установки MariaDB включает в себя выполнение простой команды в терминале. Вот она:
1 | sudo apt install mariadb-server mariadb-client |
Шаг 2: Проверка службы MariaDB после установки
После установки MariaDB следующим важным шагом будет подтверждение статуса службы MariaDB. Подобно тому, как это было сделано для веб-сервера NGINX, очень важно убедиться, что служба MariaDB включена и работает правильно, без каких-либо неисправных компонентов. Команда для проверки состояния службы выглядит следующим образом:
1 | systemctl status mariadb |
В случае, если сервер не был активирован, вы можете выполнить следующую команду. Это обеспечит не только немедленный запуск MariaDB, но и автоматическую загрузку при каждой перезагрузке системы.
1 | sudo systemctl enable mariadb --now |
Шаг 3: Защита установки MariaDB
Основой надежной базы данных является ее безопасность, и MariaDB не является исключением. Поэтому после установки профессионалы отрасли рекомендуют выполнить сценарий безопасности, связанный с установкой. Этот сценарий укрепляет установку MariaDB, изменяя ее настройки по умолчанию, которые обычно считаются небезопасными, тем самым защищая систему от потенциальных эксплойтов или несанкционированных вторжений.
Вы можете запустить сценарий безопасности MariaDB, а именно mysql_secure_installation, выполнив следующую команду:
1 | sudo mysql_secure_installation |
После выполнения сценария безопасности последующий шаг включает в себя настройку различных параметров. Эти изменения включают в себя настройку пароля root, ограничение удаленного доступа, удаление анонимных учетных записей пользователей и удаление тестовой базы данных. Каждая настройка добавляет уровень безопасности к вашей установке MariaDB и помогает предотвратить потенциальные угрозы безопасности.
Обеспечение безопасности установки MariaDB: Подробное описание
Определение отправной точки
Когда вы начинаете повышать безопасность вашей MariaDB, нередко поначалу вы чувствуете себя подавленным. Однако скрипт mysql_secure_installation - ваш неизменный союзник в этом деле, который методично проведет вас через лабиринт конфигураций. Давайте разберем каждый шаг этого процесса, чтобы получить полное представление об этом путешествии.
В самом начале сценарий требует ввести текущий пароль root. В случае совершенно новой установки MariaDB вам не нужно беспокоиться; достаточно простого нажатия клавиши Enter, чтобы продолжить процесс настройки.
Активация аутентификации Unix_Socket
Двигаясь дальше, вы столкнетесь с точкой принятия решения. Сценарий предлагает включить аутентификацию unix_socket. Набрав 'Y' и нажав клавишу ENTER, вы выражаете свое согласие с этим предложением, возводя непроницаемый брандмауэр. Этот брандмауэр стоит непоколебимо, гарантируя, что ни один субъект не сможет получить доступ к домену корневого пользователя MariaDB без необходимых разрешений.
Укрепление защиты: Смена пароля корневого пользователя
По мере продолжения процесса вам представится возможность укрепить свою защиту, изменив пароль корневого пользователя. Если вы решите усилить защиту, подтвердите свой выбор, набрав 'Y' и нажав клавишу ENTER. Более надежный пароль означает усиление защиты от потенциальных злоумышленников.
Искоренение фантомных пользователей
Продвигаясь дальше, сценарий задает вопрос об устранении анонимных пользователей. Эти призрачные сущности, если оставить их без внимания, могут потенциально внести уязвимости в вашу производственную среду. Набрав 'Y' и нажав клавишу ENTER, вы решите изгнать этих фантомов, тем самым повысив безопасность вашей установки.
Запрет удаленного входа с root
Далее вам предлагается запретить удаленный вход в систему root. Эта мера, способствующая повышению безопасности, предотвращает попытки внешних субъектов угадать пароль root по сети. Введите 'Y', а затем клавишу ENTER, чтобы применить эту меру предосторожности.
Очистка тестовой базы данных
По мере приближения к концу пути сценарий предлагает вам удалить тестовую базу данных, доступную всем. Эта база данных, если не принять меры, может стать лазейкой безопасности в производственной среде. Набрав "Y" и нажав клавишу ENTER, вы выбираете следующее
Установка PHP и PHP-FPM - неотъемлемая часть стека LEMP
Последним компонентом стека LEMP является служба PHP, выступающая в качестве моста между Nginx и MariaDB. Это соединение осуществляется службой PHP-FPM в сочетании с дополнительными модулями, необходимыми для phpMyAdmin. Если вы предпочитаете установить другую версию PHP, вы можете следовать нашему руководству по установке PHP в Debian Linux, в котором описана установка конкретной версии PHP в соответствии с вашими потребностями.
Шаг 1: Установка PHP и PHP-FPM
Чтобы установить PHP, PHP-FPM и необходимые модули на систему Debian, выполните следующую команду в терминале:
1 | sudo apt install php-fpm php php-cli php-mysql php-curl |
Шаг 2: Проверка состояния службы PHP
После установки очень важно подтвердить статус службы PHP. Эта проверка аналогична той, что вы делали для MariaDB: убедитесь, что PHP включен и работает безупречно и без ошибок. Команда зависит от версии установленного PHP; в нашем случае это был PHP 8.2.
1 | systemctl status php8.2-fpm |
Шаг 3: Активация службы PHP
Если служба PHP еще не активирована, выполните следующую команду, чтобы включить ее и обеспечить автоматический запуск при каждой перезагрузке системы.
1 | sudo systemctl enable php-fpm --now |
Эта команда активирует службу PHP-FPM и обеспечит ее автоматический запуск при каждой загрузке системы.
Интеграция PHP-FPM с серверным блоком Nginx
Чтобы Nginx мог эффективно взаимодействовать с PHP, необходимо изменить конфигурационный файл серверного блока Nginx. Эти изменения подскажут Nginx, как взаимодействовать с PHP-FPM, обеспечивая эффективную обработку файлов PHP.
Шаг 1: Модификация серверного блока Nginx
Найдите файл блока сервера Nginx и добавьте в него следующие строки:
1 2 3 4 5 6 7 8 9 | location ~ \.php$ { fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; fastcgi_buffer_size 128k; fastcgi_buffers 4 128k; fastcgi_intercept_errors on; } |
Приведенная выше конфигурация позволяет Nginx передавать PHP-запросы службе PHP-FPM. Строка fastcgi_pass указывает на сокет Unix, используемый службой PHP-FPM.
Шаг 2: Проверка конфигурации Nginx
После модификации необходимо проверить изменения, чтобы убедиться в отсутствии синтаксических ошибок. Следующая команда проверяет конфигурацию Nginx:
1 | sudo nginx -t |
Эта команда проверяет всю конфигурацию Nginx на наличие синтаксических ошибок. Если ошибки обнаружены, она выводит их, позволяя вам немедленно исправить их.
Шаг 3: Перезапуск службы Nginx
После успешной проверки следующим шагом будет перезапуск службы Nginx. Этот шаг гарантирует, что все изменения, внесенные в конфигурационный файл, вступят в силу:
1 | sudo systemctl restart nginx |
Эта команда перезагрузит службу Nginx, и вместе с ней новый интегрированный PHP-FPM начнет взаимодействовать с Nginx.
Создание тестовой посадочной страницы
Подготовка к тестированию
Чтобы убедиться в правильности настроек конфигурации Nginx и PHP-FPM, рекомендуется создать образец тестового сайта. Следующие инструкции помогут вам создать простой файл index.html для целей тестирования.
Создание веб-каталога
Если вы еще не сделали этого, вам необходимо создать веб-каталог. В этом каталоге будут храниться файлы вашего сайта. Давайте создадим каталог с именем example.com в каталоге /var/www/html/:
1 | sudo mkdir -p /var/www/html/example.com/ |
Настройка разрешений
Теперь вам нужно изменить права доступа к каталогу. Переменная $USER может быть использована для установки права собственности на каталог для текущего пользователя, вошедшего в систему:
1 | sudo chown -R $USER:$USER /var/www/html/example.com/ |
Чтобы обеспечить публичный доступ к веб-каталогу (позволяющий пользователям посещать ваш сайт), установите разрешения с помощью chmod 755:
1 | sudo chmod -R 755 /var/www |
Создание тестового HTML-файла
Далее создайте базовый файл index.html:
1 | sudo nano /var/www/html/example.com/index.html |
Вставьте в файл следующее содержимое. Эта базовая структура HTML предназначена исключительно для тестирования.
1 2 3 4 5 6 7 8 | <html> <head> <title>You have reached Example.com!</title> </head> <body> <h1>Congratulations! The server block is active!</h1> </body> </html> |
Сохраните файл с помощью CTRL+O, а затем выйдите с помощью CTRL+X.
Активация серверного блока Nginx
Когда вы приближаетесь к завершению, пришло время активировать файл конфигурации серверного блока. Вам нужно создать символическую ссылку (symlink) для файла конфигурации серверного блока из каталога sites-available в каталог sites-enabled с помощью следующей команды:
1 | sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf |
Проверка блока сервера Nginx
Перед перезапуском или перезагрузкой службы Nginx очень важно проверить файл конфигурации серверного блока, особенно в живой среде. Выполните следующую команду, чтобы проверить файл конфигурации серверного блока:
1 | sudo nginx -t |
Если все в порядке, вы должны увидеть следующие сообщения, указывающие на успешную проверку синтаксиса и конфигурации:
1 2 | nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
Наконец, откройте веб-браузер и введите адрес вашего домена (в данном случае example.com), чтобы проверить, доступен ли ваш сервер.
Повышение безопасности LEMP с помощью SSL-сертификата Let’s Encrypt
Одним из важнейших шагов по укреплению безопасности вашего сервера и созданию доверия у пользователей является установка SSL-сертификата для вашего сайта. Это позволит запустить ваш сервер Nginx по протоколу HTTPS, обеспечивая зашифрованный канал между вашим сервером и пользователями.
Для этого мы будем использовать Let's Encrypt, инициативу некоммерческой организации Internet Security Research Group (ISRG), которая предоставляет бесплатные автоматические SSL-сертификаты.
Установка Certbot
Чтобы начать настройку SSL-сертификата, необходимо установить пакет certbot. Эта утилита упрощает получение и развертывание SSL-сертификатов от Let's Encrypt. Используйте следующую команду для установки certbot:
1 | sudo apt install python3-certbot-nginx -y |
Генерация и развертывание SSL-сертификата
После успешной установки certbot вы можете приступить к созданию SSL-сертификата. Выполните следующую команду, чтобы сгенерировать и применить SSL-сертификат к вашему серверу Nginx:
1 | sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d www.example.com |
Эта команда включает в себя несколько функций и параметров:
- --nginx: Указывает, что certbot должен автоматически настроить Nginx для SSL.
- --agree-tos: Этот параметр указывает на ваше согласие с условиями обслуживания Let's Encrypt.
- --redirect: Указывает certbot установить 301 редирект с HTTP на HTTPS.
- --hsts: Включает заголовок HTTP Strict Transport Security (HSTS), который предписывает браузерам всегда использовать HTTPS.
- --staple-ocsp: Этот флаг включает OCSP Stapling, метод, с помощью которого сервер периодически запрашивает серверы эмитента сертификата для получения подписанной, отмеченной временем записи о статусе сертификата.
Пожалуйста, не забудьте заменить [email protected] и www.example.com на ваш адрес электронной почты и доменное имя соответственно.
С этими настройками ваш сайт теперь доступен через https://www.example.com вместо небезопасного http://www.example.com. Любые попытки получить доступ к вашему сайту по протоколу HTTP будут автоматически перенаправляться на версию HTTPS, обеспечивая безопасность соединения в любое время.
Заключение
Установка стека LEMP на дистрибутив Debian Linux - это систематический и хорошо документированный процесс. На протяжении всех шагов нам удалось установить Nginx в качестве веб-сервера, MariaDB в качестве сервера баз данных и PHP для динамической обработки веб-контента. Кроме того, мы защитили наш серверный блок с помощью SSL-сертификата Let's Encrypt. Это формирует комплексную и безопасную среду для размещения различных веб-приложений.
Уделять время тщательному изучению каждого компонента в стеке LEMP очень важно. Это не только повысит ваши навыки системного администратора, но и позволит эффективно устранять неполадки при возникновении проблем. Помните, что модульность стека LEMP - это его сильная сторона. Каждый компонент может быть адаптирован и оптимизирован под конкретные нужды вашего проекта.