Данный учебник продемонстрирует, как выполнить установку стека LEMP (Nginx, MariaDB и PHP8.3) на Ubuntu 24.04. Стек программного обеспечения представляет собой совокупность инструментов, которые работают совместно. LEMP — это акроним, который включает в себя Linux, Nginx (Engine-X), MariaDB/MySQL и PHP, все из которых являются бесплатными и открытыми программными решениями.
Это самый популярный набор программных инструментов, который обеспечивает функционирование динамических веб-сайтов и приложений.
- Linux представляет собой операционную систему.
- Nginx является сервером для обработки веб-запросов.
- MariaDB/MySQL представляет собой систему управления базами данных.
- PHP — это язык сценариев, работающий на серверной стороне и предназначенный для разработки динамических веб-страниц.
Содержание статьи
- 1 Требования
- 2 Обновление программных пакетов
- 3 Инсталляция веб-сервера Nginx
- 4 Настройка сервера базы данных MariaDB
- 5 Инсталляция PHP 8.3
- 6 Настройка блока сервера Nginx
- 7 Проверка работы PHP
- 8 Оптимизация производительности PHP
- 9 Рекомендации по решению проблем.
- 10 Автоматическое перезапускание Nginx
- 11 Автоматическое стартование MariaDB
- 12 Предстоящие действия
Требования
Чтобы воспользоваться этим учебником, вам потребуется операционная система Ubuntu 24.04, установленная на вашем персональном компьютере или на удаленном сервере.
Если вы ищете виртуальный частный сервер (VPS), обратите внимание на Kamatera VPS, который предоставляет:
- Бесплатный пробный период на протяжении 30 дней.
- Стартовая цена — всего $4 в месяц за 1 ГБ оперативной памяти.
- VPS с высокой производительностью на платформе KVM
- Девять центров обработки данных расположены по всему миру, среди которых США, Канада, Великобритания, Германия, Нидерланды, Гонконг и Израиль.
Используйте руководство по указанной ниже ссылке для настройки вашего сервера Linux VPS на платформе Kamatera.
- Как организовать VPS-сервер на базе Linux с помощью Kamatera.
Как только вы получите VPS с Ubuntu 24.04, выполните следующие шаги.
Если вам требуется установить стек LEMP с доменным именем, я советую приобретать домены через NameCheap, так как там доступные цены и бесплатная защита конфиденциальности whois на постоянной основе.
Обновление программных пакетов
Перед установкой стека LEMP настоятельно рекомендуется обновить репозиторий и программные пакеты. Для этого выполните следующие команды в вашей системе Ubuntu 24.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; включен; поставщик по умолчанию: активирован). Текущее состояние: активен.действует активно с Пт 2024-05-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: главный процесс /usr/sbin/nginx - g daemon on; master_process on; ├─8550 nginx: рабочий процесс └─8551 nginx: рабочий процесс
Термин «Включено» свидетельствует о том, что автозапуск при загрузке активирован, и мы наблюдаем работу Nginx. Кроме того, в выводе можно увидеть, сколько оперативной памяти потребляет Nginx. Если предыдущая команда не завершилась самостоятельно, нажмите «q», чтобы выйти.
Убедитесь, что вы знаете версию Nginx.
nginx - v
nginx версия: nginx/1.24.0 (Ubuntu)
Введите публичный IP-адрес вашего сервера с Ubuntu 24.04 в строку браузера. Вы увидите страницу «Welcome to Nginx», что подтвердит успешную работу веб-сервера Nginx. Если вы устанавливаете LEMP на локальной машине с Ubuntu 24.04, используйте 127.0.0.1 или localhost в адресной строке.

Если соединение не удалось установить или было отклонено, возможно, что брандмауэр препятствует поступлению запросов на TCP порт 80. Если вы применяете брандмауэр iptables, выполните следующую команду для открытия TCP порта 80.
sudo iptables - I INPUT - p tcp --dport 80 - j ACCEPT
Если вы применяете брандмауэр UFW, введите эту команду для разблокировки TCP порта 80.
sudo ufw allow http
В конечном итоге необходимо установить пользователя www-data (пользователь Nginx) в качестве владельца веб-директории, которая изначально принадлежит пользователю root.
sudo chown www-data:www-data /usr/share/nginx/html - R
Настройка сервера базы данных MariaDB
MariaDB служит альтернативой MySQL и была создана бывшими участниками команды MySQL, которые выражали опасения по поводу возможности превращения MySQL в закрытое программное обеспечение под управлением Oracle. Для установки MariaDB на Ubuntu 24.04 выполните следующую команду.
sudo apt install mariadb-server mariadb-client
После установки сервер MariaDB должен запуститься автоматически. Для проверки его состояния воспользуйтесь командой systemctl.
systemctl status mariadb
●Служба mariadb.service - это сервер базы данных MariaDB версии 10.11.7. Статус загрузки: загружен (/lib/systemd/system/mariadb.service; активирован; установка по умолчанию: активирована). Текущий статус: активен.действует активно с Пт 2022-05-10 14:19:16 UTC; 18 секунд назад Документация: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Основной PID: 9161 (mysqld) Статус: "Принимаем ваши SQL-запросы." Задачи: 31 (лимит: 9451) Память: 64.7M CGroup: /system. slice/mariadb.service └─9161 /usr/sbin/mysqld
Если команда не завершает выполнение сразу, нажмите «q», чтобы выйти.
Если сервер не функционирует, активируйте его с помощью следующей команды:
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.11.7.
mariadb Ver 15.1 Distrib 10.11.7-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Инсталляция PHP 8.3
PHP 8.3 добавлен в репозиторий Ubuntu 24.04 и демонстрирует незначительное увеличение производительности по сравнению с версией 8.2. Чтобы установить PHP 8.3 вместе с рядом популярных расширений, введите следующую команду.
sudo apt install php8.3 php8.3-fpm php8.3-mysql php-common php8.3-cli php8.3-common php8.3-opcache php8.3-readline php8.3-mbstring php8.3-xml php8.3-gd php8.3-curl
PHP-расширения часто играют важную роль в системах управления контентом (CMS), например, в WordPress. Если в вашей установке отсутствует расширение php8.3-xml, это может привести к тому, что некоторые страницы вашего сайта WordPress будут отображаться пустыми, и в журнале ошибок Nginx вы можете увидеть подобные сообщения об ошибках:
PHP message: PHP Fatal error: Uncaught Error: Call to undefined function xml_parser_create()
Инсталляция данных PHP-расширений обеспечивает бесперебойную работу вашей CMS. Теперь можете запустить php8.3-fpm.
sudo systemctl start php8.3-fpm
Активируйте автоматический запуск при старте системы.
sudo systemctl enable php8.3-fpm
systemctl status php8.3-fpm
● php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php8.3-fpm.service; enabled ; vendor pr> Active: активный (работающий) since Fri 2024-05-10 14:40:26 UTC; 12s ago Docs: man:php-fpm8.1(8) Process: 21019 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /ru> Main PID: 21012 (php-fpm8.1) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req> Tasks: 3 (limit: 9451) Memory: 9.4M CGroup: /system. slice/php8.3-fpm.service ├─21012 php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf) ├─21017 php-fpm: pool www └─21018 php-fpm: pool 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 с использованием универсального имени сервера.
server < listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index. html index. htm index. nginx-debian. html; location / < try_files $uri $uri/ /index.php; >location ~ \.php$ < fastcgi_pass unix:/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; >Долговременное кэширование в браузере может ускорить повторные заходы на ваш сайт.~
< access_log off; log_not_found off; expires 360d; >ограничить доступ к скрытым файлам местоположение~ /\.ht < access_log off; log_not_found off; deny all; >>
Закройте и сохраните документ. (В текстовом редакторе Nano для сохранения файла нажмите Ctrl+O, затем подтвердите нажатием Enter. Для выхода используйте комбинацию Ctrl+X.)
После этого проверьте настройки Nginx.
sudo nginx - t
При успешном выполнении теста перезапустите Nginx.
sudo systemctl reload nginx
Проверка работы PHP
Для проверки работы PHP-FPM с веб-сервером Nginx необходимо создать файл info.php в корневой папке веб-сайта.
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.3/fpm/php. ini, созданы для серверов с минимальными ресурсами, например, с 256 МБ оперативной памяти. Для повышения производительности веб-приложений необходимо внести в них определенные изменения.
Можно внести изменения в файл конфигурации PHP (php. ini), однако рекомендуется создать индивидуальный файл конфигурации PHP. Это позволит сохранить ваши настройки при обновлении до версии PHP 8.3.
sudo nano /etc/php/8.3/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

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

После

Перед применением пользовательской настройки PHP, оперативная память, выделенная для OPcache, практически полностью занята. После внедрения пользовательских конфигураций PHP, OPcache получает возможность использовать больше оперативной памяти для кэширования заранее скомпилированного байт-кода.
Поздравляем! Вам удалось установить Nginx, MariaDB и PHP 8.3 на Ubuntu 24.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-убийцей, она не перезапустится автоматически. Мы можем изменить настройки, чтобы обеспечить ее перезапуск в любых ситуациях.
Создайте папку для хранения настроек пользователей.
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 24.04, используя стек LEMP с Nginx, MariaDB и PHP 8.3.
Сопутствующие руководства по Nginx:
- Как устранить часто встречающиеся ошибки веб-сервера Nginx
Создание резервных копий необходимо для защиты от взломов, аварий в дата-центрах и других непредвиденных ситуаций. Важно разработать план резервного копирования для вашего сервера.
- Создание резервной копии и восстановление баз данных MariaDB через командную строку.
- Применяйте Duplicati для создания резервных копий файлов на системах Debian, Ubuntu и Linux Mint.
Оптимизация работы и отслеживание состояния серверов на базе Linux.
- Простым способом повысить производительность сети в Ubuntu является активация TCP BBR.
- HTTP/2 — это версия протокола передачи гипертекста, обеспечивающая более быструю и эффективную передачу данных по сравнению с HTTP/1.1. Она улучшает производительность за счет многопоточности и сжатия заголовков. Для включения HTTP/2 в Nginx необходимо:
- Убедиться, что Nginx поддерживает HTTP/2. Это можно проверить через команду
nginx - vи убедиться, что версия Nginx 1.9.5 или выше.
- Изменить конфигурацию Nginx: откройте конфигурационный файл вашего сайта, обычно находящийся в
/etc/nginx/sites-available/или
/etc/nginx/conf.d/, и в блоке конфигурации сервера добавьте
http2в строку с директивой
listen 443 ssl.
- Перезагрузить Nginx, используя команду
sudo systemctl restart nginx, чтобы изменения вступили в силу.
После этих шагов ваш сервер будет использовать HTTP/2 для обработки запросов на защищённых соединениях (SSL).
- Убедиться, что Nginx поддерживает HTTP/2. Это можно проверить через команду
- Отслеживание работы серверов Linux с использованием Netdata (2022)

