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

Установите Nginx, MySQL, PHP (стек LEMP) в Ubuntu 20.04 LTS.


В нашем предыдущем руководстве мы обсуждали, как установить стек LAMP на сервере Ubuntu 20.04 LTS. В этом уроке мы увидим, как установить Nginx, MySQL, PHP (стек LEMP) на серверную версию Ubuntu 20.04 LTS. LEMP — это аббревиатура от Linux, Engine-x, MariaDB/MySQL, ПХП/Пэрл/Пайтон.

Установите Nginx, MySQL, PHP (стек LEMP) в Ubuntu 20.04 LTS.

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

  • Операционная система: сервер Ubuntu 20.04 LTS.
  • IP-адрес: 192.168.225.52/24

Давайте начнем.

1. Установите Nginx в Ubuntu

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

sudo apt install nginx

После установки Nginx проверьте, запущена ли служба Nginx, с помощью команды:

sudo systemctl status nginx

Пример вывода:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:13:47 UTC; 56s ago
       Docs: man:nginx(8)
   Main PID: 1349 (nginx)
      Tasks: 2 (limit: 2283)
     Memory: 4.4M
     CGroup: /system.slice/nginx.service
             ├─1349 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─1350 nginx: worker process

May 29 10:13:46 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
May 29 10:13:47 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.

Если вы видите вывод, подобный приведенному выше, служба Nginx запущена.

Если служба Nginx еще не запущена, вы можете запустить ее с помощью команды:

sudo systemctl enable nginx
sudo systemctl start nginx

1.1 Разрешить веб-сервер Nginx через брандмауэр UFW

UFW, означает Uncomplexed Firewall, представляет собой программу для управления брандмауэром netfilter, предназначенную для легко использовать. UFW доступен по умолчанию во всех версиях Ubuntu.

По умолчанию доступ к веб-браузеру Nginx из удаленных систем невозможен, если вы включили брандмауэр UFW в Ubuntu 20.04 LTS. Вы должны разрешить порты http и https, выполнив действия, указанные ниже.

Сначала посмотрим, какие приложения установили профиль с помощью команды:

sudo ufw app list

Пример вывода:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Как видите, в приложениях Nginx и OpenSSH установлены профили UFW.

Если вы заглянете в профиль “Nginx Full”, то увидите, что он разрешает трафик на порты 80 и 443:

sudo ufw app info "Nginx Full"

Пример вывода:

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
80,443/tcp

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

sudo ufw allow in "Nginx Full"

Вы увидите результат, подобный приведенному ниже:

Rules updated
Rules updated (v6)

Если вы хотите разрешить трафик https, но только трафик http (80), выполните:

sudo ufw app info "Nginx HTTP"

Давайте продолжим и запустим тестовую страницу Nginx.

Для этого откройте веб-браузер и перейдите по адресу http://localhost/ или http://IP-адрес/.

Вы увидите страницу приветствия Nginx, как показано ниже.

Поздравляем! Сервер Nginx работает!

2. Установите MySQL в Ubuntu

Чтобы установить MySQL в Ubuntu, запустите:

sudo apt install mysql-server

Проверьте, запущена ли служба MySQL или нет, используя команду:

sudo systemctl status mysql

Пример вывода:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:31:56 UTC; 51s ago
   Main PID: 2288 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 2283)
     Memory: 325.6M
     CGroup: /system.slice/mysql.service
             └─2288 /usr/sbin/mysqld

May 29 10:31:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 10:31:56 ubuntuserver systemd[1]: Started MySQL Community Server.

Как вы видите в приведенном выше выводе, MySQL работает!

2.1 Настройка пароля администратора базы данных (root) для Mysql

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

sudo mysql_secure_installation

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

Если ваш ответ Да, вам будет предложено выбрать уровень проверки пароля.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

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 y

Доступные проверки пароля: низкая, средняя и сильная. Просто введите соответствующее число (0 для низкого пароля, 1 для среднего и 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: 0

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

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

После того, как вы введете пароль дважды, вы увидите надежность пароля (в нашем случае это 100). Если вас это устраивает, нажмите Y, чтобы продолжить использование предоставленного пароля. Если длина пароля вас не устраивает, нажмите любую другую клавишу и установите надежный пароль. Меня устраивает мой текущий пароль, поэтому я выбрал y.

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

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Сделанный! Мы установили пароль пользователя root MySQL.

2.2 Изменение метода аутентификации для root-пользователя MySQL

По умолчанию root-пользователь MySQL настроен на аутентификацию с использованием плагина "auth_socket", начиная с MySQL 5.7 и более поздних версий в Ubuntu. Несмотря на то, что это повышает безопасность, это также усложняет ситуацию при доступе к серверу базы данных с помощью любых внешних программ, например phpMyAdmin. Чтобы устранить эту проблему, вам необходимо изменить метод аутентификации с auth_socket на "caching_sha2_password" или "mysql_native_password".

Начиная с версии MySQL 8.0, предпочтительным плагином аутентификации по умолчанию является caching_sha2_password. Плагин аутентификации caching_sha2_password обеспечивает более безопасное шифрование паролей, чем плагин mysql_native_password.

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

sudo mysql

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

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Пример вывода:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�o@>.@320vBX9Agb0kvpTpyiqIsh6XlD0UqNXLcl3KLzp46.Le. | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Как видите, пользователь root MySQL использует плагин auth_socket для аутентификации.

Чтобы изменить плагин auth_socket на caching_sha2_password, выполните следующую команду в командной строке mysql. Если вы включили плагин ПРОВЕРИТЬ ПАРОЛЬ, убедитесь, что вы использовали надежный пароль в соответствии с текущими требованиями политики. Строгая буква должна состоять как минимум из 8 символов, включая прописную букву, строчную букву, цифру и специальный символ.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

Замените "Password123#@!" на надежный и уникальный пароль по вашему выбору в приведенной выше команде.

Обновите изменения с помощью команды:

mysql> FLUSH PRIVILEGES;

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

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Пример вывода:

Хороший! Теперь пользователь root myql может пройти аутентификацию с использованием пароля для доступа к оболочке mysql.

Выход из командной строки MySQL:

mysql> exit

Примечание:

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

Чтобы перейти на плагин mysql_native_password, выполните следующую команду в командной строке mysql.

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

Обновите изменения с помощью команды:

mysql> FLUSH PRIVILEGES;

Теперь проверьте еще раз, изменен ли метод аутентификации или нет, с помощью команды:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Пример вывода:

Выйдите из командной строки MySQL, введя следующую команду:

exit

3. Установите PHP в Ubuntu

Чтобы установить PHP, запустите:

sudo apt-get install php-fpm php-mysql

После установки PHP нам необходимо защитить его, внеся простое изменение в файл php.ini.

Для этого отредактируйте файл php.ini в своем любимом редакторе:

sudo vi /etc/php/7.4/fpm/php.ini

Найдите следующую строку:

;cgi.fix_pathinfo=1

Раскомментируйте его и измените его значение с 1 на 0 (ноль).

cgi.fix_pathinfo=0

Сохраните и закройте файл. Затем перезапустите службу PHP-FPM, чтобы изменения вступили в силу.

sudo systemctl restart php7.4-fpm

Проверьте, запущена или нет служба PHP-FPM, используя команду:

sudo systemctl status php7.4-fpm

Пример вывода:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: en>
     Active: active (running) since Fri 2020-05-29 10:40:45 UTC; 11s ago
       Docs: man:php-fpm7.4(8)
    Process: 10711 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/ph>
   Main PID: 10693 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 2283)
     Memory: 7.0M
     CGroup: /system.slice/php7.4-fpm.service
             ├─10693 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─10709 php-fpm: pool www
             └─10710 php-fpm: pool www

May 29 10:40:44 ubuntuserver systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
May 29 10:40:45 ubuntuserver systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

3.1 Настройте Nginx для использования PHP-FPM

Нам нужно настроить Nginx для использования PHP-FPM.

Для этого отредактируйте файл виртуального хоста Nginx по умолчанию (блок сервера) /etc/nginx/sites-available/default :

sudo vi /etc/nginx/sites-available/default

Найдите раздел «Сервер» и установите полное доменное имя или IP-адрес вашего сервера Ubuntu, как показано ниже. А также дважды проверьте, добавили ли вы строку index.php. Все изменения показаны жирным шрифтом.

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

[...]

root /var/www/html;

 # Add index.php to the list if you are using PHP
 index index.php index.html index.htm index.nginx-debian.html;

 server_name 192.168.225.52;
[...]

Здесь,

  • слушать 80; -> слушать ipv4.
  • listen [::]:80 default_server ; -> слушать ipv6.
  • index.php -> Добавьте это, если вы используете PHP.
  • root /var/www/html; -> корневой каталог документов Nginx.
  • имя_сервера 192.168.225.52; -> IP-адрес нашего сервера Ubuntu.

Затем прокрутите немного вниз и найдите раздел "#location ~ \.php$" .

Раскомментируйте и измените следующие строки, как показано ниже.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# With php-cgi (or other tcp sockets):
fastcgi_pass 127.0.0.1:9000;
}
deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
 deny all;
 }
}

См. следующий снимок экрана. Изменения отмечены/подчеркнуты красным цветом.

Сохраните и выйдите из файла.

Будьте внимательны при изменении директивы fastcgi_pass в блоке location ~ \.php$. Вы должны указать правильное имя файла и то, что на самом деле хранится в каталоге /var/run/php на вашем сервере. Чтобы проверить это, запустите:

$ ls /var/run/php/
php-fpm.sock php7.4-fpm.pid php7.4-fpm.sock

Как видите, имя файла — php7.4-fpm.sock. Убедитесь, что вы упомянули правильное имя в этой директиве.

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

sudo nginx -t

Пример вывода:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если вы не видите ошибок, перезапустите службу nginx, чтобы изменения вступили в силу.

Для этого запустите:

sudo systemctl restart nginx

Теперь давайте создадим образец PHP-файла для проверки конфигурации PHP через браузер.

Для этого создайте файл с именем «info.php» в корневой папке документа Nginx.

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

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

<?php
phpinfo();
?>

Сохраните и закройте файл. Перезапустите службу nginx, чтобы изменения вступили в силу.

sudo systemctl restart nginx

Затем откройте веб-браузер и перейдите по адресу http://IP-address/info.php.

Вы увидите подробную информацию о PHP.

Поздравляем! PHP работает!!

3.2 Установка модулей PHP

Чтобы улучшить функциональность PHP, вы можете установить некоторые дополнительные модули PHP.

Чтобы просмотреть список доступных модулей PHP, запустите:

sudo apt-cache search php- | less

Пример вывода:

Используйте стрелки и для перемещения вверх и вниз между результатами. Чтобы выйти, введите q.

Чтобы узнать подробности о каком-либо конкретном модуле PHP, например php-gd, запустите:

sudo apt-cache show php-gd

Чтобы установить модуль php, выполните:

sudo apt-get install php-gd

Чтобы установить все модули (хотя это не обязательно), запустите:

sudo apt-get install php*

Не забудьте перезапустить службу Nginx после установки любого модуля php.

Поздравляем! Мы успешно настроили стек LEMP на сервере Ubuntu 20.04 LTS. Начните развертывать веб-сайты и веб-приложения в своем новом веб-стеке LEMP.

Читать далее:

  • Установить phpMyAdmin со стеком LEMP в Ubuntu 20.04 LTS