Home » Установка стека Linux Nginx MySQL PHP (LEMP) на Ubuntu 24
Установка стека Linux Nginx MySQL PHP (LEMP) на Ubuntu 24

Установка стека 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 может обслуживать тысячи одновременных подключений на скромном железе, но неправильная конфигурация может превратить мощный сервер в медленную черепаху. Тестируйте, мониторьте и оптимизируйте — это ключ к успеху.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked