Данный мануал поможет вам установить стек LEMP (Nginx, MariaDB и PHP 8.1) на Ubuntu 22.04. Программный стек представляет собой набор инструментов, объединенных для выполнения определенных задач. LEMP расшифровывается как Linux, Nginx (Engine-X), MariaDB/MySQL и PHP, и все эти компоненты являются бесплатными и с открытым исходным кодом.
Это наиболее популярный программный стек, который обеспечивает функционирование динамических веб-сайтов и веб-приложений.
- Linux представляет собой операционную систему.
- Nginx представляет собой сервер для размещения веб-сайтов.
- MariaDB/MySQL представляет собой систему управления базами данных.
- PHP — это язык сценариев, работающий на сервере, который используется для генерации динамических веб-страниц.
Содержание статьи
- 1 Требования
- 2 Обновление пакетов программного обеспечения
- 3 Настройка веб-сервера Nginx
- 4 Инсталляция сервера базы данных MariaDB
- 5 Установка PHP версии 8.1
- 6 Настройка блока сервера Nginx
- 7 Проверьте работу PHP
- 8 Оптимизация работы PHP
- 9 Рекомендации по диагностике неисправностей
- 10 Автоматическое перезапускание Nginx
- 11 Автоматизированный старт MariaDB.
- 12 Далее предпримем следующие шаги.
Требования
Для выполнения данного руководства необходимо, чтобы на вашем локальном компьютере или удаленном сервере была установлена операционная система Ubuntu 22.04.
Если вы находитесь в поиске виртуального частного сервера (VPS), обратите внимание на Kamatera VPS, который предоставляет:
- Бесплатный пробный период на 30 дней.
- Цена начинается от 4 долларов в месяц за 1 ГБ оперативной памяти.
- VPS с высокой производительностью на платформе KVM.
- Девять дата-центров расположены в различных странах, таких как США, Канада, Великобритания, Германия, Нидерланды, Гонконг и Израиль.
Перейдите по ссылке ниже, чтобы ознакомиться с инструкцией по созданию вашего VPS на Linux на платформе Kamatera.
- Создание VPS на платформе Kamatera с операционной системой Linux.
Когда у вас появится VPS с установленной Ubuntu 22.04, выполните следующие шаги.
Если вы планируете настроить стек LEMP с доменным именем, рекомендую приобретать домены на NameCheap. Там доступные цены и бесплатная защита данных Whois на весь период регистрации.
Обновление пакетов программного обеспечения
Перед тем как приступить к установке LEMP стека, настоятельно рекомендуется обновить репозитории и пакеты программного обеспечения. Для этого выполните указанные команды в Ubuntu 22.04.
sudo apt update sudo apt upgrade - y
Настройка веб-сервера Nginx
Nginx — это мощный веб-сервер, который сегодня пользуется большой популярностью. Его также можно использовать в роли обратного прокси и сервера для кэширования. Чтобы установить веб-сервер Nginx, выполните следующую команду.
sudo apt install nginx
После завершения установки вы можете активировать автозапуск Nginx при старте системы, выполнив указанную команду.
sudo systemctl enable nginx
После этого запустите Nginx, используя следующую команду:
sudo systemctl start nginx
Теперь узнайте его текущее состояние.
sudo systemctl status nginx
●nginx.service - Веб-сервер с высокой производительностью и обратный прокси-сервер. Загружен: (/lib/systemd/system/nginx.service; включен; предустановка от поставщика: включена) Статус: активен:работает с энтузиазмом с Пт 2022-04-10 14:11:43 UTC; 3 секунды назад Документация: man:nginx(8) Процесс: 8533 ExecStartPre=/usr/sbin/nginx - t - q - g daemon on; master_process on; (код=выполнено, статус=0/УСПЕШНО) Процесс: 8545 ExecStart=/usr/sbin/nginx - g daemon on; master_process on; (код=выполнено, статус=0/УСПЕШНО) Основной PID: 8549 (nginx) Задачи: 3 (ограничение: 9451) Память: 3.9 МБ CGroup: /system. slice/nginx.service ├─8549 nginx: master process /usr/sbin/nginx - g daemon on; master_process on; ├─8550 nginx: рабочий процесс └─8551 nginx: рабочий процесс
«Включено» означает, что автозапуск при старте системы активирован, и мы можем убедиться, что Nginx функционирует. Также можно увидеть объем оперативной памяти, который использует Nginx, по результатам вывода. Если команда не завершилась мгновенно, необходимо нажать «q», чтобы выйти.
Убедитесь, какая версия Nginx у вас установлена.
nginx - v
nginx version: nginx/1.18.0 (Ubuntu)

Если соединение было отклонено или завершить его не удалось, причиной может быть блокировка входящих запросов на TCP порт 80 фаерволом. Если вы используете фаервол iptables, выполните следующую команду для открытия TCP порта 80.
sudo iptables - I INPUT - p tcp --dport 80 - j ACCEPT
Чтобы открыть TCP порт 80 при использовании UFW, выполните следующую команду.
sudo ufw allow http
В заключение, необходимо изменить владельца веб-директории на пользователя www-data (Nginx), так как по умолчанию её владельцем является пользователь root.
sudo chown www-data:www-data /usr/share/nginx/html - R
Инсталляция сервера базы данных MariaDB
MariaDB представляет собой альтернативу MySQL. Она была создана бывшими членами команды MySQL, которые выразили озабоченность по поводу того, что Oracle может сделать MySQL закрытым продуктом. Для установки MariaDB на Ubuntu 22.04 введите следующую команду.
sudo apt install mariadb-server mariadb-client
После установки сервер MariaDB должен запускаться автоматически. Для проверки его статуса воспользуйтесь командой systemctl.
systemctl status mariadb
●mariadb.service - сервер базы данных MariaDB версии 10.6.7 Загружен: загружен (/lib/systemd/system/mariadb.service; включен; настройка по умолчанию: включено) Статус:активный (в работе) since Fri 2022-04-10 14:19:16 UTC; 18s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 9161 (mysqld) Status: "Taking your SQL requests now. " Tasks: 31 (limit: 9451) Memory: 64.7M CGroup: /system. slice/mariadb.service └─9161 /usr/sbin/mysqld
Совет: Если команда, указанная выше, не завершится сразу, нажмите «q», чтобы выйти.
Если MariaDB не активирована, воспользуйтесь этой командой для её запуска:
sudo systemctl start mariadb
Для того чтобы MariaDB запускалась автоматически при старте системы, выполните следующие действия:
sudo systemctl enable mariadb
После завершения установки запустите скрипт безопасности.
sudo mysql_secure_installation
- Когда система запросит у вас ввод пароля root для MariaDB, просто нажмите клавишу Enter, поскольку пароль для root ещё не задан.
- Не переходите на аутентификацию с помощью unix_socket, так как MariaDB уже применяет этот метод аутентификации.
- Не меняйте пароль root, так как при использовании аутентификации через unix_socket установка пароля не требуется.

Теперь вы можете нажать клавишу Enter, чтобы ответить на все последующие вопросы, что приведет к удалению анонимного пользователя, отключению удаленного доступа с правами root и удалению тестовой базы данных. Этот процесс является ключевым условием для обеспечения безопасности базы данных MariaDB. (Имейте в виду, что буква Y написана с заглавной буквы, что указывает на то, что это стандартный ответ.)

По умолчанию в Ubuntu пакет MariaDB применяет unix_socket для аутентификации пользователей, что позволяет использовать учетные данные операционной системы для доступа к консоли MariaDB. Это означает, что вы можете войти, не вводя пароль для пользователя root MariaDB, выполнив соответствующую команду.
sudo mariadb - u root
exit;
Убедитесь, что у вас есть актуальная информация о версии сервера MariaDB.
mariadb --version
Мы успешно установили MariaDB версии 10.6.7.
mariadb Ver 15.1 Distrib 10.6.7-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Установка PHP версии 8.1
PHP8.1 доступен в репозитории Ubuntu 22.04 и демонстрирует небольшие улучшения производительности по сравнению с версией 8.0. Для установки PHP8.1 и ряда стандартных расширений выполните следующую команду.
sudo apt install php8.1 php8.1-fpm php8.1-mysql php-common php8.1-cli php8.1-common php8.1-opcache php8.1-readline php8.1-mbstring php8.1-xml php8.1-gd php8.1-curl
Расширения PHP часто требуются для систем управления контентом (CMS), таких как WordPress. К примеру, если в вашей установке отсутствует php8.1-xml, это может привести к тому, что некоторые страницы вашего сайта WordPress окажутся пустыми, и вы можете увидеть соответствующую ошибку в журнале ошибок Nginx, например:
PHP message: PHP Fatal error: Uncaught Error: Call to undefined function xml_parser_create()
Установка данных расширений PHP гарантирует стабильную работу вашей CMS. Теперь можно запустить php8.1-fpm.
sudo systemctl start php8.1-fpm
Активируйте автоматический запуск при старте системы.
sudo systemctl enable php8.1-fpm
systemctl status php8.1-fpm
● php8.1-fpm.service - Диспетчер процессов PHP 8.1 FastCGI Загружено: загружено (/lib/systemd/system/php8.1-fpm.service; включено ; поставщик pr> Активно: работает с энтузиазмом с пятн. 2022-04-10 14:40:26 UTC; 12 секунд назад Документы: man:php-fpm8.1(8) Процесс: 21019 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /ru> Главный PID: 21012 (php-fpm8.1) Статус: "Активные процессы: 0, простаивающие: 2, Запросы: 0, медленные: 0, Трафик: 0req> Задачи: 3 (лимит: 9451) Память: 9.4M CGroup: /system. slice/php8.1-fpm.service ├─21012 php-fpm: главный процесс (/etc/php/8.1/fpm/php-fpm.conf) ├─21017 php-fpm: пул www └─21018 php-fpm: пул www
Если указанная команда не завершает свою работу сразу после выполнения, вам потребуется нажать “q”, чтобы выйти.
Настройка блока сервера Nginx
Блок сервера Nginx аналогичен виртуальному хосту в Apache. Мы не будем задействовать стандартный блок сервера, так как он не подходит для обработки PHP-кода, и его изменение может привести к путанице. Поэтому следует удалить символическую ссылку по умолчанию из каталога sites-enabled, выполнив следующую команду. (Тем не менее, он остается доступным по адресу /etc/nginx/sites-available/default.)
sudo rm /etc/nginx/sites-enabled/default
После этого откройте текстовый редактор командной строки, например Nano, и создайте новый файл конфигурации сервера в папке /etc/nginx/conf.d/.
sudo nano /etc/nginx/conf.d/default.conf
Добавьте следующий текст в файл. Данный фрагмент позволит Nginx принимать соединения на порту 80 для IPv4 и порту 80 для IPv6 с использованием универсального адреса.
Сохраните изменения и закройте документ. (Для сохранения файла в текстовом редакторе Nano нажмите Ctrl+O, затем подтвердите, нажав Enter. Чтобы завершить работу, используйте Ctrl+X.)
После этого проверьте настройки Nginx.
sudo nginx - t
После успешного прохождения теста выполните перезагрузку Nginx.
sudo systemctl reload nginx
Проверьте работу PHP
Для проверки работы PHP-FPM с веб-сервером Nginx необходимо создать файл info.php в директории webroot.
sudo nano /usr/share/nginx/html/info.php
Поместите следующий код на PHP в файл.
Сохраните изменения в файле и закройте его. Далее в адресной строке вашего браузера введите server-ip-address/info.php, подставив вместо server-ip-address свой действительный IP-адрес. Если вы выполняете этот процесс на своем локальном компьютере, введите 127.0.0.1/info.php или localhost/info.php.
Вы должны проверить данные о PHP на вашем сервере. Это подтверждает, что PHP-скрипты могут правильно обрабатываться веб-сервером Nginx.

Оптимизация работы PHP
Конфигурационные параметры PHP, находящиеся в файле (/etc/php/8.1/fpm/php. ini), разработаны для серверов с крайне ограниченными ресурсами, такими как устройства с 256 МБ оперативной памяти. Для повышения производительности веб-приложений необходимо внести в них определённые изменения.
Мы можем изменить файл конфигурации PHP (php. ini), однако разумнее будет создать свой собственный файл конфигурации. Это обеспечит сохранность вашей настройки при обновлении до новой версии PHP 8.1.
sudo nano /etc/php/8.1/fpm/conf.d/60-custom. ini
Включите в этот файл следующие строки.
; Максимальное количество памяти, которое может использовать скрипт. По умолчанию 128M memory_limit = 512M ; Максимально допустимый размер для загружаемых файлов. По умолчанию 2M. upload_max_filesize = 20M ; Максимальный размер POST-данных, который PHP примет. По умолчанию 2M. post_max_size = 20M ; Размер общей памяти для хранения OPcache. По умолчанию 128 opcache. memory_consumption=256 ; Количество памяти для интернированных строк в мегабайтах. По умолчанию 8. opcache. interned_strings_buffer=32

Сохраните файл и закройте его. После этого перезапустите PHP8.1-FPM, чтобы изменения начали действовать.
sudo systemctl reload php8.1-fpm
OPcache повышает эффективность PHP-приложений, сохраняя предварительно скомпилированный байт-код в кэше. Для просмотра статистики OPcache вы можете использовать страницу info.php. Ниже представлено сравнение производительности до и после на одном из моих серверов.
До

После

Как видно, перед внедрением пользовательской конфигурации PHP память (RAM), отведенная для OPcache, практически исчерпана. После активации пользовательских настроек PHP OPcache сможет использовать больше оперативной памяти для кэширования заранее скомпилированного байт-кода.
Поздравляю! Вам удалось установить Nginx, MariaDB и PHP8.1 на Ubuntu 22.04. Для повышения безопасности вашего сервера настоятельно рекомендуется удалить файл info.php, чтобы избежать его потенциального доступа хакеров.
sudo rm /usr/share/nginx/html/info.php
Рекомендации по диагностике неисправностей
При возникновении ошибок вы можете ознакомиться с журналом ошибок Nginx (/var/log/nginx/error.log), чтобы определить источник проблемы.
Автоматическое перезапускание Nginx
В случае, если процесс Nginx будет остановлен по какой-либо причине, вам следует ввести следующую команду для его перезапуска.
sudo systemctl restart nginx
Чтобы избежать ручного ввода данной команды, мы можем настроить автоматический перезапуск Nginx, изменив файл юнита systemd nginx.service. Для того чтобы изменить стандартные настройки службы systemd, необходимо создать отдельный каталог.
sudo mkdir - p /etc/systemd/system/nginx.service.d/
После этого создайте документ в данной папке.
sudo nano /etc/systemd/system/nginx.service.d/restart.conf
Включите в файл указанные строки, чтобы настроить автоматический перезапуск Nginx через 5 секунд после выявления сбоя. Параметр RestartSec по умолчанию равен 100 мс, что является слишком коротким временем. Если значение RestartSec окажется слишком низким, Nginx может выдать сообщение о том, что «запрос на повторный запуск производится слишком быстро».
[Service] Restart=always RestartSec=5s
Сохраните файл и закройте его. После этого обновите systemd, чтобы изменения начали действовать.
sudo systemctl daemon-reload
Чтобы убедиться, что это сработает, завершите работу Nginx с помощью:
sudo pkill nginx
После этого убедитесь в статусе Nginx. Вы увидите, что Nginx перезапустился автоматически.
systemctl status nginx
Автоматизированный старт MariaDB.
По умолчанию MariaDB настроена на автоматический перезапуск в случае сбоя (файл /lib/systemd/system/mariadb.service). Однако если на сервере закончится память и MariaDB будет остановлена oom killer, она не сможет перезапуститься автоматически. Мы можем изменить настройки, чтобы обеспечить ее перезапуск вне зависимости от причин остановки.
Создайте каталог для хранения индивидуальных настроек.
sudo mkdir - p /etc/systemd/system/mariadb.service.d/
Сформируйте индивидуальный файл конфигурации.
sudo nano /etc/systemd/system/mariadb.service.d/restart.conf
Включите указанные строки в файл.
[Service] Restart=always RestartSec=5s
Сохраните файл и закройте его. После этого обновите systemd, чтобы изменения начали действовать.
sudo systemctl daemon-reload
Далее предпримем следующие шаги.
Если вам понравился этот пост, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций. Кроме того, вы можете установить WordPress на стеке LEMP для создания собственного веб-сайта или блога.
- Установите WordPress на Ubuntu 22.04, используя стек LEMP с Nginx, MariaDB и PHP 8.1.
<

