Установка и настройка LEMP (Nginx + PHP-FPM + MariaDB) в Ubuntu

Разберём установку связки Nginx + PHP-FPM + MariaDB (LEMP) на чистой Ubuntu 22.04/24.04. Это базовый стек для любого сайта на PHP — WordPress, Bitrix, самописных проектов.

Обновляем систему

sudo apt update && sudo apt upgrade -y

Устанавливаем Nginx

sudo apt install nginx -y
sudo systemctl enable --now nginx

Проверяем, что сервис поднялся и слушает 80 порт:

systemctl status nginx
ss -tulpn | grep :80

Устанавливаем PHP-FPM

Ставим PHP и набор модулей, которые обычно нужны для типового сайта (можно скорректировать под свой проект):

sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring 
  php-xml php-zip php-intl -y

Проверяем, какая версия PHP встала и как называется сокет (у PHP-FPM он версионный, например php8.1-fpm или php8.3-fpm):

php -v
sudo systemctl status php8.3-fpm

Устанавливаем MariaDB

sudo apt install mariadb-server -y
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

В мастере mysql_secure_installation задаём пароль root, отвечаем «y» на удаление анонимных пользователей, запрет удалённого входа под root и удаление тестовой базы.

Создаём базу и пользователя под конкретный сайт:

sudo mysql -u root -p

CREATE DATABASE site_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site_user'@'localhost' IDENTIFIED BY 'НадёжныйПароль';
GRANT ALL PRIVILEGES ON site_db.* TO 'site_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Связываем Nginx и PHP-FPM

Создаём конфиг виртуального хоста:

sudo nano /etc/nginx/sites-available/site.conf
server {
    listen 80;
    server_name example.ru www.example.ru;
    root /var/www/example.ru/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ /.ht {
        deny all;
    }
}

Активируем сайт и проверяем синтаксис конфига перед перезапуском:

sudo mkdir -p /var/www/example.ru/html
sudo ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Кладём тестовый файл info.php в корень сайта, чтобы убедиться, что связка Nginx → PHP-FPM работает:

echo "" | sudo tee /var/www/example.ru/html/info.php

Открываем в браузере http://ваш_сервер/info.php — если видим страницу с информацией о PHP, стек настроен верно. После проверки файл обязательно удалите — оставлять phpinfo() в проде нельзя, это раскрывает версии ПО и конфигурацию сервера.

sudo rm /var/www/example.ru/html/info.php

Дальше логичный шаг — выпустить SSL-сертификат через certbot (по аналогии со статьёй про certbot для nginx в RedOS) и настроить файрвол UFW, чтобы наружу торчали только нужные порты. Про UFW — в отдельной статье.