Задача: nginx + mariadb + phpmyadmin on Ubuntu 18.04 Server

Настройка связки Nginx + PhpMyAdmin on Ubuntu 18.04

У меня уже есть заметка как установить phpmyadmin on Ubuntu 18.04, но в ней задействован Web-сервис Apache2

Как установить phpmyadmin on Ubuntu 18.04 Server /

сейчас задумка дополнить ее если применяется Web-сервис nginx. Просто у меня есть один портал dealers который мне нужно вынести из docker(а), а многие моменты все же удобнее производить через Web-интерфейс чем через консоль командной строки. Так родилась данная заметка со всеми нюанса от и до если разворачивать сервис phpmyadmin на Ubuntu 18.04 Server.

Шаг №1: Произвожу предустановку операционный системы Ubuntu 18.04 Server после инсталляции из образа или как у меня через сервис FOG Project + файл ответов. Скрипт только для моей локальной сети, Вы же используете свои предпочтения.

ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject

ekzorchik@srv-bionic:~$ sudo ./dproject/default

ekzorchik@srv-bionic:~$ uname -a

Linux srv-bionic 4.15.0-76-generic #86-Ubuntu SMP Fri Jan 17 17:24:28 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Шаг №2: Устанавливаю Nginx + MariaDB:

ekzorchik@srv-bionic:~$ sudo apt-get install -y nginx mariadb-server mariadb-client php php-fpm php-common php-mysql php-gd php-cli

Шаг №3: Устанавливаю пароль на учетную запись root сервиса msyql, т.к. по умолчанию его нет:

ekzorchik@srv-bionic:~$ sudo mysqladmin -u root password 712mbddr@

Шаг №4: После обязательно запускаем команду настройки базовой безопасности сервиса Mysql:

ekzorchik@srv-bionic:~$ sudo mysql_secure_installation

Enter current password for root (enter for none): 712mbddr@

Change the root password? [Y/n] n

Remove anonymous users? [Y/n] y

Disallow root login remotely? [Y/n] y

Remove test database and access to it? [Y/n] y

Reload privilege tables now? [Y/n] y

Шаг №5: Активирую работу php сценариев.

ekzorchik@srv-bionic:~$ sudo nano /etc/php/7.2/fpm/php.ini

;cgi.fix_pathinfo=1

cgi.fix_pathinfo=0

;date.timezone =

;date.timezone = Europe/Moscow

ekzorchik@srv-bionic:~$ sudo php-fpm7.2 -t

[30-Mar-2020 23:00:40] NOTICE: configuration file /etc/php/7.2/fpm/php-fpm.conf test is successful

ekzorchik@srv-bionic:~$

ekzorchik@srv-bionic:~$ hostname -I

172.33.33.26
ekzorchik@srv-bionic:~$ sudo nano /etc/nginx/sites-available/default
server {
        listen 80 default_server;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        #server_name _;
        server_name 172.33.33.26;
        location / {
                try_files $uri $uri/ =404;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
}
ekzorchik@srv-bionic:~$ sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
ln: failed to create symbolic link '/etc/nginx/sites-enabled/default': File exists
ekzorchik@srv-bionic:~$

Все правильно, по дефолту ссылка есть, если создаете конфигурационный файл для сервиса сайта то обязательно нужно создавать символическую ссылку внутрь каталога «sites-enabled» дабы конфигурация была активизирована/применена.

Шаг №6: Проверяем конфигурации(ию) на ошибки:

ekzorchik@srv-bionic:~$ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

ekzorchik@srv-bionic:~$

Шаг №7: Для проверки работоспособности выполнения Web-сервисом сценарием на PHP создаем сценарий:

ekzorchik@srv-bionic:~$ sudo nano /var/www/html/info.php

<?php phpinfo(); ?>;

ekzorchik@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/

ekzorchik@srv-bionic:~$ sudo chmod -R 755 /var/www/html/

Шаг №8: Перезапускаем Web-сервис

ekzorchik@srv-bionic:~$ sudo systemctl restart nginx php7.2-fpm

Шаг №9: Проверяю, что при обращении на URL-адрес http://IP&DNS/info.php (http://172.33.33.26/info.php) вижу результат исполнения сценария, как на представленном скриншоте ниже:

Результат выполнения php-сценариев

Отлично, сценарии на PHP отрабатывают.

Шаг №10: Устанавливаю phpmyadmin

ekzorchik@srv-bionic:~$ sudo apt-get install -y phpmyadmin
  • Web server to reconfigure automatically: ничего не отмечаем клавишей пробел, а переключаемся на <Ok> клавишей TAB и нажимаем клавишу ENTER
  • Configure database for phpmyadmin with dbconfig-common? Yes
  • MySQL application password for phpmyadmin: 712mbddr@ (пароль на учетную запись для логина phpmyadmin)
  • Password confirmation: 712mbddr@
ekzorchik@srv-bionic:~$ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

ekzorchik@srv-bionic:~$ sudo chmod -R 755 /usr/share/phpmyadmin/

ekzorchik@srv-bionic:~$ sudo chown -R root:www-data /usr/share/phpmyadmin/

Шаг №11: Проверяю, что обратившись по URL-адресу вида http://IP&DNS/phpmyadmin (http://172.33.33.26/phpmyadmin) увижу страницу авторизации в сервисе посредством которого происходит управление базами данных, учетными записям и т.д через Web-интерфейс в дополнении к консольному использованию:

В доступе отказано при обращении к http://IP&DNS/phpmyadmin

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

ekzorchik@srv-bionic:~$ sudo tail -f /var/log/nginx/error.log

2020/03/30 23:11:19 [error] 14389#14389: *3 directory index of "/var/www/html/phpmyadmin/" is forbidden, client: 172.33.33.16, server: 172.33.33.26, request: "GET /phpmyadmin/ HTTP/1.1", host: "172.33.33.26"

Шаг №12: Решение:

ekzorchik@srv-bionic:~$ sudo nano /etc/nginx/sites-available/default
server {
	listen 80 default_server;
	root /var/www/html;
	index index.html index.htm index.nginx-debian.html;
	#server_name _;
	server_name 172.33.33.26;
	location / {
		try_files $uri $uri/ =404;
	}
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
	}
	location /phpmyadmin {
		index index.php;
	}
}
ekzorchik@srv-bionic:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@srv-bionic:~$ 
ekzorchik@srv-bionic:~$ sudo systemctl restart nginx php7.2-fpm

Проверяю:

Страница авторизации в PhpMyAdmin

Отлично, Web-сервис открывается.

Авторизуюсь:

  • Язык - Language: Русский - Russian
  • Пользователь: root
  • Пароль: 712mbddr@

и нажимаю «Вперед», но снова ошибка входа

Ошибка авторизации из под root в PhpMyAdmin

А все потому, что не стоит пакет позволяющий взаимодействовать сценарием PHP и MySQL:

ekzorchik@srv-bionic:~$ sudo apt-get install php-mysql

Reading package lists... Done

Building dependency tree

Reading state information... Done

php-mysql is already the newest version (1:7.2+60ubuntu1).

0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

ekzorchik@srv-bionic:~$

Шаг №13: А нет, все в порядке, тогда что же не так. Дело в том, что дабы подключиться к mysql нужно использовать sudo mysql, а тут как быть. Если заглянуть в мою заметку по связке phpmyadmin + apache2 («Как авторизоваться в phpmyadmin на Ubuntu 18.04«), то Вы увидите, что в этом случаю нужно создать отдельного пользователя с такими же правами как у учетной записи root для сервиса mysql и дать ему права:

ekzorchik@srv-bionic:~$ sudo mysql -u root mysql -e "create user 'us_phpmyadmin'@'%' identified by '712mbddr@'"

ekzorchik@srv-bionic:~$ sudo mysql -u root mysql -e "grant all privileges on *.* to 'us_phpmyadmin'@'%'"

ekzorchik@srv-bionic:~$ sudo nano /etc/dbconfig-common/phpmyadmin.conf

dbc_install='true'

dbc_upgrade='true'

dbc_remove='true'

dbc_dbtype='mysql'

dbc_dbuser='us_phpmyadmin'

dbc_dbpass='712mbddr@'

dbc_dballow='localhost'

dbc_dbserver='localhost'

dbc_dbport='3306'

dbc_dbname='phpmyadmin'

dbc_dbadmin='root'

dbc_basepath=''

dbc_ssl=''

dbc_authmethod_admin=''

dbc_authmethod_user=''

ekzorchik@srv-bionic:~$ sudo systemctl restart mysql && sudo systemctl status mysql | head -n5

● mariadb.service - MariaDB 10.1.44 database server

Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)

Active: active (running) since Mon 2020-03-30 23:27:36 MSK; 11ms ago

Docs: man:mysqld(8)

https://mariadb.com/kb/en/library/systemd/

ekzorchik@srv-bionic:~$

И теперь в Web-оснастки я успешно авторизуюсь со связкой:

  • Login: us_phpmyadmin
  • Pass: 712mbddr@

Вход в PhpMyAdmin с созданной учетной записью обладающей правами как у учетной записи root сервиса mysql

Отлично, работает. Кстати вот что значит разбирать интересующие темы, обязательно их документировать, а не проходить грабли снова и снова. Читая мои блоги Вы всегда будете решать задачи от и до без пропуска важных нюансов.

На этом все, с уважением автор блога Олло Александр aka ekzorchik.