- Home »

Установка стека Linux Nginx MySQL PHP (LEMP) на Ubuntu 24
Стек LEMP на Ubuntu 24.04 — это классическая связка для веб-разработки, которая остается актуальной и в 2024 году. Если вы настраиваете сервер под свои проекты или клиентские сайты, то понимание того, как правильно собрать и настроить Linux + Nginx + MySQL + PHP, поможет вам создать стабильную и производительную среду. В этой статье разберем пошагово весь процесс установки и конфигурации, включая подводные камни и практические советы из реального опыта.
Мы рассмотрим три ключевых вопроса: как работает связка LEMP и почему она эффективна, как быстро и правильно настроить все компоненты с нуля, а также разберем практические примеры конфигурации с реальными кейсами — от простого сайта до высоконагруженного проекта.
Что такое LEMP и почему именно эта связка?
LEMP — это акроним от Linux, Nginx (Engine-X), MySQL, PHP. Эта связка завоевала популярность благодаря высокой производительности Nginx в обработке статических файлов и управлении соединениями. В отличие от Apache, который создает новый процесс для каждого запроса, Nginx использует асинхронную event-driven архитектуру, что позволяет обслуживать тысячи подключений с минимальным потреблением ресурсов.
Основные преимущества LEMP:
- Низкое потребление памяти — Nginx потребляет в 2-3 раза меньше RAM чем Apache
- Высокая скорость обработки статики — идеально для современных веб-приложений
- Excellent масштабируемость — легко выдерживает высокие нагрузки
- Простая конфигурация — синтаксис config-файлов интуитивно понятен
Подготовка системы Ubuntu 24.04
Перед началом установки убедитесь, что у вас есть свежая Ubuntu 24.04. Если нужен VPS — можете заказать здесь, а для серьезных проектов лучше взять выделенный сервер.
Начнем с обновления системы:
sudo apt update && sudo apt upgrade -y
sudo apt install curl wget gnupg2 software-properties-common -y
Также рекомендую сразу настроить firewall:
sudo ufw enable
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
Установка Nginx
Nginx в Ubuntu 24.04 доступен в официальных репозиториях, но для получения последней версии лучше использовать официальный репозиторий:
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
echo "deb https://nginx.org/packages/ubuntu/ $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update
sudo apt install nginx -y
Запускаем и добавляем в автозагрузку:
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
Проверяем работу, открыв в браузере IP-адрес сервера — должна появиться приветственная страница Nginx.
Установка MySQL 8.0
MySQL 8.0 значительно улучшен по сравнению с предыдущими версиями — добавлена поддержка JSON, улучшена производительность и безопасность:
sudo apt install mysql-server -y
sudo systemctl start mysql
sudo systemctl enable mysql
Обязательно запускаем скрипт безопасности:
sudo mysql_secure_installation
Во время настройки рекомендую:
- Установить пароль для root (сложный!)
- Удалить анонимных пользователей
- Запретить удаленное подключение root
- Удалить тестовую базу данных
Создаем пользователя для веб-приложений:
sudo mysql -u root -p
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON *.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Установка PHP 8.3
Ubuntu 24.04 поставляется с PHP 8.3, что отлично — это стабильная версия с хорошей производительностью:
sudo apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-intl php8.3-bcmath -y
Запускаем PHP-FPM:
sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm
sudo systemctl status php8.3-fpm
Настраиваем PHP для продакшена. Редактируем /etc/php/8.3/fpm/php.ini
:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 3000
date.timezone = Europe/Moscow
Также настраиваем пул PHP-FPM в /etc/php/8.3/fpm/pool.d/www.conf
:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
Перезапускаем PHP-FPM:
sudo systemctl restart php8.3-fpm
Настройка Nginx для работы с PHP
Создаем конфигурацию виртуального хоста. Пример для сайта:
sudo nano /etc/nginx/sites-available/example.com
Базовая конфигурация:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html/example.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
Создаем директорию для сайта и активируем конфигурацию:
sudo mkdir -p /var/www/html/example.com
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Тестирование работы LEMP
Создаем тестовый PHP-файл:
sudo nano /var/www/html/example.com/info.php
Содержимое:
<?php
phpinfo();
?>
Также создаем тест подключения к MySQL:
sudo nano /var/www/html/example.com/db_test.php
<?php
$servername = "localhost";
$username = "webuser";
$password = "strong_password_here";
try {
$pdo = new PDO("mysql:host=$servername", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully to MySQL";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
Устанавливаем правильные права:
sudo chown -R www-data:www-data /var/www/html/example.com
sudo chmod -R 755 /var/www/html/example.com
Оптимизация производительности
Для высоконагруженных проектов рекомендую дополнительную настройку. В /etc/nginx/nginx.conf
:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
client_max_body_size 64M;
client_body_buffer_size 128k;
}
Сравнение с альтернативными решениями
Характеристика | LEMP (Nginx) | LAMP (Apache) | OpenLiteSpeed |
---|---|---|---|
Потребление памяти | Низкое (~10-20MB) | Высокое (~50-100MB) | Среднее (~30-50MB) |
Статический контент | Отлично | Хорошо | Отлично |
Конфигурация | Простая | Сложная (.htaccess) | GUI + конфиг |
Модули | Встроенные | Огромный выбор | Ограниченный выбор |
Полезные дополнения и автоматизация
Для автоматизации развертывания можно использовать простой bash-скрипт:
#!/bin/bash
# LEMP Auto-installer for Ubuntu 24.04
apt update && apt upgrade -y
apt install nginx mysql-server php8.3-fpm php8.3-mysql -y
systemctl enable nginx mysql php8.3-fpm
systemctl start nginx mysql php8.3-fpm
# Настройка базовой безопасности
ufw enable
ufw allow 'Nginx Full'
ufw allow OpenSSH
echo "LEMP stack installed successfully!"
echo "Don't forget to run mysql_secure_installation"
Для мониторинга рекомендую установить:
sudo apt install htop iotop nethogs -y
Безопасность и best practices
Несколько важных моментов для продакшена:
- Всегда скрывайте версию Nginx:
server_tokens off;
- Настройте fail2ban для защиты от брутфорса
- Используйте SSL/TLS сертификаты (Let’s Encrypt)
- Регулярно обновляйте все компоненты
- Настройте автоматический бэкап баз данных
Пример настройки fail2ban для Nginx:
sudo apt install fail2ban -y
sudo nano /etc/fail2ban/jail.local
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
[nginx-limit-req]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
Интересные факты и нестандартные применения
Nginx может работать не только как веб-сервер, но и как:
- Load balancer для распределения нагрузки между несколькими бэкендами
- Reverse proxy для API Gateway
- Mail proxy для SMTP/IMAP
- Streaming server для видео (с модулем RTMP)
Один из интересных кейсов — использование Nginx для A/B тестирования с помощью переменных:
split_clients $remote_addr $variant {
50% "A";
50% "B";
}
location / {
if ($variant = "A") {
proxy_pass http://backend_a;
}
if ($variant = "B") {
proxy_pass http://backend_b;
}
}
Полезные ссылки
Для дальнейшего изучения рекомендую:
Заключение и рекомендации
Стек LEMP остается одним из лучших выборов для веб-разработки в 2024 году. Он обеспечивает отличную производительность, стабильность и относительную простоту настройки. Ubuntu 24.04 LTS гарантирует долгосрочную поддержку, что критично для продакшен-окружений.
Рекомендую использовать LEMP для:
- Высоконагруженных веб-приложений
- API-серверов
- Сайтов с большим количеством статического контента
- Проектов, где важна скорость отклика
Избегайте LEMP, если:
- Вам нужна поддержка специфических Apache-модулей
- Проект критически зависит от .htaccess файлов
- Команда не имеет опыта работы с Nginx
Помните: правильно настроенный LEMP может обслуживать тысячи одновременных подключений на скромном железе, но неправильная конфигурация может превратить мощный сервер в медленную черепаху. Тестируйте, мониторьте и оптимизируйте — это ключ к успеху.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.