Сегодня я проработаю, как на систему Ubuntu 22.04 установить Web-сервис phpmyadmin с целью визуального взаимодействия с сервисом базы данных: Создание таблиц, столбцов, баз, учетных записей, изменение паролей, копирование контента в новую базу, назначение прав, бекап и восстановление. Где я работаю этим инструментом преимущественно пользуется руководитель 1C при работе с сайтом компании и программой 1Cv7.7

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

Шаг №1: Обновляю информацию о репозитариях и обновляю систему в рамках дефолтных репозитариев по части установленных пакетов:

ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-us2204a:~$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=lts
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo sed -i '/Prompt/s/lts/never/' /etc/update-manager/release-upgrades
ekzorchik@srv-us2204a:~$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=never
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt upgrade -y && sudo apt dist-upgrade -y
ekzorchik@srv-us2204a:~$ sudo reboot

Шаг №2: Настраиваю локаль:

ekzorchik@srv-us2204a:~$ sudo rm -f /etc/localtime
ekzorchik@srv-us2204a:~$ sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
ekzorchik@srv-us2204a:~$ sudo locale-gen en_US.UTF-8
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale
LC_ALL=en_US.UTF-8
ekzorchik@srv-us2204a:~$ echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale
LANG=en_US.UTF-8
ekzorchik@srv-us2204a:~$ echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale
LANGUAGE=en.US.UTF-8
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en.US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
ekzorchik@srv-us2204a:~$

Шаг №3: Устанавливаю приложения которые считаю нужными в дальнейшем работе (по желанию):

ekzorchik@srv-us2204a:~$ sudo apt install -y htop net-tools unzip wget nano

Шаг №4: Устанавливаю Webсервис Apache2:

ekzorchik@srv-us2204a:~$ sudo apt install -y apache2
ekzorchik@srv-us2204a:~$ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf
ServerName localhost
ekzorchik@srv-us2204a:~$ sudo rm -f /var/www/html/index.html
ekzorchik@srv-us2204a:~$ sudo unlink /etc/apache2/sites-enabled/000-default.conf
ekzorchik@srv-us2204a:~$ sudo rm -f /etc/apache2/sites-available/000-default.conf
ekzorchik@srv-us2204a:~$ sudo rm -f /etc/apache2/sites-available/default-ssl.conf
ekzorchik@srv-us2204a:~$ sudo systemctl enable apache2
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable apache2
ekzorchik@srv-us2204a:~$ sudo systemctl restart apache2

Шаг №5: Включаю модули Apache2:

ekzorchik@srv-us2204a:~$ sudo a2enmod rewrite

Шаг №6: Отключаем листинг файлов в директориях работы для Apache2:

ekzorchik@srv-us2204a:~$ sudo nano /etc/apache2/apache2.conf
<Directory /var/www/>
#       Options Indexes FollowSymLinks
        Options FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
ekzorchik@srv-us2204a:~$ sudo apache2ctl configtest
Syntax OK
ekzorchik@srv-us2204a:~$ sudo systemctl restart apache2

т.е. теперь при обращении к http://IP&DNS:80 если не обозначен конфигурационный файл доступа к корню обращающийся получит ошибку, что доступ запрещен:

Закрываем доступ к корню "/" сайта на просмотр

Шаг №7: Устанавливаю сервис базы данных MySQL:

ekzorchik@srv-us2204a:~$ sudo apt-get install -y mysql-server mysql-client

Шаг №8: Изменяю схему авторизации и назначаю пароль на системную учетной запись root сервиса MySQL:

ekzorchik@srv-us2204a:~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
default-authentication-plugin=mysql_native_password
ekzorchik@srv-us2204a:~$ sudo mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '712mbddr@';"

Шаг №9: Устанавливаю PHP и PHPрасширения:

ekzorchik@srv-us2204a:~$ sudo apt install -y php php-{fpm,mbstring,bcmath,xml,mysql,common,gd,cli,curl,zip}
ekzorchik@srv-us2204a:~$ sudo systemctl enable php8.1-fpm --now
Synchronizing state of php8.1-fpm.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable php8.1-fpm
ekzorchik@srv-us2204a:~$

Шаг №10: Устанавливаю phpMyAdmin, можно либо из дефолтных репозитариев, а можно с официального сайта:

ekzorchik@srv-us2204a:~$ apt-cache show phpmyadmin | grep Version
Version: 4:5.1.1+dfsg1-5ubuntu1
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
ekzorchik@srv-us2204a:~$ tar xf phpMyAdmin-latest-all-languages.tar.gz
ekzorchik@srv-us2204a:~$ sudo mv phpMyAdmin-и нажимаю клавишу TAB
phpMyAdmin-5.2.0-all-languages/         phpMyAdmin-latest-all-languages.tar.gz
ekzorchik@srv-us2204a:~$ sudo mv phpMyAdmin-5.2.0-all-languages/ /var/www/html/phpmyadmin
ekzorchik@srv-us2204a:~$

создаю временную директорию для phpmyadmin:

ekzorchik@srv-us2204a:~$ sudo mkdir -p /var/www/html/phpmyadmin/tmp

Шаг №11: Добавляю Blowfish для авторизации через Cookie:

ekzorchik@srv-us2204a:~$ sudo cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php

создаю/генерирую 32-битную случайную строку:

На заметку: Если строка больше 32 символов, то после авторизации в phpMyAdmin в самом низу страницы будет ошибка вида "The secret passphrase in configuration (blowfish_secret) is not the correct length. It should be 32 bytes long."

ekzorchik@srv-us2204a:~$ openssl rand -base64 32
pw3aUWRZMoEYUJNIAedEDIQMsZnO9ZEtxcL+8yY2dP0=
ekzorchik@srv-us2204a:~$

либо так (с этим способом ошибки выше нет если использовать утилиту openssl):

ekzorchik@srv-us2204a:~$ export SECRET=`php -r 'echo base64_encode(random_bytes(24));'`
ekzorchik@srv-us2204a:~$ echo $SECRET
upB1k/e8HauhGth4K0ls/6e9rYen69IQ
ekzorchik@srv-us2204a:~$ sudo nano /var/www/html/phpmyadmin/config.inc.php
/** $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
$cfg['blowfish_secret'] = 'pw3aUWRZMoEYUJNIAedEDIQMsZnO9ZEtxcL+8yY2dP0='; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
/** в самом конце добавляю строку указания на временную директорию
$cfg['TempDir'] = '/var/www/html/phpmyadmin/tmp';
ekzorchik@srv-us2204a:~$ sudo chown -R www-data:www-data /var/www/html/
ekzorchik@srv-us2204a:~$ sudo find /var/www/html/phpmyadmin/ -type d -exec chmod 755 {} \;
ekzorchik@srv-us2204a:~$ sudo find /var/www/html/phpmyadmin/ -type f -exec chmod 644 {} \;

Шаг №12: Создаю конфигурацию для сайта, обслуживающего сервер phpmyadmin:

ekzorchik@srv-us2204a:~$ sudo nano /etc/apache2/sites-available/phpmyadmin.conf
<VirtualHost *:80>
ServerAdmin support@ekzorchik.ru
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /pma /var/www/html/phpmyadmin

<Directory /var/www/html/phpmyadmin>
DirectoryIndex index.php

</Directory>

</VirtualHost> 
ekzorchik@srv-us2204a:~$ sudo a2ensite phpmyadmin.conf
Enabling site phpmyadmin.
To activate the new configuration, you need to run:
  systemctl reload apache2
ekzorchik@srv-us2204a:~$ sudo systemctl restart apache2
ekzorchik@srv-us2204a:~$

Шаг №13: Создаю Basic Auth связку на доступ к странице Администрирования phpMyAdmin:

ekzorchik@srv-us2204a:~$ sudo htpasswd -c /etc/apache2/.htpasswd.setup ekzorchik
New password: 712mbddr@
Re-type new password: 712mbddr@
Adding password for user ekzorchik
ekzorchik@srv-us2204a:~$ sudo apache2ctl configtest
Syntax OK
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo chown www-data:www-data /etc/apache2/.htpasswd.setup
ekzorchik@srv-us2204a:~$ sudo systemctl restart apache2

Шаг №14: Теперь, когда Web-сервис phpMyAdmin поднят Вы можете посмотреть и начать использовать (предварительно включив модуль если не включили: sudo a2enmod rewrite) его, для этого со своего рабочего места открываем либо по IP, либо по DNS обращение к системе Ubuntu 22.04 Server обращение через браузер, к примеру, Google Chrome:

ekzorchik@srv-us2204a:~$ ip r | awk '{print $9}' | head -n 1

172.35.35.7

ekzorchik@srv-us2204a:~$

Web-интерфейс на доступ в phpMyAdmin

и авторизуюсь

  • Пользователь: root
  • Пароль: 712mbddr@

и нажимаю "Авторизация"

Успешная авторизация под MySQL Login: root в phpMyAdmin

Шаг №15: Нельзя оставляю форму авторизации в phpMyAdmin наедине с интернет пользователями, лучше ее закрыть Basic Auth аутентификацией:

ekzorchik@srv-us2204a:~$ sudo nano /etc/apache2/apache2.conf
<Directory /var/www/>
# возвращаю, как было по умолчанию
        Options Indexes FollowSymLinks
#       Options FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
ekzorchik@srv-us2204a:~$ sudo a2enmod authz_host access_compat
Considering dependency authz_core for authz_host:
Module authz_core already enabled
Module authz_host already enabled
Considering dependency authn_core for access_compat:
Module authn_core already enabled
Module access_compat already enabled
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo nano /etc/apache2/sites-available/phpmyadmin.conf
<VirtualHost *:80>
ServerAdmin support@ekzorchik.ru
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /pma /var/www/html/phpmyadmin
<Directory /var/www/html/phpmyadmin>
DirectoryIndex index.php
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
</Directory>
</VirtualHost>
ekzorchik@srv-us2204a:~$ sudo htpasswd -c /etc/apache2/.htpasswd ekzorchik
New password: 712mbddr@
Re-type new password: 712mbddr@
Adding password for user ekzorchik
ekzorchik@srv-us2204a:~$ sudo chown  www-data:www-data /etc/apache2/.htpasswd
ekzorchik@srv-us2204a:~$ sudo bash -c "cat /etc/apache2/.htpasswd"
ekzorchik:$apr1$6RtSatxY$rKl4xRjPsjvaVdbk58FFz0
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ sudo apache2ctl configtest
Syntax OK
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo systemctl restart apache2

Basic Auth аутентификация на доступ к странице phpMyAdmin

ну а после авторизуемся уже в phpMyAdmin, как

  • Пользователь: root
  • Пароль: 712mbddr@

и нажимаем "Авторизация"

Итого. Я практически разобрал, как развернуть Web-сервис phpMyAdmin на Ubuntu 22.04 Server c теми нюансами которые у меня в процессе возникали, это так сказать заметка на будущее использование, а пока собственно все, с уважением автор блога Олло Александр aka ekzorchik.