Встановлення 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.
Відеоінструкція



