Поиск по сайту:

Как установить Linux, Nginx, MySQL, PHP (стек LEMP) на Ubuntu 18.04


Введение

Программный стек LEMP — это группа программного обеспечения, которое можно использовать для обслуживания динамических веб-страниц и веб-приложений. Это аббревиатура, описывающая операционную систему Linux с веб-сервером Nginx (произносится как Engine-X). Базовые данные хранятся в базе данных MySQL, а динамическая обработка выполняется PHP.

В этом руководстве показано, как установить стек LEMP на сервер Ubuntu 18.04. Операционная система Ubuntu отвечает первому требованию. Мы опишем, как настроить и запустить остальные компоненты.

Предпосылки

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

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

Шаг 1 — Установка веб-сервера Nginx

Чтобы отображать веб-страницы для посетителей вашего сайта, вы собираетесь использовать Nginx, современный и эффективный веб-сервер.

Все программное обеспечение, используемое в этой процедуре, будет получено из стандартных репозиториев пакетов Ubuntu. Это означает, что вы будете использовать пакет управления пакетами apt для выполнения необходимых установок.

Поскольку вы впервые используете apt для этого сеанса, начните с обновления индекса пакетов вашего сервера:

  1. sudo apt update

Далее устанавливаем сервер:

  1. sudo apt install nginx

В Ubuntu 18.04 Nginx настроен на запуск после установки.

Если у вас запущен брандмауэр ufw, как указано в руководстве по начальной настройке, вам необходимо разрешить подключения к Nginx. Nginx регистрируется в ufw при установке, поэтому процедура довольно проста.

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

Включите это, введя следующее:

  1. sudo ufw allow 'Nginx HTTP'

Вы можете проверить изменение, проверив статус:

  1. sudo ufw status

Вывод этой команды покажет, что HTTP-трафик разрешен:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

С добавлением нового правила брандмауэра вы можете проверить, запущен ли сервер, обратившись к доменному имени вашего сервера или общедоступному IP-адресу в веб-браузере.

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

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Это распечатает несколько IP-адресов. Вы можете попробовать каждый из них в своем веб-браузере.

В качестве альтернативы вы можете проверить, какой IP-адрес доступен для просмотра из других мест в Интернете:

  1. curl -4 icanhazip.com

Введите полученный адрес в веб-браузере, и вы попадете на целевую страницу Nginx по умолчанию:

http://server_domain_or_IP

Если вы получили веб-страницу с надписью «Добро пожаловать в nginx», значит, вы успешно установили Nginx.

Шаг 2 – Установка MySQL для управления данными сайта

Теперь, когда у вас есть веб-сервер, вам нужно установить MySQL (система управления базами данных) для хранения и управления данными вашего сайта.

Установите MySQL, введя следующую команду:

  1. sudo apt install mysql-server

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

Для обеспечения безопасности установки MySQL поставляется со сценарием, который спросит, хотите ли вы изменить некоторые небезопасные значения по умолчанию. Запустите скрипт, введя следующее:

  1. sudo mysql_secure_installation

Этот сценарий спросит, хотите ли вы настроить ПЛАГИНУ ПРОВЕРКИ ПАРОЛЯ.

Предупреждение. Включение этой функции является оценочным вызовом. Если этот параметр включен, пароли, не соответствующие указанным критериям, будут отклонены MySQL с ошибкой. Это вызовет проблемы, если вы используете слабый пароль в сочетании с программным обеспечением, которое автоматически настраивает учетные данные пользователя MySQL, таким как пакеты Ubuntu для phpMyAdmin. Безопасно оставить проверку отключенной, но всегда следует использовать надежные уникальные пароли для учетных данных базы данных.

Ответьте Y, если да, или что-нибудь еще, чтобы продолжить без включения.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

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

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Далее вас попросят ввести и подтвердить пароль root:

Please set the password for root here.

New password:

Re-enter new password:

Для остальных вопросов вы должны нажать Y и нажимать клавишу ENTER при каждом запросе. Это удалит некоторых анонимных пользователей и тестовую базу данных, отключит удаленный вход в систему root и загрузит эти новые правила, чтобы MySQL немедленно учитывал внесенные нами изменения.

Обратите внимание, что в системах Ubuntu, работающих под управлением MySQL 5.7 (и более поздних версий), пользователь root MySQL по умолчанию настроен на аутентификацию с помощью подключаемого модуля auth_socket, а не с помощью пароля. Это позволяет во многих случаях повысить безопасность и удобство использования, но также может усложнить ситуацию, когда вам нужно разрешить внешней программе (например, phpMyAdmin) доступ к пользователю.

Если использование подключаемого модуля auth_socket для доступа к MySQL соответствует вашему рабочему процессу, вы можете перейти к шагу 3. Однако, если вы предпочитаете использовать пароль при подключении к MySQL с правами root, вам потребуется переключить его метод аутентификации с auth_socket на mysql_native_password. Для этого откройте командную строку MySQL с вашего терминала:

  1. sudo mysql

Затем проверьте, какой метод аутентификации использует каждая из ваших учетных записей пользователей MySQL, с помощью следующей команды:

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

Этот пример демонстрирует, что пользователь root действительно проходит аутентификацию с помощью подключаемого модуля auth_socket. Чтобы настроить учетную запись root для аутентификации с помощью пароля, выполните следующую команду ALTER USER. Обязательно измените пароль на надежный пароль по вашему выбору:

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Затем запустите FLUSH PRIVILEGES, чтобы указать серверу перезагрузить таблицы разрешений и применить ваши новые изменения:

  1. FLUSH PRIVILEGES;

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

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

Этот пример выходных данных показывает, что пользователь root MySQL теперь аутентифицируется с использованием пароля. Как только вы подтвердите это на своем собственном сервере, вы можете выйти из оболочки MySQL:

  1. exit

Примечание. После настройки корневого пользователя MySQL для аутентификации с помощью пароля вы больше не сможете получить доступ к MySQL с помощью команды sudo mysql, использовавшейся ранее. Вместо этого вы должны запустить следующее:

  1. mysql -u root -p

После ввода установленного пароля вы получите приглашение MySQL.

На этом этапе ваша система базы данных настроена, и вы можете перейти к установке PHP.

Шаг 3 — Установка PHP и настройка Nginx для использования процессора PHP

Nginx теперь установлен для обслуживания ваших страниц, а MySQL установлен для хранения и управления вашими данными. Однако у вас по-прежнему нет ничего, что могло бы генерировать динамический контент. Здесь в игру вступает PHP.

Поскольку Nginx не содержит встроенной обработки PHP, как некоторые другие веб-серверы, вам необходимо установить php-fpm, что означает «менеджер процессов fastCGI». После этого вы скажете Nginx передать PHP запросы к этому программному обеспечению для обработки.

Примечание. В зависимости от вашего облачного провайдера вам может потребоваться добавить репозиторий universe Ubuntu, который включает бесплатное программное обеспечение с открытым исходным кодом, поддерживаемое сообществом Ubuntu, перед установкой php-fpm пакет. Вы можете сделать это, введя следующую команду:

  1. sudo add-apt-repository universe

Установите модуль php-fpm вместе с дополнительным вспомогательным пакетом, php-mysql, который позволит PHP взаимодействовать с серверной частью вашей базы данных. При установке будут загружены необходимые файлы ядра PHP. Сделайте это, введя следующее:

  1. sudo apt install php-fpm php-mysql

Даже если все необходимые компоненты стека LEMP установлены, вам все равно нужно внести несколько изменений в конфигурацию, чтобы указать Nginx использовать процессор PHP для динамического контента.

Это делается на уровне блоков серверов (блоки серверов аналогичны виртуальным хостам Apache). Для этого создайте новый файл конфигурации блока сервера с помощью предпочитаемого вами текстового редактора в каталоге /etc/nginx/sites-available/. В этом примере мы будем использовать nano, а в новом файле конфигурации блока сервера будет указано your_domain, поэтому вы можете заменить его своей собственной информацией:

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

Создав новый файл конфигурации блока сервера, а не редактируя файл по умолчанию, вы сможете восстановить конфигурацию по умолчанию, если вам когда-либо понадобится.

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

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name your_domain;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

Вот что делает каждая директива и блок местоположения:

  • listen — определяет, какой порт Nginx будет прослушивать. В этом случае он будет прослушивать порт 80, порт по умолчанию для HTTP.
  • root — определяет корневой каталог документа, в котором хранятся файлы, обслуживаемые веб-сайтом.
  • index — настраивает Nginx для приоритетного обслуживания файлов с именем index.php при запросе индексного файла, если он доступен.
  • server_name — определяет, какой серверный блок следует использовать для данного запроса к вашему серверу. Укажите в этой директиве доменное имя или общедоступный IP-адрес вашего сервера.
  • location / — первый блок location включает директиву try_files, которая проверяет наличие файлов, соответствующих запросу URI. Если Nginx не может найти соответствующий файл, он вернет ошибку 404.
  • location ~ \.php$ — этот блок location обрабатывает фактическую обработку PHP, указывая Nginx на файл конфигурации fastcgi-php.conf и php7. .2-fpm.sock, в котором указывается, какой сокет связан с php-fpm.
  • location ~ /\.ht — последний блок location имеет дело с файлами .htaccess, которые Nginx не обрабатывает. При добавлении директивы deny all, если какие-либо файлы .htaccess попадут в корень документа, они не будут показываться посетителям.

После добавления этого содержимого сохраните и закройте файл. Если вы используете nano, вы можете сделать это, нажав CTRL + X, затем Y и ENTER. Включите новый блок сервера, создав символическую ссылку из файла конфигурации нового блока сервера (в каталоге /etc/nginx/sites-available/) на /etc/nginx/sites- каталог enable/:

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

Затем отсоедините файл конфигурации по умолчанию от каталога /sites-enabled/:

  1. sudo unlink /etc/nginx/sites-enabled/default

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

  1. sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

Проверьте новый файл конфигурации на наличие синтаксических ошибок:

  1. sudo nginx -t

Если сообщается о каких-либо ошибках, вернитесь и перепроверьте файл, прежде чем продолжить.

Когда будете готовы, перезагрузите Nginx, чтобы внести необходимые изменения:

  1. sudo systemctl reload nginx

На этом установка и настройка вашего стека LEMP завершена. Однако разумно подтвердить, что все компоненты могут взаимодействовать друг с другом.

Шаг 4 — Создание файла PHP для проверки конфигурации

Теперь ваш стек LEMP должен быть полностью настроен. Вы можете протестировать его, чтобы убедиться, что Nginx может правильно передавать файлы .php процессору PHP.

Для этого с помощью предпочитаемого вами текстового редактора создайте тестовый PHP-файл с именем info.php в корне документа:

  1. sudo nano /var/www/html/info.php

Введите следующие строки в новый файл. Это действительный код PHP, который вернет информацию о вашем сервере:

<?php
phpinfo();

Когда вы закончите, сохраните и закройте файл.

Теперь вы можете посетить эту страницу в своем веб-браузере, посетив доменное имя вашего сервера или общедоступный IP-адрес, а затем /info.php:

http://your_server_domain_or_IP/info.php

Ваш браузер загрузит сгенерированную PHP веб-страницу, подобную следующей, с информацией о вашем сервере:

Если ваша страница соответствует описанию, вы успешно настроили обработку PHP с помощью Nginx.

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

А пока удалите файл:

  1. sudo rm /var/www/html/info.php

Таким образом, у вас есть полностью настроенный и работающий стек LEMP на вашем сервере Ubuntu 18.04.

Заключение

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

Отсюда можно сделать ряд следующих шагов. Например, вы должны убедиться, что соединения с вашим сервером защищены. С этой целью вы можете защитить свою установку Nginx с помощью Let’s Encrypt. Следуя этому руководству, вы получите бесплатный сертификат TLS/SSL для своего сервера, позволяющий ему обслуживать контент по протоколу HTTPS.