В этом руководстве я покажу вам, как установить phpMyAdmin с Nginx, MariaDB и PHP7.2 (LEMP) на Ubuntu 18.04. phpMyAdmin — это бесплатное и открытое программное обеспечение для управления базами данных через веб, написанное на PHP. Он предоставляет графический веб-интерфейс для управления базами данных MySQL или MariaDB. Вы также узнаете, как включить двухфакторную аутентификацию в phpMyAdmin.
Содержание статьи
- 1 Предварительные требования
- 2 Шаг 1: Загрузка и установка phpMyAdmin
- 3 Шаг 2: Создание блока сервера Nginx
- 4 Шаг 3: Установка сертификата TLS
- 5 Проверьте свой сертификат TLS
- 6 Исправление ошибки входа
- 7 Использование другого порта
- 8 Установка последней стабильной версии phpMyAdmin
- 9 Включение двухфакторной аутентификации
- 10 Автоматическое обновление сертификата
Предварительные требования
Для выполнения этого руководства вам нужно иметь ОС Ubuntu 18.04 на вашем локальном компьютере или на удаленном сервере.
Предполагается, что вы уже установили стек LEMP на Ubuntu 18.04. Если нет, пожалуйста, ознакомьтесь с следующим руководством.
Пройдя этот этап, приступим к установке phpMyAdmin.
Шаг 1: Загрузка и установка phpMyAdmin
phpMyAdmin включен в репозиторий программного обеспечения Ubuntu 18.04, поэтому мы можем легко установить его следующей командой.
sudo apt update sudo apt install phpmyadmin
Во время установки вас попросят выбрать веб-сервер для конфигурации. Nginx отсутствует в списке, поэтому нажмите клавишу Tab и нажмите OK, чтобы пропустить этот шаг.

Затем выберите «Yes», чтобы создать новую базу данных, и позвольте dbconfig-common настроить её.

Это также создаст нового пользователя базы данных с именем phpmyadmin. Установите для этого пользователя пароль.

После завершения этого процесса будет создана новая база данных с именем phpmyadmin, и пользователь базы данных phpmyadmin получит необходимые привилегии для управления этой базой данных. Если вас, как и меня, интересует, вы можете войти в MariaDB и проверить, какие привилегии были предоставлены пользователю phpmyadmin.
Вы можете использовать следующую команду для входа на сервер MariaDB.
sudo mysql -u root
Затем проверьте привилегии.
show grants for phpmyadmin@localhost;
Как видно, пользователь phpmyadmin имеет все привилегии на базе данных phpmyadmin. Теперь вы можете выйти, выполнив:
exit;
Шаг 2: Создание блока сервера Nginx
Чтобы иметь доступ к веб-интерфейсу phpMyAdmin, нам нужно создать блок сервера Nginx, выполнив следующую команду.
sudo nano /etc/nginx/conf.d/phpmyadmin.conf
Настроим его так, чтобы мы могли получить доступ к phpMyAdmin через поддомен. Вставьте следующий текст в файл. Замените pma.example.com на ваш фактический поддомен и не забудьте создать для него запись A.
server { listen 80; listen [::]:80; server_name pma.example.com; root /usr/share/phpmyadmin/; index index.php index.html index.htm index.nginx-debian.html; access_log /var/log/nginx/phpmyadmin_access.log; error_log /var/log/nginx/phpmyadmin_error.log; location / { try_files $uri $uri/ /index.php; } location ~ ^/(doc|sql|setup)/ { deny all; } location ~ \.php$ { fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /\.ht { deny all; } }
Ваши файлы phpMyAdmin находятся в каталоге /usr/share/phpmyadmin/. Сохраните и закройте файл. Затем протестируйте конфигурации Nginx.
sudo nginx -t
Если тест прошел успешно, перезагрузите Nginx, чтобы изменения вступили в силу.
sudo systemctl reload nginx
Теперь вы должны иметь доступ к веб-интерфейсу phpMyAdmin по адресу
pma.example.com

Обратите внимание, что phpMyAdmin не будет работать в последних версиях Firefox. Вы можете использовать Google Chrome для посещения веб-интерфейса phpMyAdmin. Прежде чем вводить учетные данные пользователя в форму входа, давайте включим HTTPS.
Шаг 3: Установка сертификата TLS
Для обеспечения безопасности веб-интерфейса phpMyadmin мы можем установить бесплатный сертификат TLS от Let’s Encrypt. Установите клиент Let’s Encrypt из репозитория программного обеспечения Ubuntu 18.04, как показано ниже:
sudo apt install certbot python3-certbot-nginx
Python3-certbot-nginx — это плагин Nginx для Certbot. Теперь выполните следующую команду для получения и установки сертификата TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --must-staple -d pma.example.com --email your-email-address
- —nginx: Использовать аутентификатор и установщик Nginx
- —agree-tos: Согласиться с условиями использования Let’s Encrypt
- —redirect: Добавить 301 перенаправление.
- —hsts: Добавить заголовок Strict-Transport-Security в каждый HTTP-ответ.
- —staple-ocsp: Включает OCSP Stapling.
- —must-staple: Добавляет расширение OCSP Must Staple к сертификату.
- Флаг -d за которым следует список имен доменов, разделенных запятыми. Вы можете добавить до 100 имен доменов.
- —email: Email, используемый для регистрации и контактов по восстановлению.
Вам будет предложено, хотите ли вы получать электронные письма от EFF (Electronic Frontier Foundation). После выбора Y или N ваш сертификат TLS будет автоматически получен и настроен, что подтверждается сообщением ниже.

Проверьте свой сертификат TLS
Перейдите на ssllabs.com, чтобы проверить свой сертификат TLS и конфигурацию. Вы должны получить A+, потому что HSTS включен.

Исправление ошибки входа
Если вы входите с учетной записью root в MariaDB, вы можете увидеть следующую ошибку.
#1698 - Access denied for user 'root '@'localhost'
mysqli_real_connect(): (HY000/1698): Access denied for user 'root '@'localhost'
Если вы входите с пользователем phpmyadmin, вы не увидите вышеуказанную ошибку. Однако пользователь phpmyadmin может использоваться только для управления базой данных phpmyadmin. Причина ошибки заключается в том, что по умолчанию пользователь root в MariaDB аутентифицируется с использованием плагина unix_socket, а не с использованием плагина mysql_native_password. Чтобы избежать этой проблемы, мы можем создать еще одного администратора и предоставить ему все привилегии.
Войдите на сервер MariaDB из командной строки.
sudo mariadb -u root
Создайте пользователя-администратора с аутентификацией по паролю.
create user admin@localhost identified by 'ваш-выбранный-пароль';
Предоставьте все привилегии на все базы данных.
grant all privileges on *.* to admin@localhost with grant option;
Сбросьте привилегии и выйдите;
flush privileges; exit;
Теперь вы можете войти в phpMyAdmin с учетной записью admin и управлять всеми базами данных.
Использование другого порта
Использование другого порта вместо стандартного порта 443 может быть выгодным, потому что вы можете закрыть этот порт, когда не используете phpMyAdmin, чтобы предотвратить взлом, или вы можете указать, какие IP-адреса имеют доступ к этому порту. Это очень просто настроить. Просто откройте файл блока сервера.
sudo nano /etc/nginx/conf.d/phpmyadmin.conf
Найдите следующие две строки:
listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot
Измените 443 на другой порт, например, 8443.
listen [::]:8443 ssl ipv6only=on; # managed by Certbot listen 8443 ssl; # managed by Certbot
Вы также можете добавить http2, чтобы включить протокол HTTP/2.
listen [::]:8443 ssl http2 ipv6only=on; # managed by Certbot listen 8443 ssl http2; # managed by Certbot
Сохраните и закройте файл. Затем протестируйте конфигурации Nginx.
sudo nginx -t
Если тест прошел успешно, перезагрузите Nginx, чтобы изменения вступили в силу.
sudo systemctl reload nginx
Теперь вы можете получить доступ к phpMyAdmin через:
https://pma.example.com:8443

Установка последней стабильной версии phpMyAdmin
Репозиторий Ubuntu 18.04 поставляется с PHP7.2 и phpMyAdmin 4.6.6. Вы можете проверить версию phpMyAdmin в заголовке браузера.
Однако PHP7.2 поддерживается phpMyAdmin начиная с версии 4.7.4. При использовании phpMyAdmin 4.6.6 с PHP7.2 вы увидите следующее предупреждение.
parameter must be an array or an object that implements countable

Для устранения проблемы совместимости мы можем установить phpMyAdmin 4.8, который является последней стабильной версией на момент написания этого сообщения. Скачайте его с помощью wget.
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.0.1/phpMyAdmin-4.8.0.1-all-languages.zip
Затем распакуйте его.
sudo apt install unzip unzip phpMyAdmin-4.8.0.1-all-languages.zip
Сделайте резервную копию оригинальных файлов phpMyAdmin.
sudo mv /usr/share/phpmyadmin /usr/share/phpmyadmin-original
Переместите phpMyadmin 4.8 в каталог /usr/share/phpmyadmin/.
sudo mv phpMyAdmin-4.8.0.1-all-languages /usr/share/phpmyadmin
Отредактируйте файл конфигурации поставщика.
sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php
Найдите следующую строку.
define('CONFIG_DIR', '');
define('CONFIG_DIR', '/etc/phpmyadmin/');
Сохраните и закройте файл. Затем создайте папку tmp для хранения файлов кэша.
sudo mkdir /usr/share/phpmyadmin/tmp
Измените владельца и группу владельца на www-data.
sudo chown www-data:www-data /usr/share/phpmyadmin/tmp
Теперь вы можете использовать phpMyAdmin 4.8 без перезагрузки или перезапуска Nginx.
Включение двухфакторной аутентификации
Вы также можете усилить безопасность phpMyAdmin, включив двухфакторную аутентификацию, которая была добавлена в версии 4.8. Чтобы включить ее, войдите в phpMyAdmin. Затем перейдите в Настройки -> Двухфакторная аутентификация и выберите Приложение аутентификации (2FA).

После нажатия кнопки Настроить двухфакторную аутентификацию, вам будет предложен QR-код, который необходимо отсканировать с помощью приложения двухфакторной аутентификации на вашем телефоне.

Google Authenticator — популярное приложение для двухфакторной аутентификации, но я рекомендую FreeOTP, которое является открытым приложением для двухфакторной аутентификации, разработанным Red Hat. Как только вы введете код аутентификации, сгенерированный вашим приложением для двухфакторной аутентификации, двухфакторная аутентификация будет включена. Если вы выйдете и войдете снова, вам потребуется ввести код аутентификации, в дополнение к имени пользователя и паролю.

Автоматическое обновление сертификата
Чтобы автоматически обновлять сертификат Let’s Encrypt, просто отредактируйте файл crontab пользователя root.
sudo crontab -e
Затем добавьте следующую строку в конец файла.
@daily certbot renew --quiet && systemctl reload nginx
Флаг —quiet подавит стандартный вывод. Если вы хотите получать стандартные ошибки, добавьте следующую строку в начало файла crontab.
MAILTO=ваш-адрес-электронной-почты
Перезагрузка Nginx необходима, чтобы предоставить новый сертификат клиентам.
Надеюсь, эта статья помогла Вам установить phpMyAdmin с Nginx на Ubuntu 18.04 LTS. Как всегда, если вы нашли этот пост полезным, подпишитесь на наш бесплатный бюллетень, чтобы получать больше советов и хитростей.

