1. Блог
  2. Мануалы

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

Установка 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.

Видеоинструкция

YouTube video

Эта статья на других языках:EnglishУкраїнська