One place for hosting & domains

      стека

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


      Введение

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

      Это руководство рассказывает, как установить стек LEMP на сервер Ubuntu 20.04. Операционная система Ubuntu обеспечивает выполнение первого требования. Далее мы расскажем, как настроить и запустить все остальные компоненты.

      Предварительные требования

      Для выполнения настоящего обучающего руководства вам понадобится доступ к серверу Ubuntu 20.04 в качестве обычного non-root user с привилегиями sudo, а на вашем сервере должен быть включен брандмауэр. Чтобы выполнить настройку, воспользуйтесь руководством по первоначальной настройке сервера Ubuntu 20.04.

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

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

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

      • sudo apt update
      • sudo apt install nginx

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

      Если у вас включен брандмауэр ufw, как рекомендуется в руководстве по первоначальной настройке сервера, вам нужно разрешить подключение к Nginx. После установки Nginx регистрирует несколько разных профилей приложений UFW. Чтобы проверить, какие из профилей UFW доступны, выполните команду:

      Output

      Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

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

      Для этого введите следующее:

      • sudo ufw allow 'Nginx HTTP'

      Для проверки изменения используйте команду:

      Результат выполнения этой команды покажет, что трафик 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-адрес вашего сервера, вы можете найти его, введя в терминал следующую команду:

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

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

      Также вы можете проверить доступность IP-адреса из других мест в интернете:

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

      http://server_domain_or_IP
      

      Страница Nginx по умолчанию

      Если вы видите эту страницу, значит, вы успешно установили Nginx и активировали трафик HTTP для вашего веб-сервера.

      Шаг 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 user в MySQL. Не нужно путать его с системным пользователем root. root user базы данных — это пользователь с правами администратора, который имеет все права для работы с системой управления базы данных. Хотя в MySQL метод аутентификации root user по умолчанию не требует использования пароля даже при его наличии, задайте надежный пароль для обеспечения дополнительной безопасности. Чуть дальше мы расскажем об этом подробнее.

      Если вы включили использование паролей, вы увидите уровень надежности введенного пароля 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, набрав следующую команду:

      В результате будет установлено подключение к серверу 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 введите следующую команду:

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

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

      Примечание. На момент написания этого руководства родная библиотека MySQL PHP mysqlnd не поддерживает caching_sha2_authentication, метод аутентификации MySQL 8 по умолчанию. Поэтому при создании пользователей базы данных для приложений PHP на MySQL 8 вам нужно убедиться, что вместо этого пароля они настроены на использование mysql_native_password. Мы расскажем об этом в шаге 6.

      Теперь ваш сервер MySQL установлен и защищен. Далее мы выполним установку PHP, последнего компонента стека LEMP.

      Шаг 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;
          }
      
      }
      
      
      

      Ниже описано действие этих директив и блоков расположения:

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

      Когда вы закончите редактирование, сохраните и закройте файл. Если вы используете nano, можно ввести CTRL+X, а затем y и ENTER для подтверждения.

      Активируйте вашу конфигурацию посредством привязки к файлу конфигурации из директории Nginx sites-enabled:

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

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

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

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

      • sudo systemctl reload nginx

      Теперь ваш новый веб-сайт активен, но корневая веб-директория /var/www/your_domain все еще пуста. Создайте файл index.html в этом расположении, чтобы убедиться, что веб-сервер работает, как ожидалось:

      • nano /var/www/your_domain/index.html

      Внесите в файл следующее:

      /var/www/your_domain/index.html

      <html>
        <head>
          <title>your_domain website</title>
        </head>
        <body>
          <h1>Hello World!</h1>
      
          <p>This is the landing page of <strong>your_domain</strong>.</p>
        </body>
      </html>
      

      Теперь откройте браузер и получите доступ к доменному имени сервера или IP-адресу, как указано в директиве server_name в файле конфигурации вашего серверного блока:

      http://server_domain_or_IP
      

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

      Серверный блок Nginx

      Если вы видите эту страницу, это означает, что ваш серверный блок Nginx работает, как и ожидалось.

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

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

      Шаг 5 — Тестирование PHP с помощью Nginx

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

      Вы можете сделать это, создав тестовый файл PHP в корневой директории документов. Откройте в своем текстовом редакторе новый файл с именем info.php внутри корневой директории документов:

      • nano /var/www/your_domain/info.php

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

      /var/www/your_domain/info.php

      <?php
      phpinfo();
      

      После завершения сохраните и закройте файл с помощью команды CTRL+X, а затем введите y и ENTER для подтверждения.

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

      http://server_domain_or_IP/info.php
      

      Вы увидите веб-страницу, содержащую подробную информацию о вашем сервере:

      PHPInfo Ubuntu 20.04

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

      • sudo rm /var/www/your_domain/info.php

      При необходимости вы всегда сможете восстановить этот файл.

      Шаг 6 — Тестирование подключения к базе данных для PHP (необязательно)

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

      На момент написания этого руководства родная библиотека MySQL PHP mysqlnd не поддерживает caching_sha2_authentication, метод аутентификации по умолчанию для MySQL 8. Мы должны создать нового пользователя с помощью метода аутентификации mysql_native_password для подключения к базе данных MySQL из PHP.

      Мы создадим базу данных с именем example_database и пользователя с именем example_user, но вы можете использовать и другие имена.

      Вначале необходимо подключиться к консоли MySQL с помощью учетной записи root:

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

      • CREATE DATABASE example_database;

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

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

      • CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

      Теперь нам нужно предоставить этому пользователю разрешение для базы данных example_database:

      • GRANT ALL ON example_database.* TO 'example_user'@'%';

      В результате пользователь example_user получит полный набор привилегий для базы данных example_database, но не будет обладать возможностью создания или изменения других баз данных на сервере.

      Теперь закройте оболочку MySQL:

      Вы можете проверить наличие у нового пользователя необходимых разрешений, выполнив повторный вход в консоль MySQL, на этот раз используя учетные данные вашего собственного пользователя:

      Обратите внимание на флаг -p в этой команде, который будет запрашивать пароль, который вы задаете при создании пользователя example_user. После входа в консоль MySQL убедитесь, что у вас есть доступ к базе данных example_database:

      Результат будет выглядеть следующим образом:

      Output

      +--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

      Далее мы создадим тестовую таблицу с именем todo_list. Из консоли MySQL запустите следующее выражение:

      • CREATE TABLE example_database.todo_list (
      • item_id INT AUTO_INCREMENT,
      • content VARCHAR(255),
      • PRIMARY KEY(item_id)
      • );

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

      • INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

      Чтобы подтвердить, что данные были успешно сохранены в таблицу, запустите следующую команду:

      • SELECT * FROM example_database.todo_list;

      Вывод должен выглядеть так:

      Output

      +---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

      Убедившись в том, что у вас есть надлежащие данные в тестовой таблице, вы можете закрыть консоль MySQL:

      Теперь вы можете создать скрипт PHP, который будет подключаться к MySQL и запрашивать ваше содержимое. Создайте новый файл PHP в пользовательской корневой веб-директории в предпочитаемом вами редакторе. Мы будем использовать nano:

      • nano /var/www/your_domain/todo_list.php

      Следующий скрипт PHP подключается к базе данных MySQL и запросам по содержимому таблицы todo_list, выводя результаты в список. Если существует проблема подключения к базе данных, будет выдана ошибка. Скопируйте это содержимое в скрипт todo_list.php:

      /var/www/your_domain/todo_list.php

      <?php
      $user = "example_user";
      $password = "password";
      $database = "example_database";
      $table = "todo_list";
      
      try {
        $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
        echo "<h2>TODO</h2><ol>";
        foreach($db->query("SELECT content FROM $table") as $row) {
          echo "<li>" . $row['content'] . "</li>";
        }
        echo "</ol>";
      } catch (PDOException $e) {
          print "Error!: " . $e->getMessage() . "<br/>";
          die();
      }
      

      Сохраните и закройте файл после завершения редактирования.

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

      http://server_domain_or_IP/todo_list.php
      

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

      Пример списка дел PHP

      Это означает, что ваша среда PHP готова к подключению и взаимодействию с вашим сервером MySQL.

      Заключение

      С помощью этого руководства мы создали гибкую основу для обслуживания веб-сайтов PHP и приложений для ваших посетителей, используя Nginx в качестве веб-сервера и MySQL в качестве системы управления базы данных.

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



      Source link

      Установка стека Linux, Nginx, MySQL, PHP (LEMP) в CentOS 8 [Краткое руководство]


      Введение

      В этом руководстве вы установите стек LEMP на сервер с CentOS 8. Хотя MySQL доступен в используемых по умолчанию репозиториях в CentOS 8, в этом руководстве мы рассмотрим процесс настройки стека LEMP с MariaDB в качестве системы управления базами данных.

      Более подробную версию этого обучающего руководства с подробным описанием каждого шага см. в статье Установка стека Linux, Nginx, MySQL, PHP (LEMP) в CentOS 8.

      Предварительные требования

      Для выполнения этого руководства вам потребуется доступ к серверу CentOS 8 с пользователем с правами sudo.

      Шаг 1 — Установка Nginx

      Установите пакет nginx с помощью следующей команды:

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

      • sudo systemctl start nginx

      Если брандмауэр firewalld активен, вам потребуется запустить следующую команду, чтобы разрешить внешний доступ к порту 80 (HTTP):

      • sudo firewall-cmd --permanent --add-service=http

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

      • sudo firewall-cmd --reload

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

      Страница Nginx по умолчанию в CentOS 8

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

      Теперь мы установим MariaDB, разработанную энтузиастами версию оригинального сервера MySQL от Oracle. Для установки данного ПО запустите следующую команду:

      • sudo dnf install mariadb-server

      После завершения установки активируйте и запустите сервер MariaDB с помощью следующей команды:

      • sudo systemctl start mariadb

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

      • sudo mysql_secure_installation

      В первом диалоге вам нужно будет ввести пароль пользователя root для текущей базы данных. Поскольку вы только что установили MariaDB и еще не меняли параметры конфигурации, пароль будет пустым, так что вам достаточно нажать ENTER в этом диалоге.

      В следующем диалоге вам будет предложено задать пароль для пользователя root базы данных. Поскольку MariaDB использует специальный метод аутентификации для пользователя root, который, как правило, отличается большей безопасностью по сравнению с аутентификацией по паролю, вам не нужно настраивать его в данный момент. Введите N и нажмите ENTER.

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

      После выполнения указанных выше действий выполните вход в консоль MariaDB с помощью следующей команды:

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

      Output

      Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. MariaDB [(none)]>

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

      • CREATE DATABASE example_database;

      Теперь вы можете создать нового пользователя и предоставить ему полный набор прав для только что созданной вами базы данных:

      • GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

      Очистите привилегии, чтобы они были сохранены и доступны в текущем сеансе:

      После этого закройте оболочку MariaDB:

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

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

      • sudo dnf install php-fpm php-mysqlnd

      После завершения установки вам потребуется изменить файл /etc/php-fpm.d/www.conf, чтобы задать несколько параметров. Мы установим nano для упрощения процесса редактирования этих файлов:

      Теперь откройте файл конфигурации /etc/php-fpm.d/www.conf с помощью nano или другого выбранного вами редактора:

      • sudo nano /etc/php-fpm.d/www.conf

      Найдите директивы user и group. Если вы используете nano, вы можете нажать CTRL+W для поиска этих терминов в открытом файле. Обязательно измените оба значения с apache на nginx:

      /etc/php-fpm.d/www.conf

      …
      ; RPM: apache user chosen to provide access to the same directories as httpd
      user = nginx
      ; RPM: Keep a group allowed to write in log dir.
      group = nginx

      Сохраните и закройте файл после завершения редактирования.

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

      • sudo systemctl start php-fpm

      Перезапустите веб-сервер Nginx, чтобы он смог использовать файлы конфигурации, созданные при установке php-fpm:

      • sudo systemctl restart nginx

      Шаг 4 — Тестирование PHP с помощью Nginx

      В CentOS 8 при установке php-fpm по умолчанию автоматически создаются файлы конфигурации, которые позволят вашему веб-серверу Nginx обрабатывать файлы .php в корневой директории документов по умолчанию, расположенной в /usr/share/nginx/html. Вам не потребуется вносить какие-либо изменения в конфигурацию Nginx для обеспечения корректной работы PHP на вашем веб-сервере.

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

      • sudo chown -R sammy.sammy /usr/share/nginx/html/

      Создайте новый файл PHP с именем info.php в директории /usr/share/nginx/html:

      • nano /usr/share/nginx/html/info.php

      Следующий код PHP будет отображать информацию о текущей среде PHP, которая запущена на сервере:

      /usr/share/nginx/html/info.php

      <?php
      
      phpinfo();
      

      Скопируйте это содержимое в ваш файл info.php и не забудьте сохранить изменения после завершения редактирования.

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

      http://server_host_or_IP/info.php
      

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

      Отображаемая по умолчанию страница с данными PHP в CentOS 8

      Другие обучающие руководства

      Ниже представлены ссылки на более подробные материалы, связанные с настоящим обучающим руководством:



      Source link

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


      Введение

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

      За слой базы данных в стеке LEMP обычно отвечает сервер базы данных MySQL, но до выхода CentOS 8 сервер MySQL не был доступен в репозиториях CentOS по умолчанию. В результате MariaDB, разработанное сообществом энтузиастов ответвление MySQL, получило широкое распространение в качестве альтернативы MySQL и используемой по умолчанию системы управления базами данных при использовании стека LEMP на серверах CentOS. MariaDB представляет собой упрощенную замену оригинального сервера MySQL, что на практике означает, что вы можете переключаться на MariaDB без необходимости внесения каких-либо изменений в конфигурацию или код вашего приложения.

      В этом руководстве вы установите стек LEMP на сервер с CentOS 8. Хотя MySQL доступен в используемых по умолчанию репозиториях в CentOS 8, в этом руководстве мы рассмотрим процесс настройки стека LEMP с MariaDB в качестве системы управления базами данных.

      Предварительные требования

      Для выполнения этого обучающего руководства вам потребуется доступ к серверу CentOS 8, пользователь без прав root с привилегиями sudo и и активный брандмауэр, установленный на сервере. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера CentOS 8.

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

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

      Установите пакет nginx с помощью следующей команды:

      При получении запроса введите y для подтверждения того, что вы хотите установить nginx.

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

      • sudo systemctl start nginx

      Если вы активировали брандмауэр firewalld в соответствии с руководством по начальной настройке сервера, вам нужно будет разрешить подключение к Nginx. Следующая команда будет постоянно активировать подключения по HTTP, запущенные на порту 80 по умолчанию:

      • sudo firewall-cmd --permanent --add-service=http

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

      • sudo firewall-cmd --permanent --list-all

      Вывод будет выглядеть следующим образом:

      Output

      public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

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

      • sudo firewall-cmd --reload

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

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

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

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

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

      Также вы можете проверить доступность IP-адреса из других мест в интернете:

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

      Страница Nginx по умолчанию в CentOS 8

      Если вы увидите эту страницу, это значит, что ваш веб-сервер установлен корректно.

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

      Теперь, когда у вас есть рабочий и запущенный веб-сервер, вам нужно установить систему управления базы данных, которая может хранить данные вашего сайта и управлять ими. Мы установим MariaDB, разработанную энтузиастами версию оригинального сервера MySQL от Oracle.

      Для установки данного ПО запустите следующую команду:

      • sudo dnf install mariadb-server

      После завершения установки активируйте и запустите сервер MariaDB с помощью следующей команды:

      • sudo systemctl start mariadb

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

      • sudo mysql_secure_installation

      После запуска откроется серия диалогов, с помощью которых вы можете внести некоторые изменения в вашу настройку MariaDB. В первом диалоге вам нужно будет ввести пароль пользователя root для текущей базы данных. Не нужно путать его с системным root пользователем. Root пользователь базы данных — это пользователь с правами администратора, который имеет все права для работы с системой базы данных. Поскольку вы только что установили MariaDB и еще не меняли параметры конфигурации, пароль будет пустым, так что вам достаточно нажать ENTER в этом диалоге.

      В следующем диалоге вам будет предложено задать пароль для пользователя root базы данных. Поскольку MariaDB использует специальный метод аутентификации для пользователя root, который, как правило, отличается большей безопасностью по сравнению с аутентификацией по паролю, вам не нужно настраивать его в данный момент. Введите N и нажмите ENTER.

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

      После выполнения указанных выше действий выполните вход в консоль MariaDB с помощью следующей команды:

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

      Output

      Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. MariaDB [(none)]>

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

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

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

      • CREATE DATABASE example_database;

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

      • GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

      В результате пользователь example_user получит полный набор привилегий для базы данных example_database, но не будет обладать возможностью создания или изменения других баз данных на сервере.

      Очистите привилегии, чтобы они были сохранены и доступны в текущем сеансе:

      После этого закройте оболочку MariaDB:

      Вы можете проверить наличие у нового пользователя конкретных разрешений, выполнив повторный вход в консоль MariaDB, на этот раз используя учетные данные вашего собственного пользователя:

      Обратите внимание на флаг -p в этой команде, который будет запрашивать пароль, который вы задаете при создании пользователя example_user. После входа в консоль MariaDB убедитесь, что у вас есть доступ к базе данных example_database:

      Результат будет выглядеть следующим образом:

      Output

      +--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

      Чтобы закрыть оболочку MariaDB, введите следующую команду:

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

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

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

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

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

      • sudo dnf install php-fpm php-mysqlnd

      После завершения установки вам потребуется изменить файл /etc/php-fpm.d/www.conf, чтобы задать несколько параметров.

      Предоставляемый с CentOS 8 по умолчанию текстовый редактор — vi. vi очень мощный текстовый редактор, но освоить работу с ним неопытным пользователям достаточно сложно. Вы можете установить более удобный для пользователя редактор, например, nano, для облегчения редактирования файлов конфигурации на сервере CentOS 8:

      Теперь откройте файл конфигурации /etc/php-fpm.d/www.conf с помощью nano или другого выбранного вами редактора:

      • sudo nano /etc/php-fpm.d/www.conf

      Найдите директивы user и group. Если вы используете nano, вы можете нажать CTRL+W для поиска этих терминов в открытом файле.

      /etc/php-fpm.d/www.conf

      …
      ; Unix user/group of processes
      ; Note: The user is mandatory. If the group is not set, the default user's group
      ;       will be used.
      ; RPM: apache user chosen to provide access to the same directories as httpd
      user = apache
      ; RPM: Keep a group allowed to write in log dir.
      group = apache

      Вы можете заметить, что для переменных user и group задано значение apache. Нам нужно изменить значения на nginx:

      /etc/php-fpm.d/www.conf

      …
      ; RPM: apache user chosen to provide access to the same directories as httpd
      user = nginx
      ; RPM: Keep a group allowed to write in log dir.
      group = nginx

      Сохраните и закройте файл после завершения редактирования. Если вы используете nano, нажмите CTRL + X, а затем нажмите Y и ENTER.

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

      • sudo systemctl start php-fpm

      Перезапустите веб-сервер Nginx, чтобы он смог использовать файлы конфигурации, созданные при установке php-fpm:

      • sudo systemctl restart nginx

      Теперь ваш веб-сервер полностью настроен. На следующем шаге мы создадим PHP скрипт для тестирования, чтобы убедиться, что все работает ожидаемым образом.

      Шаг 4 — Тестирование PHP с помощью Nginx

      В CentOS 8 при установке php-fpm по умолчанию автоматически создаются файлы конфигурации, которые позволят вашему веб-серверу Nginx обрабатывать файлы .php в корневой директории документов по умолчанию, расположенной в /usr/share/nginx/html. Вам не потребуется вносить какие-либо изменения в конфигурацию Nginx для обеспечения корректной работы PHP на вашем веб-сервере.

      Единственное изменение, которое мы будем вносить, — это изменение параметров разрешений по умолчанию в корневой папке документов Nginx. Так вы сможете создавать и изменять файлы в данной папке, используя обычного системного пользователя без необходимости добавлять к каждой команде sudo.

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

      • sudo chown -R sammy.sammy /usr/share/nginx/html/

      Теперь мы создадим тестовую страницу PHP, чтобы убедиться, что веб-сервер работает ожидаемым образом.

      Создайте новый файл PHP с именем info.php в директории /usr/share/nginx/html:

      • nano /usr/share/nginx/html/info.php

      Следующий код PHP будет отображать информацию о текущей среде PHP, которая запущена на сервере:

      /usr/share/nginx/html/info.php

      <?php
      
      phpinfo();
      

      После завершения редактирования сохраните и закройте файл.

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

      http://server_host_or_IP/info.php
      

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

      Отображаемая по умолчанию страница с данными PHP в CentOS 8

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

      • rm /usr/share/nginx/html/info.php

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

      Шаг 5 — Тестирование подключения к базе данных для PHP (необязательно)

      Если вы хотите проверить, может ли PHP подключаться к MariaDB и выполнять запросы для базы данных, вы можете создать тестовую таблицу с шаблонными данными и запрашивать ее содержимого из скрипта PHP.

      Во-первых, подключитесь к консоли MariaDB с пользователем базы данных, созданным на шаге 2 настоящего руководства:

      Создайте таблицу с именем todo_list. Из консоли MariaDB запустите следующее выражение:

      CREATE TABLE example_database.todo_list (
          item_id INT AUTO_INCREMENT,
          content VARCHAR(255),
          PRIMARY KEY(item_id)
      );
      

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

      • INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

      Чтобы подтвердить, что данные были успешно сохранены в таблицу, запустите следующую команду:

      • SELECT * FROM example_database.todo_list;

      Результат будет выглядеть следующим образом:

      Output

      +---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

      Убедившись в том, что у вас есть надлежащие данные в тестовой таблице, вы можете закрыть консоль MariaDB:

      Теперь вы можете создать скрипт PHP, который будет подключаться к MariaDB и запрашивать ваше содержимое. Создайте новый файл PHP в пользовательском корневом веб-каталоге в предпочитаемом вами редакторе. Мы будем использовать nano:

      • nano /usr/share/nginx/html/todo_list.php

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

      /usr/share/nginx/html/todo_list.php

      <?php
      $user = "example_user";
      $password = "password";
      $database = "example_database";
      $table = "todo_list";
      
      try {
        $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
        echo "<h2>TODO</h2><ol>";
        foreach($db->query("SELECT content FROM $table") as $row) {
          echo "<li>" . $row['content'] . "</li>";
        }
        echo "</ol>";
      } catch (PDOException $e) {
          print "Error!: " . $e->getMessage() . "<br/>";
          die();
      }
      

      Сохраните и закройте файл после завершения редактирования.

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

      http://server_host_or_IP/todo_list.php
      

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

      Пример списка дел PHP

      Это означает, что ваша среда PHP готова к подключению и взаимодействию с вашим сервером MariaDB.

      Заключение

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



      Source link