Введение
В мире интернета несколько технологий объединяются в решение, которое позволяет интернет-пользователям получать доступ к динамическому контенту во всемирной паутине. Стек LEMP — одно из таких решений. Он объединяет четыре технологии, которые составляют полноценное серверное решение для высокопроизводительных и динамических веб-сайтов. LEMP — это аббревиатура от Linux, Nginx, MySQL и PHP. Linux — это операционная система сервера. Nginx (произносится как Engine-X, отсюда буква E в аббревиатуре) — это программное обеспечение веб-сервера. Далее, MySQL — это система баз данных, в которой хранятся данные веб-сайта и пользователей. PHP — это серверный язык сценариев для динамической обработки.
В этом руководстве мы расскажем вам, как установить и настроить стек LEMP, а также проверить, что все работает должным образом. Давайте начнем!
Шаг 1: Настройка сервера с Ubuntu 20.04
Ubuntu 20.04 — это операционная система на базе Linux. Существует несколько серверных операционных систем на базе Linux, включая бесплатные и премиум-версии. В центре внимания этого руководства находится Ubuntu 20.04, которая является бесплатной и имеет открытый исходный код. Этот шаг отвечает за первое требование в аббревиатуре стека LEMP — букву L. У вас должна быть установлена реальная Ubuntu 20.04 на вашем VPS, чтобы перейти к следующим шагам. Вы можете следовать нашему руководству по настройке сервера Ubuntu. При желании, если вы хотите следовать этому руководству на своем локальном компьютере, вы можете загрузить установочный образ сервера Ubuntu 20.04 непосредственно с Ubuntu веб-сайта. Вам следует настроить обычного пользователя без прав root, но с привилегиями sudo, так как мы будем запускать несколько команд, требующих прав sudo.
Шаг 2: Установка и настройка сервера Nginx
Веб-серверы позволяют нам предоставлять контент, например веб-страницы, посетителям веб-сайтов. Nginx — популярный веб-сервер, входящий в пятерку лучших веб-серверов с открытым исходным кодом, предпочитаемых разработчиками. Этот шаг отвечает за второе требование в стеке LEMP — E для Nginx. У Ubuntu есть репозиторий пакетов по умолчанию, откуда мы будем брать пакеты для использования в этом руководстве. Ubuntu основана на Debian, которая использует apt или dpkg для управления своими пакетами. Для пакетов из репозитория по умолчанию мы будем использовать apt.
Как правило, перед началом любой установки в системе Linux следует запустить команду обновления. Начните с ввода следующей команды в терминале:
|
1 |
sudo apt update |
После обновления вы можете установить Nginx с помощью следующей команды:
|
1 |
sudo apt install nginx |
После завершения установки Nginx запускается автоматически. Следующим шагом является настройка брандмауэра для пропуска трафика. Ubuntu использует пакет ufw (Uncomplicated Firewall) для настройки брандмауэров. После установки Nginx регистрирует себя как службу в ufw. Ubuntu автоматически запускает службу брандмауэра при загрузке системы, но для уверенности введите следующую команду, чтобы включить ее:
|
1 |
sudo ufw enable |
Чтобы вывести список конфигураций приложений, которые разрешает ufw, введите следующую команду:
|
1 |
sudo ufw app list |
Ниже приведен скриншот, показывающий вывод команды выше:

Как вы можете видеть, Nginx уже зарегистрирован в ufw и имеет три профиля, как описано ниже:
- Nginx Full – открывает порты 80 и 443. Порт 80 предназначен для обычного/незашифрованного трафика, т.е. HTTP. Порт 443 предназначен для трафика, зашифрованного с помощью TLS/SSL, т.е. https.
- Nginx HTTP – открывает только порт 80 – незашифрованный трафик.
- Nginx HTTPS – открывает только порт 443 – трафик, зашифрованный с помощью TLS/SSL.
Хотя Nginx автоматически регистрируется в ufw, трафик на ваш сервер не будет разрешен, пока вы сами этого не сделаете. Вы можете разрешить все или любой из профилей, однако лучше разрешить наиболее строгий профиль, который при этом будет пропускать трафик, настроенный для вашего веб-сервера. Поскольку в этом руководстве мы не настраивали SSL, мы разрешим только HTTP-трафик через порт 80. Если вам интересно, у нас есть руководство по настройке SSL на сервере Nginx от Let’s Encrypt с использованием Certbot.
Давайте разрешим трафик на порту 80, введя следующую команду:
|
1 |
sudo ufw allow 'Nginx HTTP' |
Чтобы убедиться, что изменения вступили в силу, введите следующую команду:
|
1 |
sudo ufw status |

Вывод команды выше показывает, что HTTP-трафик теперь разрешен. Вы можете проверить, работает ли сервер, перейдя по вашему домену или публичному IP-адресу сервера в браузере. Если вы не настроили доменное имя и не уверены в публичном IP-адресе своего сервера, вы можете найти его с помощью curl, выполнив следующую команду:
|
1 |
curl -4 icanhazip.com |
Скопируйте вывод вышеуказанной команды, который является вашим публичным IP-адресом, в адресную строку вашего браузера. При загрузке страницы вы увидите стандартную целевую страницу Nginx:

Страница выше указывает на то, что вы успешно установили Nginx.
Шаг 3. Установка системы управления базами данных MySQL
Управление данными — важнейшая часть любого динамического веб-сайта. MySQL — это система управления базами данных, которая хранит данные веб-сайта и управляет ими. Этот шаг отвечает за третье требование в стеке LEMP — M. Введите следующую команду для установки MySQL:
|
1 |
sudo apt install mysql-server |
После завершения установки MySQL вам необходимо настроить ее перед использованием. Часть настройки включает в себя обеспечение безопасности сервера баз данных. MySQL поставляется со скриптом, который поможет вам защитить систему и настроить пароли. Следующая команда запускает этот скрипт:
|
1 |
sudo mysql_secure_installation |

Скрипт спросит, хотите ли вы настроить компонент VALIDATE PASSWORD, или вы можете нажать любую клавишу, чтобы продолжить без включения этого компонента.
Компонент VALIDATE PASSWORD — это функция, которая используется для проверки соответствия пароля, введенного вами для конкретного пользователя на сервере баз данных, определенным критериям. Вы можете настроить его для проверки таких параметров, как длина, наличие цифр, заглавных или строчных букв и т. д. Если он не включен, вы можете настроить любой пароль по вашему выбору. Однако, если он включен, вы должны использовать пароль, соответствующий указанным критериям. Его включение может вызвать проблемы с пакетами, которые автоматически настраивают учетные данные пользователей MySQL, например, с пакетом phpMyAdmin для Ubuntu. Включать его или нет — это личный выбор. Ваша база данных все равно будет в безопасности, если вы его не включите, просто убедитесь, что вы используете сложные и уникальные пароли.
Если вы нажали Y для включения компонента, скрипт предложит вам выбрать уровень проверки пароля:

Скрипт предлагает 3 уровня проверки пароля. Уровень LOW требует, чтобы ваш пароль содержал не менее 8 символов. Уровень MEDIUM требует, чтобы ваш пароль содержал не менее 8 символов, которые должны представлять собой смесь заглавных и строчных букв, а также специальных символов. Уровень STRONG требует сложного пароля из 8 или более символов, который должен состоять из заглавных и строчных букв, специальных символов и слов, и не должен основываться на обычных словарных словах, иначе вы получите ошибки. Давайте выберем уровень Low, введите 0 и нажмите Enter.
Скрипт предложит вам ввести и повторно ввести пароль:

Введите y и нажмите Enter, чтобы принять введенный пароль в качестве пароля root. Последующие запросы предназначены для повышения безопасности сервера MySQL. Начните с удаления анонимных пользователей по умолчанию, которые присутствуют в каждой установке MySQL, отключения удаленного входа для root и удаления тестовых баз данных. Последний запрос предложит вам перезагрузить таблицу привилегий, чтобы изменения вступили в силу. Введите y и нажмите Enter для всех запросов:

Первоначальная настройка безопасности завершена.
Вы можете проверить версию установленной MySQL, выполнив команду:
|
1 |
sudo mysql –V |
Вот версия, которую мы используем в этом руководстве:
![]()
В системах Ubuntu, работающих под управлением MySQL версии 5.7 и выше, для пользователя root настроена аутентификация с помощью плагина auth_socket, а не по паролю. Это обеспечивает большую безопасность, однако может вызвать проблемы с внешними пакетами, такими как phpMyAdmin. Если вы предпочитаете продолжить использование плагина auth_socket, перейдите к шагу 4.
Если вместо этого вы хотите подключаться с помощью пароля, вам необходимо настроить метод аутентификации для использования mysql_native_password.
Запустите командную строку MySQL, введя следующую команду:
|
1 |
sudo mysql |
MySQL поставляется с несколькими базами данных по умолчанию. Вы можете просмотреть список баз данных по умолчанию, введя следующий запрос в терминале:
|
1 |
show databases; |

База данных с именем mysql хранит несколько конфигураций, связанных с MySQL. В этой базе данных есть таблица users, которая содержит сведения о пользователях и метод аутентификации для каждого из них. Мы можем использовать SQL-запросы для извлечения, изменения и удаления информации из таблицы. Введите следующий запрос в терминале, чтобы получить подробные сведения о том, какой метод аутентификации использует каждый пользователь:
|
1 |
SELECT user, authentication_string, plugin, host FROM mysql.user; |

Приведенный выше вывод показывает, что пользователь root на самом деле аутентифицируется с помощью плагина auth_socket. Чтобы изменить метод аутентификации для пользователя root, введите следующую команду в терминале. Не забудьте изменить пароль в соответствии со средним уровнем сложности, который мы установили на предыдущем шаге, иначе это приведет к ошибке:
|
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword'; |
После успешного выполнения запроса запустите команду сброса привилегий, чтобы изменения вступили в силу немедленно:
|
1 |
FLUSH PRIVILEGES; |
Снова запустите оператор select ниже, чтобы проверить, вступили ли изменения в силу:
|
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |

Из вывода видно, что пользователь root теперь будет аутентифицироваться с помощью mysql_native_password. Вы можете выйти из командной строки mysql, введя exit и нажав Enter.
Вы можете попробовать войти с установленным вами паролем, введя следующую команду:
|
1 |
mysql -u root –p |
Система запросит ваш пароль. Если он совпадет, вы увидите командную строку MySQL. Вы успешно настроили свой сервер с MySQL. Затем выйдите из командной строки MySQL.
Шаг 4. Установка PHP и настройка Nginx для использования обработчика PHP
PHP — это аббревиатура от PHP: Hypertext Preprocessor (препроцессор гипертекста). Это широко используемый язык серверных сценариев с открытым исходным кодом для веб-сайтов и веб-приложений. PHP отвечает за четвертое требование в стеке LEMP. PHP помогает генерировать динамический контент на веб-сайте. Его можно использовать в качестве посредника между вашими веб-страницами и системой баз данных. Он считывает данные из базы данных и представляет их посетителям вашего веб-сайта. Кроме того, он может вставлять, обновлять и удалять данные из базы данных.
В Nginx отсутствуют встроенные плагины для обработки PHP, как в других веб-серверах, поэтому вам необходимо установить php-fpm для передачи запросов от Nginx к PHP для обработки. Сначала добавьте репозиторий Ubuntu universe, который содержит бесплатное программное обеспечение с открытым исходным кодом, поддерживаемое сообществом Ubuntu. Введите следующую команду в терминале:
|
1 |
sudo add-apt-repository universe |
Затем установите пакет php-fpm вместе со вспомогательным пакетом php-mysql, чтобы включить взаимодействие PHP с MySQL, используя следующую команду:
|
1 |
sudo apt install php-fpm php-mysql |
На момент написания этого руководства версия PHP, установленная с помощью вышеуказанной команды, — 7.2.24. Следовательно, устанавливается пакет php-fpm7.2. Имейте это в виду при обновлении серверных блоков и убедитесь, что вы ввели правильную версию, иначе ваша страница не загрузится.
Вы можете проверить версию PHP, введя следующую команду:
|
1 |
php -v |

На данном этапе все компоненты стека LEMP уже установлены. Следующее, что вам нужно сделать, это настроить Nginx для направления запросов к обработчику PHP. В Nginx настройка выполняется внутри серверных блоков. Серверные блоки эквивалентны виртуальным хостам Apache. Для получения дополнительной информации вы можете ознакомиться с нашим руководством по серверным блокам Nginx.
В этом руководстве мы создадим серверный блок для домена test.com с тем же именем, но вы можете выбрать любое имя по своему усмотрению. Серверные блоки находятся в каталоге /etc/nginx/sites-available/. Используйте nano для создания файла серверного блока, введя следующую команду:
|
1 |
sudo nano /etc/nginx/sites-available/test.com |
Введите следующий скрипт в файл:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name test.com; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } } |
Вот краткое описание того, что делает каждая директива:
- listen – определяет порт, который будет прослушивать Nginx. Порт 80 является портом по умолчанию, однако, если бы вы настроили SSL, вы бы указали 443.
- root – содержит каталог, в котором будут храниться файлы сайта.
- index – указывает Nginx отдавать приоритет файлам index.php, если они доступны по запросу.
- server_name – определяет имя серверного блока, оно содержит публичный IP-адрес или доменное имя вашего сервера.
- location/ – первый блок location содержит директиву try_files. Она проверяет существование файлов, соответствующих URI-запросу, и если они не найдены, возвращается ошибка 404.
- location ~ \.php$ – эта директива обрабатывает PHP, направляя запросы Nginx через файл fastcgi-php.conf и файл php7.2-fpm.sock, который определяет, какой сокет связать с php-fpm. Эта команда проверяет статус php-fpm, мы указываем версию 7.2, которая установлена у нас. Обязательно проверьте версию, которая установлена у вас:
|
1 |
sudo service php7.2-fpm status |
- location ~ /\.ht – эта директива обрабатывает файлы .htaccess, которые не обрабатываются Nginx. Директива deny all гарантирует, что файлы htaccess не будут отдаваться посетителям.
После добавления скрипта в файл test.com нажмите Ctrl + O, затем нажмите Enter, чтобы сохранить файл. Нажмите Ctrl + X, чтобы закрыть редактор.
Затем необходимо включить серверный блок, введя следующую команду для создания символической ссылки в /etc/nginx/sites-enabled:
|
1 |
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ |
Затем удалите символическую ссылку на блок сервера по умолчанию из каталога sites-enabled, выполнив следующую команду:
|
1 |
sudo unlink /etc/nginx/sites-enabled/default |
Протестируйте новую конфигурацию, выполнив следующую команду:
|
1 |
sudo nginx -t |
Если синтаксис в порядке, перезапустите Nginx с помощью следующей команды:
|
1 |
sudo systemctl reload nginx |
На этом этапе ваш стек LEMP установлен и настроен. На следующем шаге мы создадим тестовый файл, чтобы убедиться, что различные компоненты успешно взаимодействуют друг с другом.
Шаг 5. Создание PHP-файла для тестирования стека LEMP
На этом шаге мы создадим файл .php и запустим его на сервере Nginx, чтобы проверить его работоспособность. Мы будем использовать глобальную функцию phpinfo() для проверки доступных пакетов php. Введите следующую команду, чтобы открыть файл .php в nano:
|
1 |
sudo nano /var/www/html/test.php |
В редакторе nano введите следующий фрагмент кода:
|
1 |
<?php phpinfo(); |
Сохраните и закройте файл. Чтобы открыть только что созданную страницу в браузере, найдите свой домен или IP-адрес и перейдите по нему следующим образом:
|
1 |
http://your_server_domain_or_IP/test.php |
Вы должны увидеть страницу с информацией о PHP:

Вышеуказанная страница показывает, что вы успешно настроили Nginx. Поскольку созданный вами для тестирования файл содержит подробные сведения о вашем сервере, не забудьте удалить его. Введите следующую команду для удаления файла:
|
1 |
sudo rm /var/www/html/test.php |
Если в будущем вам понадобится протестировать конфигурацию, вы всегда сможете создать этот файл заново.
Заключение
В этом руководстве вы настроили стек LEMP на Ubuntu 20.04, который является одним из самых мощных доступных стеков для разработки веб-приложений. Теперь вы сможете разместить практически любой веб-сайт, веб-приложение или серверную логику для своего мобильного приложения. Чтобы ваш веб-сайт передавал контент по безопасному SSL-соединению, мы рекомендуем ознакомиться с нашим руководством по настройке SSL-сертификатов на сервере Nginx.
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.