Установка стека LEMP (Nginx + PHP-FPM + MySQL) на Ubuntu
Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):
curl -sSL https://cp.lv/scripts/ustanovit-lemp-ubuntu.sh | sudo bash…или через wget:
wget -qO- https://cp.lv/scripts/ustanovit-lemp-ubuntu.sh | sudo bashСодержимое скрипта ustanovit-lemp-ubuntu.sh:
#!/usr/bin/env bash
set -e
export DEBIAN_FRONTEND=noninteractive
# 1. Обновление системы
sudo apt-get update
sudo apt-get upgrade -y
# 2. Nginx, MySQL, PHP-FPM и расширения для CMS
sudo apt-get install -y nginx mysql-server php-fpm php-mysql \
php-cli php-curl php-gd php-mbstring php-xml php-zip
sudo systemctl enable --now nginx mysql
# 3. Корень сайта и тестовый index.php
sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
echo "<?php phpinfo();" | sudo tee /var/www/example.com/index.php > /dev/null
# 4. server block (кавычки 'EOF' — переменные Nginx не трогаем)
sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
server {
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?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
EOF
# 5. Активация сайта
sudo ln -sf /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo nginx -t && sudo systemctl reload nginx
echo "LEMP готов: откройте http://example.com"
LEMP — это связка Linux, Nginx, MySQL и PHP: типовое окружение для сайтов на PHP (WordPress, Laravel, самописные проекты). Ниже готовая последовательность команд для Ubuntu 22.04/24.04. Весь процесс занимает 10–15 минут.
Что нужно заранее
- VPS с Ubuntu 22.04 или 24.04 и доступом по SSH.
- Пользователь с правами
sudo(не работайте под root постоянно). - Домен, указывающий A-записью на IP сервера (для боевого сайта).
Первым делом обновите систему:
sudo apt update && sudo apt upgrade -y
Шаг 1. Установка Nginx
sudo apt install nginx -y
sudo systemctl enable --now nginx
Проверьте статус и откройте порты в брандмауэре:
sudo systemctl status nginx
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable
Откройте IP сервера в браузере — должна появиться страница «Welcome to nginx».
Шаг 2. Установка MySQL
sudo apt install mysql-server -y
sudo systemctl enable --now mysql
Запустите интерактивную защиту сервера БД:
sudo mysql_secure_installation
Здесь задайте пароль root, удалите анонимных пользователей, запретите удалённый вход root и удалите тестовую базу. Создайте базу и отдельного пользователя под сайт:
sudo mysql
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'СложныйПароль123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Шаг 3. Установка PHP-FPM
Nginx не умеет обрабатывать PHP сам — он передаёт запросы процессу PHP-FPM через сокет.
sudo apt install php-fpm php-mysql -y
Проверьте версию и имя сервиса (в Ubuntu 24.04 это php8.3-fpm):
php -v
systemctl status php8.3-fpm
Полезный набор расширений для CMS:
sudo apt install php-cli php-curl php-gd php-mbstring php-xml php-zip -y
Шаг 4. Настройка server block
Создайте корень сайта и тестовый файл:
sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
echo "<?php phpinfo();" | sudo tee /var/www/example.com/index.php
Откройте конфиг /etc/nginx/sites-available/example.com в редакторе:
sudo nano /etc/nginx/sites-available/example.com
Содержимое файла:
server {
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?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Либо создайте конфиг целиком одной командой — скопируйте и вставьте в консоль (кавычки 'EOF' важны, чтобы переменные Nginx $uri остались как есть):
sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
server {
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?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
EOF
Активируйте сайт и перезагрузите Nginx:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Шаг 5. Проверка PHP
Откройте http://example.com — вы увидите страницу phpinfo() с версией PHP и подключёнными модулями. Убедитесь, что в списке есть mysqli или pdo_mysql. После проверки обязательно удалите тестовый файл — он раскрывает конфигурацию сервера:
sudo rm /var/www/example.com/index.php
Быстрая проверка компонентов
| Компонент | Команда проверки | Ожидаемо |
|---|---|---|
| Nginx | sudo nginx -t |
syntax is ok |
| PHP-FPM | systemctl is-active php8.3-fpm |
active |
| MySQL | mysqladmin -u root -p status |
Uptime: … |
| Сокет PHP | ls /run/php/ |
php8.3-fpm.sock |
Частые вопросы
Почему сайт отдаёт код PHP как текст?
Nginx не передаёт запрос в PHP-FPM. Проверьте блок location ~ \.php$ и правильность пути к сокету в fastcgi_pass.
Ошибка 502 Bad Gateway — что делать?
Обычно PHP-FPM не запущен или указан неверный сокет. Выполните systemctl status php8.3-fpm и сверьте имя .sock-файла с конфигом.
Как узнать версию PHP на моей Ubuntu?
php -v. В Ubuntu 22.04 по умолчанию PHP 8.1, в 24.04 — PHP 8.3. Имя сервиса и сокета зависит от версии.
Можно ли поставить MariaDB вместо MySQL?
Да, MariaDB совместима и ставится через apt install mariadb-server. Клиентские команды и SQL идентичны.
LEMP хорошо чувствует себя даже на небольшом сервере, но под боевой трафик берите NVMe-диск и достаточный объём RAM. Готовые тарифы — на странице аренда VPS, а под нагруженные сайты подойдёт VPS для WordPress.
