Установка phpMyAdmin на Linux CentOS

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: phpMyAdmin, Linux, CentOS

В данной инструкции рассмотрим процесс установки phpMyAdmin на CentOS версий 8 и 7.

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 и копируем ссылку на нужную нам версию, например, последнюю:

Копируем ссылку на последнюю версию 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.

В итоге, мы должны увидеть страницу с формой ввода логина и пароля:

Страница ввода логина и пароля для входа в phpMyAdmin

Необходимо ввести учетные данные для подключения к СУБД.

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 позволяет задать отображаемое имя сервера в строке выбора.

Читайте также

Как обновить phpMyAdmin на сервере с Linux

Автоматическое формирование списка серверов в phpMyAdmin

# CentOS # Базы данных # Серверы # Управление
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет