Установка 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: 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, раскройте эту панель
Если в результате вывелось такое:
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 icanhazip.com
И мы увидим наш IP-адрес.
Если не вывелся IP-адрес, раскройте эту панель
Если ошибка в том, что curl не установлен — установим его:
sudo apt install curl
После этого, снова попробуйте выполнить пункт выше.
Другие варианты узнать IP-адрес своего сервера описаны тут: Как узнать IP-адрес своего VPS/VDS?
Вобьем IP-адрес в браузере:
Если у Вас отобразилось как на картинке выше — то все отлично, 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'@'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.
Я вижу, что эту статью находят, вбивая в поисковик эту проблему: failed! error set password has no significance for user 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 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-адрес Вашего сервера/
И положительным результатом будет это:
На скриншоте выше мы видим и нашу надпись «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
И если там как на картинке ниже, то все работает:
Заключение
Вот и всё! Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS завершена и протестирована! Мы прошли весь путь от только что установленной Ubuntu 22.04 LTS, до работающего на ней сайта, использующего PHP и MySQL. Надеюсь, что этот мануал стал для Вас своевременной инструкцией/шпаргалкой для настройки своего сервера.
И, как всегда, если остались какие-то вопросы — задавайте их в сообщения сообщества https://vk.com/webdevdiary, я постараюсь на них ответить, ну и подписывайтесь при желании 🙂
До встречи!