Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS с нуля

Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS с нуля

Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS с нуля

Подготовка

Проверка пользователя

Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS — это дело хорошее, но давайте для начала разберемся, под каким пользователем мы находимся в командной строке. Это важно с точки зрения соблюдения правил безопасности, ведь нередко можно столкнуться с тем, что сервера взламывают, используя брешь в правах пользователей, брешь в правах доступа к файлам и каталогам, и, наконец, используя некорректно настроенные сервисы, которые, к примеру, могут выполняться от имени пользователей со слишком обширными правами и т. д. Также рекомендую не использовать один и тот же пароль для всего и вся, так как используя его много где, может произойти его утечка (слив) из-за недобросовестности какого-то ресурса, или недостаточных средств защиты данных на нем. Решением в таком случае может являться программа для генерации и надежного хранения надежных паролей, например Keepass, которой уже придется пользоваться постоянно — такова цена безопасности.

Если Вы ещё думаете над тем, какого провайдера VPS/VDS выбрать, то советую рассмотреть https://firstvds.ru, этот сайт (dnevnik.dev) размещен именно там.

Итак, вернемся к вопросу о пользователе в командной строке — если у Вас написано что-то вроде:

root@ИМЯСЕРВЕРА:~#

То это нужно обязательно поменять. Зачем? Все просто — вы рискуете выполнить команду, которая запустит нечто, что будет иметь полные права доступа к Вашему серверу, так как оно будет запущено от имени root, т. е. корневого пользователя (он же администратор, суперпользователь), которому дозволено буквально все на Вашем сервере. Да, устанавливая различные пакеты придется часто использовать права администратора, но использование этих прав не должно быть по умолчанию, так как если Вы планируете долго работать с сервером, Вы должны понимать, что запуск какого-нибудь npm install (который исполнит код пакета в котором может находиться вирус) от имени суперпользователя — просто вопрос времени, если Вы не введете за правило использовать различных пользователей для различных задач.

Те, у кого в командной строке не то, что я описывал выше (т. е. не пользователь root, а какой-то Ваш пользователь с другим именем) могут пролистать до подзаголовка «Проверка прав пользователя». А у кого именно то, что я описывал — давайте исправлять.

Создание нового пользователя

Нам нужно создать нового пользователя, который бы имел доступ к команде sudo (она реализует возможность выполнять команды от имени администратора обычным пользователям, которые не являются администраторами).

Вводим в терминале (командной строке):

serveruser в команде ниже — это имя будущего пользователя, можете заменить его здесь и в последующих примерах на другое, которое Вам больше нравится.

adduser serveruser

После чего Вы увидите это:

Adding user `serveruser' ...
Adding new group `serveruser' (1000) ...
Adding new user `serveruser' (1000) with group `serveruser' ...
Creating home directory `/home/serveruser' ...
Copying files from `/etc/skel' ...
New password:

Вам предлагают ввести пароль для этого нового пользователя — просто введите его (на экране ничего не будет меняться при его вводе) и нажмите Enter. Далее Вам предложат повторить пароль:

Retype new password:

Повторите пароль, и нажмите Enter. Далее выведется это:

passwd: password updated successfully
Changing the user information for serveruser
Enter the new value, or press ENTER for the default
        Full Name []:

Теперь Вам предлагается вводить информацию о пользователе, но это совершенно необязательно — можете просто жать Enter, пока ввод данных не завершится:

Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]

На последнее сообщение нужно ответить «y» (английская) и нажать Enter. Появится это:

Is the information correct? [Y/n] y
root@ИМЯСЕРВЕРА:~#

Нам предлагают ввести команду, значит предыдущая выполнилась — пользователь создан.

Теперь необходимо добавить пользователя в группу sudo, участники которой могут выполнять команды с привилегиями администратора. Для этого нужно выполнить такую команду (не забудьте поменять serveruser на имя Вашего пользователя):

usermod -aG sudo serveruser

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

Проверка прав пользователя

Теперь мы должны проверить права пользователя. Те, у кого в командной строке был пользователь root, должны залогиниться под только что созданным пользователем, с помощью этой команды (замените serveruser на имя Вашего пользователя):

su serveruser

После чего должно вывестись что-то вроде:

serveruser@ИМЯСЕРВЕРА:/root$

Итак, мы вошли под только что созданным пользователем.

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

sudo ls -la /root

Вам предложат ввести пароль Вашего пользователя (введите его):

[sudo] password for serveruser:

После ввода правильного пароля пользователя команда выполнится, и положительным результатом будет подобный (т. е. выведется список содержимого каталога /root):

total 28
drwx------  4 root root 4096 Jul 11 21:30 .
drwxr-xr-x 19 root root 4096 May 11 06:03 ..
-rw-r--r--  1 root root 3106 Oct 15  2021 .bashrc
drwx------  3 root root 4096 Apr 28 04:44 .cache
-rw-r--r--  1 root root  161 Jul  9  2019 .profile
drwx------  2 root root 4096 Jul 11 21:30 .ssh
-rw-------  1 root root 3649 Apr 28 04:47 .viminfo

А если прав на чтение этого каталога нет, то будет выведено это:

ls: cannot open directory '/root': Permission denied

Ошибка выше означает, что что-то с правами пользователя не так. Если у Вас уже был такой пользователь (т. е. Вы сейчас не создавали нового), то Вам придется либо найти другого пользователя с необходимыми нам правами, либо раздобыть доступ к пользователю root и повторить инструкции выше, создав нового пользователя, или попробовав добавить имеющегося пользователя в группу sudo. В любом случае, если возникнут какие-то трудности, то Вы можете обратиться в сообщения сообщества https://vk.com/webdevdiary, и я попробую Вам помочь.

Итак, установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS — начинаем устанавливать.

Установка Nginx

От имени нашего пользователя (не root) выполним команду для обновления пакетов (вводим пароль нашего пользователя, если попросят):

sudo apt update

После чего выведется что-то вроде:

Hit:1 http://ru.archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://ru.archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:3 http://ru.archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]

<КУЧА ЗАПРОСОВ>

Get:22 http://ru.archive.ubuntu.com/ubuntu jammy-security/multiverse Translation-en [900 B]
Fetched 1797 kB in 1s (2101 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
54 packages can be upgraded. Run 'apt list --upgradable' to see them.
serveruser@ИМЯСЕРВЕРА:/root$

А далее начнем установку Nginx (когда попросят, введите «y» для подтверждения, что Вы хотите установить Nginx):

sudo apt install nginx

После выполнения этой команды Nginx установится. Теперь нам нужно проверить настройки файрволла через UFW (Uncomplicated Firewall), для этого введем:

sudo ufw app list

Должен появиться такой список доступных приложений:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

На этом этапе нужно убедиться, что у нас есть «Nginx Full», «Nginx HTTP», «Nginx HTTPS» и «OpenSSH».

Если вывелось не то, что указано выше, раскройте эту панель

Далее проверим, разрешены ли эти приложения в файрволле, введем:

sudo ufw status

Должно вывестись подобное:

Status: active

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

Если Status: inactive, раскройте эту панель

Здесь нужно убедиться, что «OpenSSH», «Nginx HTTP» и «Nginx HTTPS» имеют значение «ALLOW» в колонке «Action». Если у кого-то из них значение «DENY», или их просто нет в списке, или список вообще пуст, то нужно выполнить команды:

sudo ufw allow 'OpenSSH'
sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'

После этого повторите предыдущие инструкции, чтобы убедиться, что «OpenSSH», «Nginx HTTP» и «Nginx HTTPS» имеют значение «ALLOW».

Проверка работоспособности Nginx

Если Вы не знаете IP-адрес своего сервера, то узнаем его. Выполним команду:

curl icanhazip.com

И мы увидим наш IP-адрес.

Если не вывелся IP-адрес, раскройте эту панель

Другие варианты узнать IP-адрес своего сервера описаны тут: Как узнать IP-адрес своего VPS/VDS?

Вобьем IP-адрес в браузере:

Приветствие Nginx

Если у Вас отобразилось как на картинке выше — то все отлично, Nginx установлен.

У нас продолжается установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS. На очереди — MySQL!

Установка MySQL

Теперь нам необходимо установить MySQL, вводим команду (под тем пользователем, права которого проверяли ранее):

sudo apt install mysql-server

Когда будет запрошено, подтвердите установку вводом (нажатием) Y, и нажмите Enter.

Должно вывестись что-то вроде этого:

serveruser@ИМЯСЕРВЕРА:/root$ sudo apt install mysql-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-core-2.1-7
  
<КУЧА ПАКЕТОВ>

  mysql-client-core-8.0 mysql-common mysql-server mysql-server-8.0 mysql-server-core-8.0
  psmisc
0 upgraded, 31 newly installed, 0 to remove and 54 not upgraded.
Need to get 28.8 MB of archives.
After this operation, 241 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ru.archive.ubuntu.com/ubuntu jammy/main amd64 mysql-common all 5.8+1.0.8 [7212 B]

<КУЧА ЗАПРОСОВ>

Get:30 http://ru.archive.ubuntu.com/ubuntu jammy/main amd64 mecab-ipadic-utf8 all 2.7.0-20070801+main-3 [4384 B]
Get:31 http://ru.archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-server all 8.0.29-0ubuntu0.22.04.2 [9534 B]
Fetched 28.8 MB in 2s (11.7 MB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package mysql-common.
(Reading database ... 63630 files and directories currently installed.)
Preparing to unpack .../0-mysql-common_5.8+1.0.8_all.deb ...
Unpacking mysql-common (5.8+1.0.8) ...
Selecting previously unselected package mysql-client-core-8.0.

<КУЧА КОМАНД УСТАНОВКИ>

debconf: falling back to frontend: Readline
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Renaming removed key_buffer and myisam-recover options (if present)
mysqld will log errors to /var/log/mysql/error.log
mysqld is running as pid 2823
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.
Setting up libcgi-pm-perl (4.54-1) ...
Setting up libhtml-template-perl (2.97-1.1) ...
Setting up mysql-server (8.0.29-0ubuntu0.22.04.2) ...
Setting up libcgi-fast-perl (1:2.15-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3) ...
serveruser@ИМЯСЕРВЕРА:/root$

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

sudo mysql_secure_installation

Во время выполнения скрипта, Вас могут спросить, хотите ли Вы сконфигурировать VALIDATE PASSWORD PLUGIN.

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

Вот так выглядит предложение сконфигурировать VALIDATE PASSWORD PLUGIN:

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, чтобы начать конфигурацию плагина, или что-то другое, чтобы его не конфигурировать.

Если Вы ответили «yes», то Вас попросят выбрать уровень валидации паролей. 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: 1

Выберите тот уровень, который считаете нужным.

Ввод пароля для MySQL-пользователя root:

Вне зависимости от того, выбрали ли Вы установку подключаемого модуля VALIDATE PASSWORD или нет, Вам предстоит ввести и подтвердить пароль MySQL root-пользователя.

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

Если Вы сконфигурировали VALIDATE PASSWORD PLUGIN, Вам будет показана надежность пароля для MySQL-пользователя root, который вы только что ввели, и ваш сервер спросит, хотите ли вы продолжить с этим паролем. Если вас устраивает текущий пароль, введите (нажмите) Y, а затем Enter:

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 немедленно учитывал внесенные вами изменения.

Если вывелась ошибка, раскройте эту панель

Я вижу, что эту статью находят, вбивая в поисковик эту проблему: failed! error set password has no significance for user root. Друзья, решение в раскрывающемся блоке выше

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

sudo mysql

Если вывелась ошибка, раскройте эту панель

Эта команда подключит нас к MySQL-серверу под пользователем root. Должно вывестись подобное:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.29-0ubuntu0.22.04.2 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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>

Чтобы выйти из консоли, введите:

exit

После чего выведется дружелюбное сообщение:

mysql> exit
Bye

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

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

Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS подошла к финальному шагу — к установке PHP!

Установка PHP8.1-FPM

Так как мы идем в ногу со временем, то давайте установим недавно вышедший PHP 8.1. Для этого мы должны первым делом добавить репозиторий, а чтобы его добавить, нужно установить software-properties-common, введем:

sudo apt install software-properties-common

В процессе Вас должны попросить подтвердить выполнение операций, введите (нажмите) Y, а затем нажмите Enter. Теперь, собственно, добавим сам репозиторий с PHP:

sudo add-apt-repository ppa:ondrej/php

Тут Вас попросят нажать Enter — нажмите его при такой просьбе, и репозиторий будет добавлен.

Обновим информацию о пакетах после добавления репозитория:

sudo apt update

И, наконец, установим PHP:

sudo apt install php8.1-fpm

В процессе Вас должны попросить подтвердить установку, введите (нажмите) Y, а затем нажмите Enter. Дождитесь завершения установки. Последние строчки успешной установки выглядят примерно так:

Creating config file /etc/php/8.1/cli/php.ini with new version
Setting up php8.1-fpm (8.1.8-1+ubuntu22.04.1+deb.sury.org+1) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 78.)
debconf: falling back to frontend: Readline

Creating config file /etc/php/8.1/fpm/php.ini with new version
Created symlink /etc/systemd/system/multi-user.target.wants/php8.1-fpm.service → /lib/systemd/system/php8.1-fpm.service.
Processing triggers for libc-bin (2.35-0ubuntu3) ...
Processing triggers for php8.1-cli (8.1.8-1+ubuntu22.04.1+deb.sury.org+1) ...
Processing triggers for php8.1-fpm (8.1.8-1+ubuntu22.04.1+deb.sury.org+1) ...

Ну и давайте проверим, работает ли наш PHP 8.1, введем:

systemctl status php8.1-fpm

Если вывелось подобное, то все отлично:

● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php8.1-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-07-11 23:53:14 MSK; 53s ago
       Docs: man:php-fpm8.1(8)
    Process: 10498 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.1/fpm/pool.d/www.conf 81 (code=exited, status=0/SUCCESS)
   Main PID: 10495 (php-fpm8.1)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 1034)
     Memory: 7.1M
        CPU: 47ms
     CGroup: /system.slice/php8.1-fpm.service
             ├─10495 "php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf)" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ├─10496 "php-fpm: pool www" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             └─10497 "php-fpm: pool www" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Настройка Nginx для работы с PHP

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

sudo mkdir /var/www/domain_of_site_for_testing

Если Вам нужен домен, советую приобретать его здесь: https://reg.ru. К примеру, домен этого сайта (dnevnik.dev) зарегистрирован именно там.

Назначим текущего пользователя владельцем директории (вы же не из под root, верно?):

sudo chown -R $USER:$USER /var/www/domain_of_site_for_testing

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

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

Создадим новый конфигурационный файл для Nginx, для этого введем:

sudo vim /etc/nginx/sites-available/domain_of_site_for_testing

Команда выше создаст новый пустой файл. Вставим в него содержимое:

server {
    listen 80 default_server;
    server_name domain_of_site_for_testing www.domain_of_site_for_testing;
    root /var/www/domain_of_site_for_testing;

    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/php8.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

}

И для сохранения файла, нажмите «:wq», а затем Enter. Файл сохранен.

Активируем конфигурацию этой командой:

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

Перезапустим Nginx, чтобы изменения вступили в силу:

sudo systemctl reload nginx

Теперь наш тестовый сайт активен, давайте создадим index.php, чтобы проверить его работу. Создадим новый файл:

vim /var/www/domain_of_site_for_testing/index.php

И вставим в него это:

<html>
  <head>
    <title>Site for testing</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <?php
      phpinfo();
    ?>
  </body>
</html>

Сохраним файл. Нажмем знакомые нам «:wq», затем Enter.

Всё, дело сделано, можем тестировать. Для этого необходимо открыть в браузере страницу:

http://IP-адрес Вашего сервера/

И положительным результатом будет это:

Работающий Nginx + PHP 8.1

На скриншоте выше мы видим и нашу надпись «Hello World!», и результат выполнения команды «phpinfo();», из чего мы видим, что PHP работает и он версии 8.1.

Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS почти завершена! Давайте теперь настроим работу PHP и MySQL.

Настройка работы PHP и MySQL

Установим PHP-модуль для работы с MySQL:

sudo apt install php8.1-mysql

Войдем в командную строку MySQL:

sudo mysql

Создадим новую базу данных:

CREATE DATABASE site_for_testing_database;

Создадим нового пользователя:

CREATE USER 'site_for_testing_user'@'localhost' IDENTIFIED BY 'aef@234R345t2iJhfvar';

«aef@234R345t2iJhfvar» — это пароль пользователя site_for_testing_user.

Дадим пользователю site_for_testing_user права на базу данных site_for_testing_database:

GRANT ALL ON site_for_testing_database.* TO 'site_for_testing_user'@'localhost';

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

exit

Теперь давайте войдем в командную строку MySQL под новым MySQL-пользователем:

mysql -u site_for_testing_user -p

Вас попросят ввести пароль, введите его. Если Вы не меняли его в примере выше, то он будет такой:

aef@234R345t2iJhfvar

Вот мы и вошли под новым пользователем. Посмотрим, какие базы данных ему видны, введем:

SHOW DATABASES;

Результат будет такой:

+---------------------------+
| Database                  |
+---------------------------+
| information_schema        |
| site_for_testing_database |
+---------------------------+
2 rows in set (0.06 sec)

Видим нашу базу site_for_testing_database, отлично, давайте добавим в нее таблицу для теста:

CREATE TABLE site_for_testing_database.test_table (
    test_id INT AUTO_INCREMENT,
    test_text VARCHAR(255),
    PRIMARY KEY(test_id)
);

Вставим в таблицу строчку для теста:

INSERT INTO site_for_testing_database.test_table (test_text) VALUES ("Kak dela u menya est kadilak");

Проверим, что она записалась:

SELECT * FROM site_for_testing_database.test_table;

Если результат такой, то все получилось:

+---------+------------------------------+
| test_id | test_text                    |
+---------+------------------------------+
|       1 | Kak dela u menya est kadilak |
+---------+------------------------------+
1 row in set (0.01 sec)

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

exit

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

vim /var/www/domain_of_site_for_testing/connect.php

И вставим в него это:

<?php

$db = mysqli_connect('127.0.0.1', 'site_for_testing_user', 'aef@234R345t2iJhfvar', 'site_for_testing_database');

if (!$db) {
    echo 'Ошибка: Невозможно установить соединение с MySQL.' . PHP_EOL;
    echo 'Код ошибки errno: ' . mysqli_connect_errno() . PHP_EOL;
    echo 'Текст ошибки error: ' . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo 'Соединение с MySQL установлено!<br/>';
echo 'Информация о сервере: ' . mysqli_get_host_info($db) . '<br/>';

Нажимаем «:wq», затем Enter.

Теперь создаем файл для вывода данных из таблицы:

vim /var/www/domain_of_site_for_testing/select_from_table_test.php

И вставим в него это:

<?php

require 'connect.php';

if ($result = $db->query("SELECT test_text FROM test_table")) {
    
	while($obj = $result->fetch_object()){
		echo $obj->test_text;
	}

    $result->close();
}

Нажимаем «:wq», затем Enter.

Переходим по адресу:

http://IP-адрес Вашего сервера/select_from_table_test.php

И если там как на картинке ниже, то все работает:

Успешный запрос к MySQL из PHP
Успешный запрос к MySQL из PHP

Заключение

Вот и всё! Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS завершена и протестирована! Мы прошли весь путь от только что установленной Ubuntu 22.04 LTS, до работающего на ней сайта, использующего PHP и MySQL. Надеюсь, что этот мануал стал для Вас своевременной инструкцией/шпаргалкой для настройки своего сервера.

И, как всегда, если остались какие-то вопросы — задавайте их в сообщения сообщества https://vk.com/webdevdiary, я постараюсь на них ответить, ну и подписывайтесь при желании 🙂

До встречи!

Теги: , , , ,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *