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

Вступление

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

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

Предпосылки

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

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

[[step-1 -–- install-the-nginx-web-server]] == Шаг 1. Установка веб-сервера Nginx

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

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

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

sudo apt update
sudo apt install nginx

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

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

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

Включите это, набрав:

sudo ufw allow 'Nginx HTTP'

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

sudo ufw status

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

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

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

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

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

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

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

curl -4 icanhazip.com

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

http://server_domain_or_IP

Nginx default page

Если вы видите вышеупомянутую страницу, вы успешно установили Nginx.

[[step-2 -–- install-mysql-to-manage-site-data]] == Шаг 2 - Установка MySQL для управления данными сайта

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

Установите MySQL, набрав:

sudo apt install mysql-server

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

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

sudo mysql_secure_installation

Этот сценарий спросит, хотите ли вы настроитьVALIDATE PASSWORD PLUGIN.

[.warning] #Warning: Включение этой функции - это своего рода вызов для суждения. Если этот параметр включен, пароли, не соответствующие указанным критериям, будут отклоняться 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 (и более поздних версий) пользователь MySQLroot настроен на аутентификацию с использованием подключаемого модуляauth_socket по умолчанию, а не с помощью пароля. Это обеспечивает большую безопасность и удобство использования во многих случаях, но также может усложнить ситуацию, когда вам нужно разрешить внешней программе (например, phpMyAdmin) доступ к пользователю.

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

sudo mysql

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

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. Обязательно заменитеpassword на надежный пароль по вашему выбору:

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

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

FLUSH PRIVILEGES;

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

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)

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

exit

[.Примечание]##

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

mysql -u root -p

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

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

[[step-3 -–- install-php-and-configuring-nginx-to-use-the-php-processor]] == Шаг 3 - Установка PHP и настройка Nginx для использования процессора PHP

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

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

[.Примечание]##

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

sudo add-apt-repository universe

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

sudo apt install php-fpm php-mysql

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

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

sudo nano /etc/nginx/sites-available/example.com

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

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

/etc/nginx/sites-available/example.com

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

        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 - определяет, какой блок сервера следует использовать для данного запроса к вашему серверу. Point this directive to your server’s domain name or public IP address.

  • location / - первый блок местоположения включает директивуtry_files, которая проверяет наличие файлов, соответствующих запросу URI. Если Nginx не может найти подходящий файл, он вернет ошибку 404.

  • location ~ \.php$ - этот блок местоположения обрабатывает фактическую обработку PHP, указывая Nginx на файл конфигурацииfastcgi-php.conf и файлphp7.2-fpm.sock, который объявляет, какой сокет связан сphp-fpm.

  • location ~ /\.ht - последний блок местоположения имеет дело с файлами.htaccess, которые Nginx не обрабатывает. Добавив директивуdeny all, если какие-либо файлы.htaccess попадут в корень документа, они не будут обслуживаться посетителям.

После добавления этого содержимого сохраните и закройте файл. Включите новый блок сервера, создав символическую ссылку из файла конфигурации нового блока сервера (в каталоге/etc/nginx/sites-available/) в каталог/etc/nginx/sites-enabled/:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

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

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

[.Примечание]##

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

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

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

sudo nginx -t

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

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

sudo systemctl reload nginx

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

[[step-4 -–- created-a-php-file-to-test-configuration]] == Шаг 4 - Создание файла PHP для проверки конфигурации

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

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

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

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

/var/www/html/info.php

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

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

http://your_server_domain_or_IP/info.php

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

PHP page info

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

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

Сейчас удалите файл, набрав:

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

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

Заключение

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

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

Related