Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux OS Администрация

Как установить Linux, Nginx, MySQL, PHP (LEMP) Stack на Ubuntu: Полное руководство

Стек LEMP — аббревиатура для Linux, Nginx, MySQL и PHP — является одной из наиболее широко используемых конфигураций веб-сервера для питания динамических веб-сайтов и высокопроизводительных веб-приложений. Объединяя надежную стабильность Linux, молниеносную скорость Nginx, мощные возможности управления данными MySQL и универсальность PHP, стек LEMP обеспечивает мощную, масштабируемую и ресурсоэффективную среду хостинга.

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

Если вам нужна надежная основа для запуска этого стека, VPS Hosting AlexHost предоставляет высокопроизводительные виртуальные серверы на базе Linux с полным доступом root, что дает вам полный контроль над каждым компонентом вашей среды LEMP. Дополните это SSL сертификатом, чтобы защитить ваше приложение с первого дня.

В этом подробном руководстве мы проведем вас через каждый этап установки и настройки полного стека LEMP на сервере Ubuntu — от подготовки системы до тестирования вашей живой среды PHP.

1. Предварительные требования

Перед началом убедитесь, что у вас есть следующее:

  • Сервер с Ubuntu 18.04, 20.04 или 22.04 LTS
  • Учетная запись пользователя с привилегиями sudo
  • SSH доступ или прямой доступ к терминалу вашего сервера
  • Зарегистрированное доменное имя (опционально, но рекомендуется для production развертываний — вы можете зарегистрировать его через AlexHost Domain Registration)

> Совет профессионала: Для чистой, изолированной среды с гарантированными ресурсами план VPS Hosting — идеальная отправная точка для любого LEMP развертывания.

2. Обновите вашу систему

Перед установкой любых пакетов критически важно обновить индекс пакетов и применить все ожидающие обновления. Это гарантирует, что вы работаете с последними, наиболее безопасными версиями всего программного обеспечения.

Откройте терминал и выполните:

sudo apt update && sudo apt upgrade -y

Эта команда обновляет локальную базу данных пакетов и обновляет все установленные пакеты до их последних доступных версий.

3. Установите Nginx

Nginx (произносится “engine-x”) — это высокопроизводительный, управляемый событиями веб-сервер и обратный прокси. В отличие от Apache, Nginx обрабатывает одновременные соединения с минимальным потреблением памяти, что делает его предпочтительным выбором для сред с высокой нагрузкой.

Шаг 1: Установите Nginx

sudo apt install nginx -y

Шаг 2: Запустите и включите Nginx

После установки запустите сервис Nginx и настройте его на автоматический запуск при загрузке системы:

sudo systemctl start nginx
sudo systemctl enable nginx

Шаг 3: Проверьте, что Nginx работает

Проверьте статус сервиса, чтобы подтвердить, что Nginx активен:

sudo systemctl status nginx

Вы должны увидеть вывод, указывающий на то, что сервис активен (работает). Вы также можете открыть веб-браузер и перейти на IP-адрес вашего сервера:

http://your_server_ip

Если Nginx работает правильно, вы увидите страницу по умолчанию “Welcome to nginx!”.

Шаг 4: Настройте брандмауэр (если применимо)

Если у вас включен UFW (Uncomplicated Firewall), разрешите трафик HTTP и HTTPS:

sudo ufw allow 'Nginx Full'
sudo ufw status

4. Установка MySQL

MySQL — это мощная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая служит основой данных для большинства динамических веб-приложений, включая WordPress, Joomla и пользовательские приложения PHP.

Шаг 1: Установка сервера MySQL

sudo apt install mysql-server -y

Шаг 2: Защита установки MySQL

После установки запустите встроенный скрипт усиления безопасности. Этот скрипт помогает установить надежный пароль root, удалить анонимных пользователей, отключить удаленный вход root и удалить тестовую базу данных:

sudo mysql_secure_installation

Вам будет предложена серия вопросов. Рекомендуемые ответы для производственного сервера:

ЗапросРекомендуемый ответ
Установить компонент VALIDATE PASSWORD?Да
Уровень политики проверки пароля2 (STRONG)
Удалить анонимных пользователей?Да
Запретить удаленный вход root?Да
Удалить тестовую базу данных?Да
Перезагрузить таблицы привилегий?Да

Шаг 3: Проверка работы MySQL

sudo systemctl status mysql

Шаг 4: Вход в MySQL (опциональная проверка)

sudo mysql -u root -p

Введите пароль root при появлении запроса. Введите exit для выхода из оболочки MySQL.

5. Установите PHP

PHP (Hypertext Preprocessor) — это серверный язык сценариев, который обрабатывает динамическое содержимое и взаимодействует с MySQL для обслуживания веб-страниц, управляемых данными. При использовании Nginx PHP обрабатывается через PHP-FPM (FastCGI Process Manager), который обрабатывает PHP-запросы независимо от веб-сервера для повышения производительности.

Шаг 1: Установите PHP-FPM и расширение MySQL

sudo apt install php-fpm php-mysql -y

Вы также можете установить часто используемые расширения PHP для более широкой совместимости приложений:

sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip -y

Шаг 2: Настройте PHP-FPM для безопасности

Откройте файл конфигурации PHP-FPM. Замените 8.1 на установленную версию PHP (проверьте с помощью php -v):

sudo nano /etc/php/8.1/fpm/php.ini

Найдите директиву cgi.fix_pathinfo и установите её на 0 для предотвращения критической уязвимости безопасности:

cgi.fix_pathinfo=0

> Почему это важно: Если cgi.fix_pathinfo установлен на 1, PHP попытается выполнить ближайший файл, который он сможет найти, если запрашиваемый PHP-файл не существует. Это поведение может быть использовано злоумышленниками для выполнения произвольного кода.

Сохраните и закройте файл (Ctrl+X, затем Y, затем Enter).

Шаг 3: Перезагрузите PHP-FPM

Примените изменения конфигурации, перезагрузив сервис PHP-FPM:

sudo systemctl restart php8.1-fpm

6. Настройка Nginx для обработки PHP

По умолчанию Nginx не знает, как обрабатывать PHP файлы. Вам нужно создать блок сервера (эквивалент виртуального хоста Apache в Nginx), который инструктирует Nginx передавать PHP запросы на PHP-FPM для обработки.

Шаг 1: Создание корневой директории веб-сайта

Создайте директорию, где будут храниться файлы вашего веб-сайта:

sudo mkdir -p /var/www/your_domain
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domain

Замените your_domain на ваше фактическое имя домена или описательное имя проекта.

Шаг 2: Создание нового блока сервера Nginx

Создайте новый файл конфигурации Nginx для вашего сайта:

sudo nano /etc/nginx/sites-available/your_domain

Добавьте следующий блок конфигурации. Внимательно прочитайте встроенные комментарии — они объясняют, что делает каждая директива:

server {
    listen 80;
    listen [::]:80;

    server_name your_domain www.your_domain;  # Replace with your domain or server IP

    root /var/www/your_domain;                # Document root — where your files live
    index index.php index.html index.htm;     # Default files to serve

    # Handle all requests; return 404 if file not found
    location / {
        try_files $uri $uri/ =404;
    }

    # Pass PHP scripts to PHP-FPM for processing
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;  # Adjust PHP version as needed
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Deny access to hidden files (e.g., .htaccess)
    location ~ /.ht {
        deny all;
    }
}

> Важно: Замените your_domain на ваше фактическое имя домена и отрегулируйте php8.1-fpm.sock в соответствии с установленной версией PHP.

Шаг 3: Активация блока сервера

Создайте символическую ссылку из sites-available на sites-enabled для активации конфигурации:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Чтобы избежать потенциальной проблемы с памятью хеш-бакета, также рекомендуется открыть основной файл конфигурации Nginx и убедиться, что директива server_names_hash_bucket_size раскомментирована:

sudo nano /etc/nginx/nginx.conf

Найдите и раскомментируйте:

server_names_hash_bucket_size 64;

Шаг 4: Проверка конфигурации Nginx

Перед перезагрузкой Nginx всегда проверяйте конфигурацию на синтаксические ошибки:

sudo nginx -t

Если вывод показывает:

nginx: configuration file /etc/nginx/nginx.conf test is successful

Вы готовы продолжить.

Шаг 5: Перезагрузка Nginx

Примените все изменения, перезагрузив сервис Nginx:

sudo systemctl restart nginx

7. Создание и тестирование файла PHP Info

Чтобы подтвердить, что Nginx правильно передает PHP-запросы в PHP-FPM, создайте простой файл тестирования PHP в корневой каталог документов.

Шаг 1: Создание файла PHP Info

sudo nano /var/www/your_domain/info.php

Добавьте следующее содержимое:

<?php
phpinfo();
?>

Сохраните и закройте файл.

Шаг 2: Доступ к странице PHP Info

Откройте веб-браузер и перейдите на:

http://your_domain/info.php

Или, если вы еще не настроили домен:

http://your_server_ip/info.php

Вы должны увидеть страницу информации PHP — подробный обзор вашей установки PHP, загруженных модулей, значений конфигурации и переменных окружения. Это подтверждает, что все три компонента (Nginx, PHP-FPM и MySQL) работают вместе правильно.

Шаг 3: Удаление файла PHP Info (критический шаг безопасности)

После того как вы подтвердили, что все работает, немедленно удалите файл info.php. Этот файл раскрывает конфиденциальные детали конфигурации сервера, которые могут быть использованы злоумышленниками:

sudo rm /var/www/your_domain/info.php

8. Следующие шаги: Укрепление и оптимизация вашего LEMP стека

Когда ваш LEMP стек работает, рассмотрите следующие дополнительные шаги для подготовки вашего сервера к production:

Включите HTTPS с бесплатным SSL сертификатом

Защитите ваш сайт с помощью TLS/SSL шифрования, используя Certbot и Let’s Encrypt:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain -d www.your_domain

Кроме того, изучите AlexHost SSL Certificates для премиум, коммерчески проверенных сертификатов, которые обеспечивают более высокие уровни доверия для бизнес и электронной коммерции приложений.

Оптимизируйте производительность Nginx

Добавьте следующие директивы в вашу конфигурацию Nginx для улучшения производительности:

# Enable Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;

# Enable browser caching for static assets
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

Установите выделенного пользователя MySQL

Избегайте использования корневой учетной записи MySQL для ваших приложений. Создайте выделенного пользователя базы данных с ограниченными привилегиями:

CREATE DATABASE your_app_db;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON your_app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;

Рассмотрите панель управления для более простого управления

Если вы предпочитаете графический интерфейс для управления вашим LEMP стеком, виртуальными хостами Nginx, базами данных и учетными записями электронной почты, рассмотрите развертывание панели управления. AlexHost предлагает VPS с cPanel и ряд других VPS панелей управления для упрощения администрирования сервера без ущерба для производительности или контроля.

9. Заключение

Вы успешно установили и настроили полный LEMP stack (Linux, Nginx, MySQL, PHP) на вашем сервере Ubuntu. Вот краткое резюме того, что вы достигли:

  • Nginx установлен, запущен и настроен в качестве веб-сервера
  • MySQL установлена и защищена с помощью скрипта усиления безопасности
  • PHP-FPM установлена с конфигурацией, ориентированной на безопасность
  • Nginx server block настроен для маршрутизации PHP-запросов в PHP-FPM
  • Обработка PHP проверена через страницу тестирования phpinfo()

Этот stack обеспечивает готовую к использованию основу для размещения практически любого приложения на PHP — от WordPress и Laravel до пользовательских платформ. Сочетание архитектуры, управляемой событиями Nginx, и управления процессами PHP-FPM делает его особенно хорошо подходящим для рабочих нагрузок с высокой параллелизмом.

Для лучшей производительности и надежности размещайте ваш LEMP stack в специально созданной среде Linux. Планы VPS Hosting от AlexHost предлагают хранилище на основе SSD, гарантированную RAM, полный доступ root и круглосуточную техническую поддержку — все, что вам нужно для запуска быстрого, безопасного и масштабируемого веб-приложения.

Помните, что необходимо регулярно обновлять все компоненты, отслеживать логи сервера и внедрять брандмауэр и систему обнаружения вторжений как часть вашей постоянной политики безопасности.