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

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

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

Внимание! Вышла новая статья — Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS с нуля, которая является обновленной версией текущей статьи (использованы более новые версии PHP и Ubuntu).

Подготовка

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

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

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

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 40
drwx------  5 root root 4096 Oct 26 13:24 .
drwxr-xr-x 18 root root 4096 Oct 25 01:45 ..
-rw-------  1 root root 1433 Oct 29 17:57 .bash_history
-rw-r--r--  1 root root 3106 Dec  5  2019 .bashrc
drwx------  2 root root 4096 Oct 26 11:59 .cache
drwxr-xr-x  3 root root 4096 Oct 26 12:45 .local
-rw-r--r--  1 root root    1 Oct 25 01:51 lsblk_raw
-rw-------  1 root root   18 Oct 26 12:32 .mysql_history
-rw-r--r--  1 root root  161 Dec  5  2019 .profile
drwx------  2 root root 4096 Oct 25 01:51 .ssh

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

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

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

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

Установка Nginx

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

sudo apt update

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

[66.4 kB]
Get:27 http://mirror.hoztnode.net/ubuntu focal-security/universe amd64 c-n-f Metadata [9,216 B]
Fetched 4,612 kB in 2s (2,458 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
68 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: command not found

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

sudo apt install ufw

И вернитесь к предыдущему шагу после успешной установки ufw.

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

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

То, выполните команды (когда попросят, введите «y» для подтверждения намерения активировать ufv):

sudo ufw enable

Далее, попробуйте снова повторить предыдущие пункты.

Здесь нужно убедиться, что «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 -4 icanhazip.com

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

Если ошибка в том, что curl не установлен — установим его:

sudo apt install curl

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

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

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

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

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

Установка MySQL

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

sudo apt install mysql-server

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

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

serveruser@ИМЯСЕРВЕРА:/root$ sudo apt install mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  mysql-server
1 upgraded, 0 newly installed, 0 to remove and 95 not upgraded.
Need to get 9,548 B of archives.
After this operation, 1,024 B of additional disk space will be used.
Get:1 http://mirror.hoztnode.net/ubuntu focal-updates/main amd64 mysql-server all 8.0.22-0ubuntu0.20.04.3 [9,548 B]
Fetched 9,548 B in 0s (511 kB/s)
(Reading database ... 66382 files and directories currently installed.)
Preparing to unpack .../mysql-server_8.0.22-0ubuntu0.20.04.3_all.deb ...
Unpacking mysql-server (8.0.22-0ubuntu0.20.04.3) over (8.0.21-0ubuntu0.20.04.4) ...
Setting up mysql-server (8.0.22-0ubuntu0.20.04.3) ...

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

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

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

Вне зависимости от того, выбрали ли Вы установку подключаемого модуля 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'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

То выполните эти действия:

Введите команду:

sudo mysql

Далее ввести:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'my_new_sTrOnG_password_12aArG';

И это:

exit

А затем, выполните:

sudo mysql_secure_installation

Выведется это:

Securing the MySQL server deployment.

Enter password for user root:

Введите этот пароль:

my_new_sTrOnG_password_12aArG

Выведется подобное:

The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

Введите «y», и действуйте по инструкции выше заново, начав с назначения пароля для MySQL-пользователя root.

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

sudo mysql

Если вывелась ошибка:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

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

sudo mysql -p

Потом выполните этот запрос:

ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;

И введите:

exit

Затем, попробуйте выполнить пункт выше заново.

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

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 123
Server version: 8.0.21-0ubuntu0.20.04.4 (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>

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

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.0-FPM на Ubuntu 20.04 подошла к финальному шагу — к установке PHP!

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

Так как мы идем в ногу со временем, то давайте установим недавно вышедший PHP 8. Для этого мы должны первым делом добавить репозиторий, а чтобы его добавить, нужно установить 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.0-fpm

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

Creating config file /etc/php/8.0/cli/php.ini with new version
Setting up php8.0-fpm (8.0.0-1+ubuntu20.04.1+deb.sury.org+1) ...

Creating config file /etc/php/8.0/fpm/php.ini with new version
Created symlink /etc/systemd/system/multi-user.target.wants/php8.0-fpm.service -> /lib/systemd/system/php8.0-fpm.service.
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.2) ...
Processing triggers for php8.0-cli (8.0.0-1+ubuntu20.04.1+deb.sury.org+1) ...
Processing triggers for php8.0-fpm (8.0.0-1+ubuntu20.04.1+deb.sury.org+1) ...

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

systemctl status php8.0-fpm

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

* php8.0-fpm.service - The PHP 8.0 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php8.0-fpm.service; enabled; vendor pr>
     Active: active (running) since Wed 2020-12-23 03:44:07 MSK; 3min 13s ago
       Docs: man:php-fpm8.0(8)
    Process: 1262891 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install />
   Main PID: 1262880 (php-fpm8.0)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req>
      Tasks: 3 (limit: 2319)
     Memory: 7.1M
     CGroup: /system.slice/php8.0-fpm.service
             |-1262880 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
             |-1262889 php-fpm: pool www
             `-1262890 php-fpm: pool www
lines 1-13/13 (END)

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

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

sudo mkdir /var/www/domain_of_site_for_testing

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

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

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

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

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

sudo nano /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.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

}

И для сохранения файла, нажмите Ctrl+X, затем введите (нажмите) Y, а затем Enter. Файл сохранен.

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

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

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

sudo systemctl reload nginx

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

nano /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>

Сохраним файл. Нажмем знакомые нам Ctrl+X, затем Y, затем Enter.

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

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

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

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

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

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

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

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

sudo apt install php8.0-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. Для этого нам нужно подключиться к базе, и написать скрипт вывода данных. Для начала создадим файл подключения к базе:

nano /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/>';

Нажимаем Ctrl+X, затем Y, затем Enter.

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

nano /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();
}

Нажимаем Ctrl+X, затем Y, затем Enter.

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

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

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

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

Заключение

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

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

До встречи!

Теги: , , , ,

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

Ваш адрес email не будет опубликован.