Рассмотрим как установить и настроить последнюю версию PhpMyAdmin из исходных данных. Web сервер работает под управлением Nginx. Пожалуй это самый востребованный сервис для веб разработчиков.
Содержание:
- 1 Введение
- 2 Исходники PhpMyAdmin
- 3 Создание структуры каталогов
- 4 Скачивание и распаковка архива
- 5 Настройка Nginx для PhpMyAdmin
- 6 Настройка ротации логов
- 7 Настройка папки для хранения сессий PHP
- 8 Создание файла config.inc.php для PhpMyAdmin
- 9 Один PhpMyAdmin для разных серверов
- 10 Создание базы в PhpMyAdmin
- 11 Заключение
Введение
В этой статье мы установим из исходников PhpMyAdmin работающий на веб сервере под управлением Nginx.
Во всех система можно установить этот пакет из репозиториев, но к сожалению версии там не всегда последние и бывают проблемы с настройкой. Вариант установки из исходников универсальный и подойдет практически для любой системы.
В данном примере за основу взять вариант настройки на системах CentOS.
Перед тем как устанавливать PhpMyAdmin необходимо что бы в системе были установлены сервисы Nginx, PHP и MariaDB.
Ссылки на статьи в который вы узнаете как можно настроить всё необходимое:
Устанавливать будем с официального сайта PhpMyAdmin, где вы всегда сможете взять последнюю версию.
Всегда используете загрузку с официальных источников, так как это самый безопасный вариант.
Создание структуры каталогов
Создадим необходимую структуру каталогов использую стандартное местоположение web ресурсов на системах Linux:
mkdir -p /var/www/pma.sevo44.ru/{www,log,UploadDir,SaveDir} -p -- команда которая создат всю структуру каталогов.
Выполнив эту команду мы создали структуру каталогов:
- pma.sevo44.ru — общая папку для всех файлов web сервера;
- www — папка в которой будет находится рабочие файлы;
- log — папка куда будем писать логи;
- UploadDir — папка куда можно ложить базы для загрузки;
- SaveDir — папка куда можно сохранять бэкапы.
Скачивание и распаковка архива
Для загрузки файлов через консоль установим необходимый пакет:
yum -y install wget
Перейдем в необходимую папку и скачаем туда нужную версию, выполнив по очереди команды:
cd /var/www/pma.sevo44.ru wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip
Установим без вопросов пакет который нам даст возможность распаковать архивы zip:
yum install -y unzip
Распакуем полученный архив в необходимое место:
unzip /var/www/pma.sevo44.ru/phpMyAdmin-4.9.1-all-languages.zip -d /var/www/pma.sevo44.ru/
Скопируем все файлы из папки phpMyAdmin-4.9.1-all-languages в папку www:
cp -rp /var/www/pma.sevo44.ru/phpMyAdmin-4.9.1-all-languages/* /var/www/pma.sevo44.ru/www/
Дадим необходимые права для Nginx на все папки и файлы:
chown -R nginx:nginx /var/www/pma.sevo44.ru
Все данные готовы! Дальше необходимо настроить Nginx для работы PhpMyAdmin.
Настройка Nginx для PhpMyAdmin
Конфигурационый фал Nginx показан с учетом настройки сервисов PHP и Nginx описаных на данном сайте.
Для начала нам необходимо определится с доменным именем, на котором будет работать наша система управления базами данных. В нашем случае используется домен sevo44, где по адресу pma.sevo44.ru и будет работать PhpMyAdmin.
Конфигурационный файл pma.sevo44.ru.conf, для домена третьего уровня создаем в папке /etc/nginx/conf.d/ со следующим содержанием:
vim /etc/nginx/conf.d/pma.sevo44.ru.conf = необходимые данные для внесения = ### ssl pma.sevo44.ru #server { #listen 80; #server_name pma.sevo44.ru www.pma.sevo44.ru; #return 301 https://$server_name$request_uri; # редирект обычных запросов на https #} server { listen 80; #listen 443 ssl http2; server_name pma.sevo44.ru www.pma.sevo44.ru; access_log /var/www/pma.sevo44.ru/log/pma-joomla.sevo44.ru-access_log main; error_log /var/www/pma.sevo44.ru/log/pma-joomla.sevo44.ru-error_log info; root /var/www/pma.sevo44.ru/www/; index index.php; ### Включение сжатия GZIP ### Если используется NGINX proxy надо настраивать на нём!!! gzip on; gzip_static on; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf; gzip_comp_level 6; gzip_proxied any; gzip_min_length 1000; gzip_disable "msie6"; gzip_vary on; ### ssl #ssl_certificate /etc/letsencrypt/live/pma.sevo44.ru/fullchain.pem; #ssl_certificate_key /etc/letsencrypt/live/pma.sevo44.ru/privkey.pem; #ssl_session_timeout 5m; #ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #ssl_dhparam /etc/ssl/certs/dhparam.pem; #ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; #ssl_prefer_server_ciphers on; #ssl_session_cache shared:SSL:10m; #location /.well-known/acme-challenge/ { #root /var/www/ssl/pma.sevo44.ru/; #} ### Авторизация по паролю используя basic auth auth_basic "Restricted Content"; auth_basic_user_file /etc/nginx/.htpasswd; location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; #fastcgi_param HTTPS on; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } }
Обращаю внимание на то что в файле закоментированы параметры которые позволяют работать PhpMyAdmby c использованием сертификата ssl. Узнать про то как можно настроить работу сайта в защищеном режиме можно из статьи SSL бесплатный для сайта Nginx.
Создаем файл с логином и паролем для доступа:
=== Команда которая создаст пользователя pma === sh -c "echo -n 'pma:' >> /etc/nginx/.htpasswd" === Команда для создания пароля пользователю pma === sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd" = Вывод команды с пояснениями = Password: пароль Verifying - Password: повтор пароля
Проверим на правильность настройки и перезагрузим Nginx:
nginx -t = вывод команды = nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload
Настройка ротации логов
Все файлы правил для ротации находятся в папке /etc/logrotate.d. добавим туда необходимый нам файл с нужными параметрами:
vim /etc/logrotate.d/pma-sevo44 = необходимые данные для внесения = /web/sites/pma.sevo44.ru/log/*.log { daily missingok rotate 52 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
Сохраним и применим изменения без перезагрузки:
logrotate /etc/logrotate.conf
По такому принципу настраивается ротация для любых данных, но обычно этот механизм настраивают для логов, хотя он может работать и с другими файлами.
Настройка папки для хранения сессий PHP
Без наличия этой папки с необходимыми правами для Nginx, данные не будут обрабатываться, о чем будет показывать страница с ошибкой при попытке зайти по адресу http://pma.sevo44.ru.
phpMyAdmin — Error |
Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser. session_start(): open(SESSION_FILE, O_RDWR) failed: No such file or directory (2) |
Проверим наличие папки с нужными правами:
=== Переходим в папку ===
cd /var/lib/php/
=== Проверяем наличие и если нет создаем папку ===
ls
= Вывод команды =
opcache peclxml session wsdlcache
mkdir session
=== Назначаем нужны права ===
chown nginx:nginx session/
Предварительная подготовка закончена и осталось лишь настроить сам PhpMyAdmin.
Создание файла config.inc.php для PhpMyAdmin
Вариантов создать файл настроек несколько:
- Переименовать файл config.sample.inc.php в config.inc.php и отредактировать параметры под свои нужды,
- Средствами самого PMA войдя в панели управления под root.
Для меня оптимален второй вариант, так как он нагляден и после настройки блокирует механизм повторной попытки создать файл настроек.
После авторизации под пользователем root, который мы указали при настройке MariaDB, внизу мы увидим сообщение говорящее о необходимости выполнить действия для настройки.
Вначале разберемся с первым сообщением. Как и написано переходим в любую базу. Выберем базу mysgl в меню слева.
Жмем «Узнать причину» почему нет хранилища.
Нажимаем «Создать» и выполнятся все необходимые действия.
Теперь непосредственно создадим средствами панели управления PhpMyAdmin файл настроек config.inc.php.
Переходим по меню сверху «Настройки» и видим блок.
Нажимаем «Скрипт настройки»
Создаем сервер localhost, выбираем язык, и конец строки. Можете пройтись по остальным настройкам и указать всё на свой вкус и цвет.
Смотри результат настроек.
Скачиваем себе файл, закидываем в корневую папку PhpMyAdmin. Откроем посмотреть как он выглядит:
vim /var/www/pma.sevo44.ru/www/config.inc.php = вывод команды с пояснениями = <?php /* * Generated configuration file * Generated by: phpMyAdmin 4.9.1 setup script * Date: Fri, 18 Oct 2019 16:38:52 +0000 */ /* Servers configuration */ $i = 0; /* Server: scs [1] */ $i++; $cfg['Servers'][$i]['verbose'] = 'scs'; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['socket'] = ''; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = ''; $cfg['Servers'][$i]['password'] = ''; /* Server: wp [2] */ $i++; $cfg['Servers'][$i]['verbose'] = 'wp'; $cfg['Servers'][$i]['host'] = '10.10.0.3'; $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['socket'] = ''; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = ''; $cfg['Servers'][$i]['password'] = ''; /* End of servers configuration */ $cfg['blowfish_secret'] = 'v,r}cXT_Wq{ucPOqIfF`?WCa?mgFgCZ_'; $cfg['DefaultLang'] = 'ru'; $cfg['ServerDefault'] = 1; $cfg['UploadDir'] = '/var/www/pma.sevo44.ru/UploadDir/'; $cfg['SaveDir'] = '/var/www/pma.sevo44.ru/SaveDir/'; ?>
Последнее что нам осталось сделать, это дать права Nginx для этого файла. Так как все файлы должны иметь владельца Nginx повторим команду команду которую делали ранее:
chown -R nginx:nginx /var/www/pma.sevo44.ru
Настройка закончилась и теперь при попытке повторно создать этот файл будет выскакивать сообщение:
Один PhpMyAdmin для разных серверов
Обна из удобных возможностей программы это возможность имея одну версию подключатся к базам данных работающих на разных серверах.
В конфигурации выше был указан следующий код который отвечает за возможность подключатся к удаленым базам данных:
/* Server: wp [2] */ $i++; $cfg['Servers'][$i]['verbose'] = 'wp'; - отображение в меню выбора $cfg['Servers'][$i]['host'] = '10.10.0.3'; - ip сервера с убаленой db $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['socket'] = ''; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = ''; $cfg['Servers'][$i]['password'] = '';
Для реализации этой возможности необходимо сделать еще две вещи:
- Добавить параметр bind-address=0.0.0.0 в конфигурационном файле самого сервера баз MariaDB разрешающий подключатся с любого адреса (или укажите конкретный IP) в разделе [mysqld] ;
- Сделать необходимые права для пользователя баз данных.
О том как выполнить данные требования почитайте в статье MariaDB работа из консоли.
Создание базы в PhpMyAdmin
Для удобства разграничения прав лучше создавать базу с правами на одного пользователя.
Создадим пользователя со своей базой данных:
- Выбираем «Учётные записи пользователей» — «Добавить учетную запись пользователя«,
- Создаем имя, пароль и ставим галочку «Создать базу данных с таким же именем и предоставить на неё все привилегии.» и в самом низу нажимаем «Вперёд«
База с правами создана и теперь эти данные можете предоставить по требованию для работы с ней.
Имейте ввиду что данные пользователя прописываются в файлах сайта и при смене пароля не забывайте их менять!
Удаление пользователя с его базой данных выполняется аналогичным способом.
Заключение
После всех выполненных действий мы получили последнюю стабильную версию PhpMyAdmin которая будет удобна в работе с администрированием баз данных.
Здравствуйте.
Спасибо за статью, очень доходчиво, но, к сожалению, не могу разобраться.
Подскажите, плз., что сделал не так (копипастил ваши конфиги)?
В броузере ввожу адрес «http://ip/pma.server.org.local». Вижу: «404 Not found»
В логе сообщение о неправильным пути к корневой папке сайта, путь, как-бы сдвоенный.
…»/web/sites/pma.server.org.local/www/pma.server.org.local» failed (2: No such file or directory)…
Спасибо.
Давайте разбираться. Если в консоли где установлен PhpMyAdmin набрать
что показывает?
Теперь что покажет если на другом компе в сети набрать
После создания виртуального сайта pma, везде, во первых, появляется требование авторизоваться, а после ввода логина/пароля получаю сообщение «404 Bad Gateway». «Везде» — это по адресам IP, и ip/info.php. Если ip/pma.server.org.local — «404 Not Found».
В процессе настройки все соответствовало Вашим инструкциям, по ИП было приветственное сообщение Nginx, ip/info.php отдавал информацию про версию PHP.
Сообщения, о кот. говорил выше, стал получать сразу после создания пользователя «pma», файла с логином и паролем доступа для него, проверки корректности настроек (nginx -t), и перезагрузки «nginx -s reload».