Как установить 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)
> Совет профессионала: Для чистой, изолированной среды с гарантированными ресурсами план 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 status4. Установите MySQL
MySQL — это мощная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая служит основой данных для большинства динамических веб-приложений, включая WordPress, Joomla и пользовательские приложения PHP.
Шаг 1: Установите MySQL Server
sudo apt install mysql-server -yШаг 2: Защитите установку MySQL
После установки запустите встроенный скрипт усиления безопасности. Этот скрипт помогает установить надежный пароль root, удалить анонимных пользователей, отключить удаленный вход root и удалить тестовую базу данных:
sudo mysql_secure_installationВам будет предложена серия вопросов. Рекомендуемые ответы для production-сервера:
| Вопрос | Рекомендуемый ответ |
|---|---|
| Настроить компонент 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-fpm6. Настройте 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 nginx7. Создайте и протестируйте файл 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
on All Hosting Services
