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

Тема в разделе "Хостинг", создана пользователем Транклюкатор, 17 ноя 2023.

  1. Транклюкатор

    Транклюкатор Господин ПЖ

    LEMP — стек технологий, используемый для развертывания веб-приложений. В отличии от LAMP, в LEMP вместо Apache устанавливается Nginx.

    В данной статье описана ручная установка LEMP на Ubuntu 18.04/20.04.

    Установка LEMP Linux в один клик
    LEMP — это набор программного обеспечения, который используется для отображения динамических веб-страниц и веб-приложений. Установка NGINX, MySQL и PHP-FPM на вашем сервере c Ubuntu, менее чем за 30 секунд.

    Сравнение серверов Apache и Nginx
    Apache:

    • Разрабатывается с 1995 года, огромное количество пользователей, многочисленные модули, предназначенные для расширения его функциональности.
    • Медленная работа веб-сервера из-за поточно-ориентированного подхода при большой нагрузке. Необходимость создавать новые процессы и увеличивать объём потребляемой памяти.
    • Необходимость устанавливать ограничения по потребляемым ресурсам. При достижении ограничений новые соединения будут отклонены.
    Nginx:

    • Веб-сервер с открытым исходным кодом, написанный как аналог Apache для решения проблем с производительностью и масштабируемостью.
    • Механизм, управляемый событиями, асинхронный и неблокирующий, не создаёт новые процессы для каждого веб-запроса.
    1 этап. Подготовка сервера
    Все действия по установке производятся на сервере через подключение по SSH.

    Создание пользователя
    Все действия по установке LEMP рекомендуем выполнять не через пользователя root. Рекомендуем создать пользователя с sudo-правами. Так вы дополнительно обезопасите свой сервис и избежите случайных ошибок, которые могут сломать вашу операционную систему.

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

    adduser userName
    Где UserName — имя нового пользователя.

    Система попросит ввести пароль для нового пользователя и дополнительную информацию:

    [​IMG]

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

    usermod -aG sudo UserName
    Где UserName — имя созданного ранее пользователя.

    Готово. Новый пользователь создан. Завершите SSH-сеанс под root и подключитесь к серверу под новым пользователем. Или введите команду:

    su - userName
    Обновление операционной системы
    Прежде чем установить на Ubuntu LEMP, нужно обновить операционную систему до актуального состояния с помощью команды:

    sudo apt-get update && apt-get upgrade -y
    2 этап. Установка Nginx
    Для установки Nginx введите команду:

    sudo apt-get install nginx
    На этом установка закончена. В Ubuntu Nginx настроен на запуск сразу после установки.

    Настройка Nginx
    Для корректной работы Nginx необходимо настроить firewall, открыть порты для подключения к серверу.

    Чтобы открыть доступ для подключения к серверу по HTTP, выполните команды:

    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    sudo iptables-save
    Если вы планируете использовать SSL-сертификат, для подключения по HTTPS выполните команду:

    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    sudo iptables-save
    При переходе по IP-адресу вашего сервера откроется страница Nginx:

    [​IMG]

    Готово. Установка Nginx завершена.

    3 этап. Установка MySQL
    Далее нам необходимо установить систему управления базами данных MySQL.

    1. 1.
      Выполните команду:

      sudo apt-get install mysql-server
    2. 2.
      В зависимости от версии MySQL во время установки вам будет предложено ввести пароль root-пользователя (пароль администратора) сервера баз данных:

      [​IMG]
    Если это окно не появилось, значит настройка MySQL для вашей версии выполняется без пароля. Аутентификация для пользователя root в этом случае происходит при помощи плагина auth_socket. Чтобы проверить способ аутентификации:

    1. 1.
      Запустите MySQL:

      mysql
    2. 2.
      Выполните команду:

      SELECT user,authentication_string,plugin,host FROM mysql.user;
      На экране вы увидите:

      [​IMG]

    3. 3.
      Если у пользователя root в столбце «plugin» указано «auth_socket», значит доступ для этого пользователя выполняется при помощи плагина без пароля.
    Настройка безопасности MySQL
    После того как вы смогли установить MySQL в Ubuntu, выполните скрипт безопасности. Для этого следуйте инструкции:

    1. 1.
      Запустите скрипт командой:

      sudo mysql_secure_installation
    2. 2.
      Введите «Y» и нажмите Enter:

      [​IMG]

      Вам нужно задать допустимую сложность пароля от 0 до 2 при помощи плагина VALIDATE PASSWORD, где:
      • 0 — слабый пароль из 8 и более символов. Использование цифр и специальных символов не обязательно;
      • 1 — средний пароль из 8 и более символов. Обязательно использование цифр и специальных символов;
      • 2 — сложный пароль из 8 и более символов. Обязательное использование цифр и специальных символов и запрет на использование общих фраз.
      Для этого введите нужную цифру и нажмите Enter. Затем задайте и подтвердите пароль. В будущем плагин не позволит использовать пароли, которые не соответствуют уровню, который вы выбрали.

    3. 3.
      На каждом следующем этапе вам нужно ввести «Y» и нажать Enter. Таким образом вы:
      • удалите анонимных пользователей,
      • запретите удалённое подключение для root-пользователя,
      • удалите тестовую базу данных,
      • перезагрузите таблицу привилегий.
    Готово, первоначальная настройка безопасности MySQL выполнена.

    Работа с базой данных
    Для работы с базой данных вам необходимо создать пользователя и саму базу.

    После установки MySQL автоматически будет создан root-пользователь. Работать с базой данных под root небезопасно, поэтому необходимо создать нового пользователя и назначить ему права доступа.

    Запустите сервер базы данных с помощью команды:

    mysql -u root -p
    Система запросит пароль, который был указан при установке MySQL.

    Как создать пользователя
    1. 1.
      Создайте пользователя с помощью команды:

      CREATE USER 'user-name'@'localhost' IDENTIFIED BY 'password';
    2. 2.
      Замените значения внутри кавычек:
      • вместо user-name укажите логин пользователя базы данных;
      • вместо password укажите пароль нового пользователя.
    3. 3.
      Назначьте все права доступа для созданного пользователя:

      GRANT ALL PRIVILEGES ON * . * TO 'user-name'@'localhost';
      Не забудьте изменить user-name на логин, который был указан при создании пользователя.

    4. 4.
      Чтобы изменения вступили в силу, введите команду:

      FLUSH PRIVILEGES;
    Как создать базу данных
    Для создания базы данных введите команду:

    CREATE DATABASE BaseName;
    Где BaseName — это название базы данных.

    Готово. Теперь вы можете удалённо подключиться к базе данных или привязать её к вашему проекту. Чтобы завершить работу с MySQL, нажмите Ctrl + D.

    4 этап. Установка PHP Ubuntu
    Для установки PHP введите команду:

    sudo apt-get install php-fpm php-mysql
    Настройка PHP Ubuntu
    Теперь настройте безопасность интерпретатора, чтобы избежать запуск нежелательных файлов. Для этого откройте файл конфигурации командой:

    • Для Ubuntu 18.04
    sudo nano /etc/php/7.2/fpm/php.ini
    • Для Ubuntu 20.04
    sudo nano /etc/php/7.4/fpm/php.ini
    Если ни одна из команд не подходит, узнайте версию PHP на вашем сервере командой:

    php -v
    Затем выполните команду:

    sudo nano /etc/php/X.X/fpm/php.ini
    Вместо X.X подставьте версию PHP на вашем сервере.

    Найдите в файле параметр cgi.fix_pathinfo, раскомментируйте его, убрав точку с запятой перед ним, и установите значение «0». В редакторе nano вы можете воспользоваться поиском по файлу клавишей F6.

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

    Сохраните изменения в файле и закройте его:

    [​IMG]

    Перезапустите PHP командой:

    • Для Ubuntu 18.04
    sudo systemctl restart php7.2-fpm
    • Для Ubuntu 20.04
    sudo systemctl restart php7.4-fpm
    Как установить PHP 8
    На данный момент в официальных репозиториях Ubuntu нет PHP версии 8. Чтобы установить эту версию:

    1. 1.
      Установите программу для управления APT-пакетами:

      sudo apt install software-properties-common
    2. 2.
      Добавьте необходимый репозиторий:

      sudo add-apt-repository ppa:eek:ndrej/php
    3. 3.
      Нажмите Enter, чтобы продолжить.
    4. 4.
      Установите PHP 8.0:

      apt install php8.0-mysql php8.0-fpm
    Готово, PHP 8 установлен на ваш сервер.

    Как выбрать версию PHP по умолчанию в Ubuntu
    Если на вашем сервере установлено несколько версий PHP, вы можете выбрать одну из них в качестве версии, которая будет использоваться по умолчанию. Для этого:

    1. 1.
      Выполните команду:

      sudo update-alternatives --config php
    2. 2.
      На экране вы увидите список установленных версий. Версия по умолчанию будет отмечена звёздочкой:

      [​IMG]

      Нажмите Enter, чтобы оставить текущую версию. Или введите порядковый номер другой версии, которую хотите установить по умолчанию.
    Готово, версия по умолчания установлена.

    5 этап. Настройка Nginx и связь с PHP
    Далее необходимо настроить Nginx для использования обработчика PHP и отображения динамического контента.

    Если вы настраивали виртуальные хосты на Apache, то логика примерно одинаковая, только вместо VirtualHost будут блоки server.

    Откройте дефолтный файл конфигурации Nginx командой:

    sudo nano /etc/nginx/sites-available/default
    В файле вы увидите блок server с примерным содержанием:

    server {

    listen 80 default_server;

    listen [::]:80 default_server;



    # SSL configuration

    # listen 443 ssl default_server;

    # listen [::]:443 ssl default_server;


    root /var/www/html;

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

    server_name _;

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

    #location ~ \.php$ {
    # include snippets/fastcgi-php.conf;
    # fastcgi_pass 127.0.0.1:9000;
    # fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    #}

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

    }
    В данный файл внесите следующие изменения:

    • В строке, где указана директива index добавьте обработку индексного файла index.php.
    • В директиве server_name вы можете указать имя своего домена (если он привязан к серверу) или IP-адрес сервера.
    • Раскомментируйте блок location ~\.php$ и строки, которые входят в него, кроме fastcgi_pass 127.0.0.1:9000;. Данный блок отвечает за обработку PHP-запросов.
    • Раскомментируйте блок location ~ /\.ht и строку внутри, он отвечает за работу с файлами .htaccess.
    Сохраните изменения и закройте файл. Результат:

    [​IMG]

    Чтобы проверить файл на наличие ошибок, выполните команду:

    sudo nginx -t
    Если система выдала сообщение о наличии ошибок, исправьте их перед тем, как следовать инструкции дальше.

    Затем перезагрузите Nginx командой:

    sudo systemctl reload nginx
    Готово. Nginx и связь с PHP настроена. Далее вы можете проверить корректность работы сервера.

    Проверка настроек
    Для проверки работы PHP введите команду:

    sudo bash -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'
    Затем перейдите по адресу 123.123.123.123/info.php (где 123.123.123.123 — IP-адрес вашего сервера) или введите домен, который указали на этапе «Настройка Nginx и связь с PHP».

    Откроется страница с информацией о настройках веб-сервера PHP:

    [​IMG]

    Важно! После проверки обязательно удалите этот файл, иначе любой пользователь сможет получить доступ к конфиденциальной информации о сервере.

    Готово.