Установка LEMP (Nginx, MySQL, PHP) на Ubuntu 24.04

LEMP — это связка Linux, Nginx, MySQL и PHP, на которой работают WordPress, Laravel и большинство других PHP-приложений. Инструкция написана для Ubuntu 24.04 LTS и подходит для 22.04 и 26.04: отличается только номер версии PHP.
Что понадобится
- VPS с Ubuntu и доступом по SSH;
- пользователь с правами
sudo; - домен, A-запись которого указывает на IP-адрес сервера (для SSL).
Обновите систему:
sudo apt update && sudo apt upgrade -y
Шаг 1. Nginx
sudo apt install -y nginx
Если включён UFW, разрешите HTTP и HTTPS:
sudo ufw allow 'Nginx Full'
Откройте в браузере http://IP-сервера — должна появиться страница «Welcome to nginx».
Шаг 2. MySQL
sudo apt install -y mysql-server
Запустите скрипт базовой защиты. Он удалит анонимных пользователей и тестовую базу и запретит удалённый вход для root:
sudo mysql_secure_installation
В Ubuntu пользователь root входит в MySQL без пароля, через sudo. Создайте базу данных и отдельного пользователя для сайта:
sudo mysql
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;
Шаг 3. PHP
Nginx не выполняет PHP сам, а передаёт запросы службе PHP-FPM:
sudo apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
Узнайте установленную версию и имя сокета — они понадобятся на следующем шаге:
php -v
ls /run/php/
В Ubuntu 24.04 это PHP 8.3 и сокет php8.3-fpm.sock.
Шаг 4. Настройка сайта
Создайте каталог сайта:
sudo mkdir -p /var/www/example.com
sudo chown -R $USER:www-data /var/www/example.com
Создайте конфигурацию:
sudo nano /etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
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 ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Подробный разбор конфигурации — в статье о виртуальных хостах Nginx.
Шаг 5. Проверка PHP
echo "<?php phpinfo();" > /var/www/example.com/info.php
Откройте http://example.com/info.php — появится страница с параметрами PHP.
Шаг 6. Проверка подключения к базе
Создайте файл /var/www/example.com/db.php:
<?php
$db = new mysqli('localhost', 'site_user', 'надёжный_пароль', 'site_db');
echo $db->connect_error ? 'Ошибка: ' . $db->connect_error : 'Подключение к MySQL работает';
Откройте http://example.com/db.php, убедитесь, что подключение работает, и удалите файл.
Шаг 7. SSL-сертификат
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Certbot получит сертификат Let’s Encrypt, настроит HTTPS и перенаправление с HTTP. Продление выполняется автоматически.
Базовая настройка PHP
Параметры находятся в /etc/php/8.3/fpm/php.ini. Для большинства сайтов стоит увеличить лимиты загрузки файлов:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
Чтобы Nginx принимал такие файлы, добавьте в блок server строку client_max_body_size 64M;. Затем перезапустите службы:
sudo systemctl restart php8.3-fpm
sudo systemctl reload nginx
Если что-то не работает
- 502 Bad Gateway — в конфигурации Nginx указан неверный сокет PHP-FPM или служба не запущена:
systemctl status php8.3-fpm. - Браузер скачивает PHP-файл — в конфигурации сайта нет блока
location ~ \.php$. - Access denied for user — проверьте имя пользователя, пароль и права на базу.
- Журналы —
/var/log/nginx/error.logиjournalctl -u php8.3-fpm.
Видеоинструкция



