Установка phpMyAdmin на Linux CentOS
Используемые термины: phpMyAdmin, Linux, CentOS
В данной инструкции рассмотрим процесс установки phpMyAdmin на CentOS версий 8 и 7.
Устанавливаем phpMyAdmin
С помощью репозитория
Вручную скачав с сайта разработчика
Необходимые модули PHP
Используем виртуальные домены
С сервером NGINX
Для Apache
Проверяем работу phpMyAdmin
Дополнительная настройка
Читаем также
1. Установка phpMyAdmin
Установка может быть выполнена из репозитория (для CentOS 7) или путем загрузки портала с сайта разработчика (CentOS 8 или CentOS 7). Рассмотрим оба варианта.
а) Установка из репозитория
Данный вариант доступен только для CentOS 7.
Устанавливаем расширенный репозиторий EPEL:
yum install epel-release
Устанавливаем phpMyAdmin:
yum install phpmyadmin
* если мы увидим ошибку «пакета с названием phpmyadmin не найдено», проверяем еще раз наличие установленного репозитория epel.
б) Установка вручную
Данный способ универсальный — он подходит для CentOS 8 и CentOS 7.
Устанавливаем пакеты, необходимые для скачивания и распаковки архива:
yum install wget unzip
Переходим на сайт разработчика phpMyAdmin и копируем ссылку на нужную нам версию, например, последнюю:
Воспользовавшись скопированной ссылкой, скачиваем архив с установочными файлами:
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip
* на момент обновления инструкции, последняя стабильная версия была 5.2.1.
Распаковываем скачанный архив:
unzip phpMyAdmin-*-all-languages.zip
Создаем каталог для phpmyadmin, например:
mkdir /usr/share/phpMyAdmin
... и переносим в него содержимое распакованного архива:
mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/
Задаем владельца для каталога:
chown -R apache:apache /usr/share/phpMyAdmin
* как правило, сервис, которых обрабатываем php-запросы работает от пользователя apache.
2. Установка модулей php
Для корректной работы портала управления СУБД необходимо установить следующие расширения php:
yum install php-json php-mbstring php-mysqli
* скорее всего, они уже будут установлены, если установка выполнялась из репозитория.
После установки может понадобиться перезапуск сервера, который обрабатываем php.
а) php-fpm:
systemctl restart php-fpm
б) Apache:
systemctl reload httpd
3. Настройка виртуального домена
Настройка виртуального домена зависит от веб-сервера, который мы используем. Разберем примеры для NGINX и Apache.
NGINX
В данном примере мы рассмотрим настройку связки NGINX + php-fpm. Также мы сконфигурируем два варианта прослушивания — виртуальный домен и с добавлением пути /phpmyadmin.
1) На отдельном домене
Создаем конфигурационный файл для виртуального домена:
vi /etc/nginx/conf.d/phpMyAdmin.conf
server {
listen 80;
server_name phpmyadmin.dmosk.local;
set $root_path /usr/share/phpMyAdmin;
location / {
root $root_path;
index index.php;
}
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
fastcgi_read_timeout 300;
}
}
* где:
- listen — порт, на котором слушает nginx для данного домена.
- server_name — домен для которого применяются настройки server. В данном примере phpmyadmin.dmosk.local.
- root_path — переменная, в которую мы заносим наш путь до phpMyAdmin.
- location / — настройки для запросов к серверу. В конкретном случае, мы используем root_path в качестве корневой директории для скриптов сайта; опция index нужна для поиска скрипта по умолчанию, если нет явного обращения клиентом.
- location ~ \.php$ — параметры для обработки скриптов php. В нашем случае, мы обрабатываем скрипты с помощью php-fpm. Стоить обратить внимание, что последний может слушать на порту (по умолчанию, 9000) или через сокет-файл. В примере выше используется последний вариант, а способ с портом закомментирован.
- fastcgi_pass — данный параметр важен и зависит от настройки php-fpm. Если последний слушает на порту, мы задаем первый вариант (который закомментирован), иначе — указываем путь до сокетного файла.
Проверяем корректность настройки nginx:
nginx -t
... и если ошибок нет, перезапускаем сервис:
systemctl restart nginx
2) С помощью location /phpmyadmin
Открываем конфигурационный файл для домена по умолчанию:
vi /etc/nginx/conf.d/default.conf
* в вашей ситуации, файл с доменом по умолчанию может быть другим.
Добавляем location ^~ /phpmyadmin со следующими настройками:
server {
listen 80 default_server;
...
location /phpmyadmin {
root /usr/share/;
index index.php;
location ~ ^/phpmyadmin/(.+\.php)$ {
root /usr/share/;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
}
* где:
- root — каталог, в котором находится каталог с phpmyadmin с порталом.
- location ~ \.php$ — параметры для обработки скриптов php. В нашем случае, мы обрабатываем скрипты с помощью php-fpm. Стоить обратить внимание, что последний может слушать на порту (по умолчанию, 9000) или через сокет-файл. В примере выше используется последний вариант, а способ с портом закомментирован.
- fastcgi_pass — данный параметр важен и зависит от настройки php-fpm. Если последний слушает на порту, мы задаем первый вариант (который закомментирован), иначе — указываем путь до сокетного файла.
Проверяем корректность настройки nginx:
nginx -t
... и если ошибок нет, перезапускаем сервис:
systemctl restart nginx
3) Проверка настройки php-fpm
После настройки nginx проверяем настройку php-fpm:
vi /etc/php-fpm.d/www.conf
Так как в нашем примере мы используем подключение на основе сокетов, то настройка опции listen должна быть такой:
listen = /run/php-fpm/www.sock
* на основе порта — listen = 127.0.0.1:9000.
Если конфигурационный файл пришлось менять, перезапускаем сервис:
systemctl restart php-fpm
Apache
Также как для NGINX мы сконфигурируем два варианта прослушивания — виртуальный домен и с алиасом /phpmyadmin.
1. На отдельном домене
Создаем конфигурационный файл для виртуального домена:
vi /etc/httpd/conf.d/phpMyAdmin.conf
<VirtualHost *:80>
Define root_domain phpmyadmin.dmosk.local
Define root_path /usr/share/phpMyAdmin
ServerName ${root_domain}
ServerAlias www.${root_domain}
DocumentRoot ${root_path}
<Directory /usr/share/phpMyAdmin>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
Проверяем корректность настройки apache:
apachectl configtest
... и если ошибок нет, перезапускаем сервис:
systemctl reload httpd
2. Алиас /phpmyadmin
Создадим конфигурационный файл:
vi /etc/httpd/conf.d/phpmyadmin.conf
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
Require all granted
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
<Directory /usr/share/phpMyAdmin/setup/>
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
Require ip 127.0.0.1
Require ip ::1
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
<Directory /usr/share/phpMyAdmin/libraries/>
<IfModule mod_authz_core.c>
# Apache 2.4
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from None
</IfModule>
</Directory>
<Directory /usr/share/phpMyAdmin/setup/lib/>
<IfModule mod_authz_core.c>
# Apache 2.4
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from None
</IfModule>
</Directory>
<Directory /usr/share/phpMyAdmin/setup/frames/>
<IfModule mod_authz_core.c>
# Apache 2.4
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from None
</IfModule>
</Directory>
Проверяем корректность настройки apache:
apachectl configtest
... и если ошибок нет, перезапускаем сервис:
systemctl reload httpd
4. Проверка
Открываем браузер и переходим по адресу нашего виртуального домена — в нашем случае, http://phpmyadmin.dmosk.local/ или http://<IP-адрес нашего сервере>/phpmyadmin (если настраивали с помощью домена по умолчанию для запросов на /phpmyadmin).
Адрес phpmyadmin.dmosk.local должен разрешаться в IP-адрес с помощью DNS или локального файла hosts.
В итоге, мы должны увидеть страницу с формой ввода логина и пароля:
Необходимо ввести учетные данные для подключения к СУБД.
5. Настройка phpMyAdmin
Настройку портала для управления базой данных MySQL/MariaDB можно выполнить с помощью конфигурационного файла config.inc.php, который находится в корне портала (или /etc/phpmyadmin/config.user.inc.php в контейнере docker). По умолчанию, его может не быть — вместо него можно увидеть файл config.sample.inc.php. Это пример конфигурационного файла, который можно использовать, чтобы разобраться с настройкой и опциями.
Рассмотрим некоторые примеры.
Тюнинг
Наш phpMyAdmin работает, но не оптимально. Внесем коррекции в его конфигурационный файл.
Для начала сформируем случайную последовательность символов — их будем использовать в качестве парольной фразы:
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 ; echo ''
После копируем полученную последовательность и создаем конфигурационный файл phpMyAdmin:
vi /usr/share/phpMyAdmin/config.inc.php
Приводим его к виду:
<?php
$cfg['blowfish_secret'] = '1IQofoKj440tR1rTcvWvwF6opgT5lsOJ';
$cfg['TempDir'] = './tmp/';
?>
* где 1IQofoKj440tR1rTcvWvwF6opgT5lsOJ — парольная фраза. ./tmp/ — путь для хранения временных файлов.
Создаем каталог для хранения временных файлов:
mkdir /usr/share/phpMyAdmin/tmp
Задаем для нее правильного владельца и права:
chown apache:apache /usr/share/phpMyAdmin/tmp
chmod 755 /usr/share/phpMyAdmin/tmp
Удаленный сервер
Может быть так, что phpMyAdmin установлен на один сервер, а сервер баз данных на другом (или их несколько). Тогда настройка может быть такой:
<?php
...
$i++;
$cfg['Servers'][$i]['host'] = '192.168.0.15';
?>
* где 192.168.0.15 — адрес сервера, к которому будет идти подключение.
Или для нескольких серверов:
<?php
...
$i++;
$cfg['Servers'][$i]['verbose'] = 'Server 1';
$cfg['Servers'][$i]['host'] = '192.168.0.15';
$i++;
$cfg['Servers'][$i]['verbose'] = 'Server 2';
$cfg['Servers'][$i]['host'] = '192.168.0.17';
?>
* в данном примере мы будем давать возможность выбора между серверами 192.168.0.15 и 192.168.0.17. Опция verbose позволяет задать отображаемое имя сервера в строке выбора.