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

Крок 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Русский