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

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

Для демонстрации веб-страниц посетителям нашего сайта мы будем использовать современный и эффективный веб-сервер Nginx. Мы будем использовать диспетчер пакетов apt для получения этого программного обеспечения.

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

  • sudo apt update
  • sudo apt install nginx

При получении запроса введите y для подтверждения того, что вы хотите установить nginx. После завершения установки веб-сервер Nginx будет активирован и будет работать на вашем сервере Ubuntu 20.04.

Шаг 2 — Установка MySQL

Мы запустили веб-сервер, и теперь нам нужно установить СУБД, которая может хранить данные вашего сайта и управлять ими. MySQL — популярная СУБД, используемая в средах PHP.

Используйте apt для получения и установки этого программного обеспечения:

  • sudo apt install mysql-server

Для подтверждения установки введите Y, а затем нажмите ENTER.

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

  • sudo mysql_secure_installation

Скрипт предложит настроить плагин VALIDATE PASSWORD PLUGIN.

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

Выберите 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

Вне зависимости от того, будете ли вы использовать плагин VALIDATE PASSWORD PLUGIN, ваш сервер предложит вам выбрать и подтвердить пароль для пользователя root в MySQL. Не нужно путать его с системным пользователем root. Пользователь root базы данных — это пользователь с правами администратора, который имеет все права для работы с системой управления базы данных. Хотя в MySQL метод аутентификации пользователя root по умолчанию не требует использования пароля даже при его наличии, задайте надежный пароль для обеспечения дополнительной безопасности. Чуть дальше мы расскажем об этом подробнее.

Если вы включили использование паролей, вы увидите уровень надежности введенного пароля root, и ваш сервер запросит у вас подтверждение дальнейшего использования этого пароля. Если вас устраивает текущий пароль, введите Y в диалоге для подтверждения:

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

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

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

  • sudo mysql

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

Output
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Для выхода из консоли MySQL введите следующую команду:

  • exit

Обратите внимание, что для подключения под именем пользователя root не требуется вводить пароль, хотя вы и задали его при запуске скрипта mysql_secure_installation. Это происходит, поскольку используемый по умолчанию метод аутентификации для пользователя MySQL с правами администратора — unix_socket, а не password. Хотя это может выглядеть как возможный источник проблем с безопасностью, на самом деле эти действия делают сервер базы данных более защищенным, поскольку единственные пользователи, которые могут выполнять вход в систему с правами доступа root для MySQL — это пользователи системы с привилегиями sudo, подключенные с использованием консоли или через приложение, использующее аналогичные привилегии. На практике это означает, что вы не сможете использовать пользователя root базы данных с правами администратора для подключения из вашего приложения PHP. Настройка пароля учетной записи root MySQL работает как гарантия, если метод аутентификации по умолчанию меняется с unix_socket на password.

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

 

Шаг 3 — Установка PHP

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

Хотя Apache встраивает интерпретатор PHP в каждый запрос, Nginx требуется внешняя программа для обработки PHP и организации моста между самим интерпретатором PHP и веб-сервером. Это позволяет обеспечить более высокую производительность на большинстве веб-сайтов на базе PHP, но для этого необходимо выполнить дополнительную настройку. Вы должны установить php-fpm, т. е. диспетчер процессов PHP fastCGI, и указать Nginx на необходимость передачи запросов PHP данному программному обеспечению. Также вам потребуется php-mysql, модуль PHP, который позволяет PHP взаимодействовать с базами данных MySQL. Ключевые пакеты PHP автоматически будут установлены в качестве зависимостей.

Для установки пакетов php-fpm и php-mysql воспользуйтесь следующей командой:

  • sudo apt install php-fpm php-mysql

При поступлении запроса введите Y и ENTER для подтверждения установки.

Теперь вы установили компоненты PHP. Далее вы настроите Nginx для их использования.

 

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

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

В Nginx на Ubuntu 20.04 по умолчанию включен один серверный блок, настроенный для вывода документов из директории /var/www/html. Хотя это хорошо работает для отдельного сайта, при размещении нескольких сайтов это может доставлять неудобства. Вместо изменения /var/www/html мы создадим внутри /var/www структуру директорий для нашего сайта your_domain, оставив /var/www/html​​​ в качестве директории по умолчанию для вывода в случае, если запросу клиента не соответствуют никакие другие сайты.

Создайте корневую веб-директорию для your_domain следующим образом:

  • sudo mkdir /var/www/your_domain

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

  • sudo chown -R $USER:$USER /var/www/your_domain

После этого откройте новый файл конфигурации в директории Nginx sites-available с помощью любого редактора командной строки. Мы будем использовать nano:

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

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

/etc/nginx/sites-available/your_domain
server {
    listen 80;
    server_name your_domain www.your_domain;
    root /var/www/your_domain;

    index index.html index.htm index.php;

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

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

    location ~ /\.ht {
        deny all;
    }

}

Когда вы закончите редактирование, сохраните и закройте файл. Если вы используете nano, можно ввести CTRL+X, а затем y и ENTER для подтверждения.
Активируйте вашу конфигурацию посредством привязки к файлу конфигурации из директории Nginx sites-enabled:

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

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

  • sudo nginx -t

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

  • sudo systemctl reload nginx