phpMyAdmin — это популярное веб-приложение для управления базами данных MariaDB/MySQL через графический интерфейс. Оно позволяет создавать и удалять базы данных, выполнять SQL-запросы, управлять пользователями и привилегиями, импортировать и экспортировать данные без использования командной строки.
В этом руководстве я покажу установку phpMyAdmin с Nginx на Debian 13, 12 и 11 из официального архива upstream (а не из репозитория Debian), чтобы получить последнюю версию и удобную для Nginx структуру каталогов.
Предварительные требования
Перед установкой убедитесь, что:
- У вас есть доменное имя (рекомендуется) или IP-адрес
- Вы имеете права
sudo(администратора)
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.
✅ Ожидаемый вывод в терминале:
root
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
Установка LEMP-стека (Nginx, MariaDB, PHP)
Шаг 1: Обновите систему
sudo apt update && sudo apt upgrade -y
Шаг 2: Установите Nginx, MariaDB, PHP и необходимые расширения
sudo apt install -y nginx mariadb-server mariadb-client php-fpm php-mbstring php-bcmath php-xml php-mysql php-common php-gd php-cli php-curl php-zip curl ca-certificates gpg openssl
Что делают основные пакеты:
nginx— веб-серверmariadb-serverиmariadb-client— база данныхphp-fpm— обработчик PHP (версия будет автоматически выбрана под ваш Debian: 8.4 для Debian 13, 8.2 для Debian 12, 7.4 для Debian 11)php-mysql,php-mbstring,php-xml,php-curl,php-zip,php-gd,php-bcmath— расширения, необходимые phpMyAdmin
Шаг 3: Проверьте, что сервисы работают
Для Debian 13:
systemctl is-active nginx mariadb php8.4-fpm
Для Debian 12:
systemctl is-active nginx mariadb php8.2-fpm
Для Debian 11:
systemctl is-active nginx mariadb php7.4-fpm
✅ Ожидаемый вывод: active для каждого сервиса.
Настройка MariaDB
Шаг 1: Запустите скрипт безопасной настройки
sudo mariadb-secure-installation
Что делает: Интерактивный скрипт для повышения безопасности MariaDB.
Рекомендуемые ответы:
Switch to unix_socket authentication→YChange the root password?→n(оставляем без пароля, т.к. используется unix_socket)Remove anonymous users?→YDisallow root login remotely?→YRemove test database and access to it?→YReload privilege tables now?→Y
Шаг 2: Создайте пользователя для phpMyAdmin
sudo mariadb <<'SQL'
CREATE USER 'pmaadmin'@'localhost' IDENTIFIED BY 'change-this-strong-password';
GRANT ALL PRIVILEGES ON *.* TO 'pmaadmin'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'pmaadmin'@'localhost';
SQL
Что делает: Создаёт пользователя pmaadmin с паролем (замените на свой) и даёт ему полные права на все базы данных.
⚠️ Важно: Не используйте root для входа в phpMyAdmin — на Debian он аутентифицируется через сокет, что не работает через веб-интерфейс.
Проверьте подключение:
mariadb -u pmaadmin -p -e "SELECT VERSION();"
Скачивание и установка phpMyAdmin
Шаг 1: Определите последнюю версию
cd /tmp
curl -fsSL https://www.phpmyadmin.net/home_page/version.txt -o version.txt
VERSION=$(sed -n '1p' version.txt)
BASE_URL="https://files.phpmyadmin.net/phpMyAdmin/${VERSION}"
printf '%s\n' "$VERSION"
Шаг 2: Скачайте архив и контрольные суммы
curl -fL -o "phpMyAdmin-${VERSION}-all-languages.tar.gz" "$BASE_URL/phpMyAdmin-${VERSION}-all-languages.tar.gz"
curl -fL -o "phpMyAdmin-${VERSION}-all-languages.tar.gz.sha256" "$BASE_URL/phpMyAdmin-${VERSION}-all-languages.tar.gz.sha256"
curl -fL -o "phpMyAdmin-${VERSION}-all-languages.tar.gz.asc" "$BASE_URL/phpMyAdmin-${VERSION}-all-languages.tar.gz.asc"
Шаг 3: Проверьте подлинность архива
curl -fL -o phpmyadmin.keyring https://files.phpmyadmin.net/phpmyadmin.keyring
gpg --batch --import phpmyadmin.keyring
sha256sum -c "phpMyAdmin-${VERSION}-all-languages.tar.gz.sha256"
gpg --verify "phpMyAdmin-${VERSION}-all-languages.tar.gz.asc" "phpMyAdmin-${VERSION}-all-languages.tar.gz"
✅ Ожидаемый вывод: OK для контрольной суммы и Good signature для GPG.
Шаг 4: Распакуйте и установите файлы
tar -xzf "phpMyAdmin-${VERSION}-all-languages.tar.gz"
sudo rm -rf /var/www/phpmyadmin
sudo mv "phpMyAdmin-${VERSION}-all-languages" /var/www/phpmyadmin
sudo install -d -o www-data -g www-data -m 0755 /var/lib/phpmyadmin/tmp
Шаг 5: Создайте конфигурационный файл (blowfish_secret)
BLOWFISH_SECRET=$(openssl rand -hex 16)
sudo tee /var/www/phpmyadmin/config.user.inc.php > /dev/null <<EOF
<?php
\$cfg['blowfish_secret'] = '${BLOWFISH_SECRET}';
\$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
EOF
Что делает: Создаёт конфигурационный файл с секретным ключом для cookie-аутентификации и указанием директории для временных файлов.
Шаг 6: Проверьте синтаксис конфигурации
php -l /var/www/phpmyadmin/config.user.inc.php
✅ Ожидаемый вывод: No syntax errors detected
Шаг 7: Установите правильные права
sudo chown -R www-data:www-data /var/www/phpmyadmin /var/lib/phpmyadmin
sudo chmod -R u=rwX,go=rX /var/www/phpmyadmin /var/lib/phpmyadmin
Настройка Nginx для phpMyAdmin
Шаг 1: Создайте конфигурационный файл
Замените pma.example.com на ваше реальное доменное имя:
sudo nano /etc/nginx/sites-available/phpmyadmin.conf
Содержимое файла (адаптируйте под вашу версию PHP):
Для Debian 13:
server {
listen 80;
listen [::]:80;
server_name pma.example.com;
root /var/www/phpmyadmin;
index index.php;
access_log /var/log/nginx/phpmyadmin_access.log;
error_log /var/log/nginx/phpmyadmin_error.log;
location = / {
return 302 /index.php;
}
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Для Debian 12: замените php8.4-fpm.sock на php8.2-fpm.sock
Для Debian 11: замените php8.4-fpm.sock на php7.4-fpm.sock
Шаг 2: Включите сайт
sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -sf /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/phpmyadmin.conf
sudo nginx -t
sudo systemctl reload nginx
Шаг 3: Проверьте, что phpMyAdmin доступен
curl -I http://127.0.0.1/index.php
✅ Ожидаемый вывод: HTTP/1.1 200 OK
Настройка HTTPS с Let’s Encrypt (рекомендуется)
Если ваше доменное имя указывает на сервер, установите SSL-сертификат:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d pma.example.com
Настройка UFW (файрвола)
Если вы используете UFW, откройте необходимые порты:
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Решение типичных проблем
8.1 Ошибка: 404 Not Found или страница приветствия Nginx
Симптом: Вместо phpMyAdmin открывается стандартная страница Nginx.
Причина: Неправильно настроен виртуальный хост или не отключён сайт по умолчанию.
Пошаговое решение:
Шаг 1: Проверьте символические ссылки:
ls -l /etc/nginx/sites-enabled/
Шаг 2: Если default всё ещё активен — удалите его:
sudo rm -f /etc/nginx/sites-enabled/default
sudo systemctl reload nginx
Шаг 3: Убедитесь, что корневая директория существует:
ls -la /var/www/phpmyadmin/index.php
8.2 Ошибка: 502 Bad Gateway
Симптом: Ошибка 502 при попытке открыть phpMyAdmin.
Причина: PHP-FPM не запущен или указан неверный путь к сокету.
Пошаговое решение:
Шаг 1: Проверьте статус PHP-FPM (замените версию на вашу):
systemctl is-active php8.4-fpm # Debian 13
# или
systemctl is-active php8.2-fpm # Debian 12
# или
systemctl is-active php7.4-fpm # Debian 11
Шаг 2: Если неактивен — запустите:
sudo systemctl enable --now php8.4-fpm
Шаг 3: Проверьте путь к сокету в конфигурации Nginx:
grep fastcgi_pass /etc/nginx/sites-available/phpmyadmin.conf
Должно быть:
- Debian 13:
unix:/run/php/php8.4-fpm.sock - Debian 12:
unix:/run/php/php8.2-fpm.sock - Debian 11:
unix:/run/php/php7.4-fpm.sock
8.3 Ошибка: Access denied for user ‘root’@’localhost’
Симптом: Не удаётся войти под пользователем root.
Причина: В Debian пользователь root MariaDB аутентифицируется через сокет, что не работает через веб-интерфейс.
Пошаговое решение:
Используйте специально созданного пользователя pmaadmin (или другого) для входа в phpMyAdmin. Не пытайтесь войти как root.
8.4 Ошибка: Пустая страница (с полным HTML-кодом)
Симптом: Страница полностью белая, но при просмотре исходного кода (Ctrl+U) виден полный HTML phpMyAdmin.
Причина: PHP выполняется, но CSS/JS ресурсы не загружаются. Часто это связано с политикой безопасности Content-Security-Policy (CSP), которая разрешает загрузку только по HTTPS, а сайт открыт по HTTP. Или с тем, что iRedMail (или другой стек) переключил PHP-FPM на TCP-сокет 127.0.0.1:9999.
Пошаговое решение:
Шаг 1: Проверьте, какие заголовки отправляет сервер:
curl -sI http://127.0.0.1/index.php | grep -iE 'content-security|x-frame|strict-transport'
Шаг 2: Если вы видите Content-Security-Policy: default-src https: — переключите сайт на HTTPS (настройте сертификат Let’s Encrypt). Это решит проблему.
Шаг 3: Если вы используете стек, который переключает PHP-FPM на TCP-сокет (например, iRedMail), измените в конфигурации Nginx:
fastcgi_pass 127.0.0.1:9999;
Шаг 4: После изменения перезагрузите Nginx:
sudo nginx -t && sudo systemctl reload nginx
8.5 Ошибка: blowfish_secret не задан
Симптом: phpMyAdmin пишет, что не хватает секретного ключа.
Причина: Отсутствует файл config.user.inc.php или в нём нет $cfg['blowfish_secret'].
Пошаговое решение:
Шаг 1: Создайте файл заново (см. раздел «Создание конфигурационного файла»).
Шаг 2: Проверьте, что файл читается:
sudo cat /var/www/phpmyadmin/config.user.inc.php
Обновление phpMyAdmin
Шаг 1: Скачайте новую версию (как при установке)
Шаг 2: Распакуйте и замените директорию
cd /tmp
# ... команды скачивания и проверки ...
tar -xzf "phpMyAdmin-${VERSION}-all-languages.tar.gz"
sudo cp /var/www/phpmyadmin/config.user.inc.php /tmp/config.user.inc.php.backup
sudo mv /var/www/phpmyadmin /var/www/phpmyadmin-old
sudo mv "phpMyAdmin-${VERSION}-all-languages" /var/www/phpmyadmin
sudo cp /tmp/config.user.inc.php.backup /var/www/phpmyadmin/config.user.inc.php
sudo chown -R www-data:www-data /var/www/phpmyadmin /var/lib/phpmyadmin
sudo chmod -R u=rwX,go=rX /var/www/phpmyadmin /var/lib/phpmyadmin
sudo rm -rf /var/www/phpmyadmin-old
Удаление phpMyAdmin
sudo rm -rf /var/www/phpmyadmin
sudo rm -rf /var/lib/phpmyadmin
sudo rm -f /etc/nginx/sites-enabled/phpmyadmin.conf
sudo rm -f /etc/nginx/sites-available/phpmyadmin.conf
sudo systemctl reload nginx
sudo mariadb -e "DROP USER IF EXISTS 'pmaadmin'@'localhost'; FLUSH PRIVILEGES;"
sudo certbot delete --cert-name pma.example.com # если создавали сертификат
Чек-лист: что проверить после установки
- [ ] Nginx работает:
systemctl status nginx→active (running) - [ ] MariaDB работает:
systemctl status mariadb→active (running) - [ ] PHP-FPM работает:
systemctl status php8.4-fpm→active (running) - [ ] phpMyAdmin установлен:
ls /var/www/phpmyadmin/index.php→ файл существует - [ ] Конфигурация Nginx активна:
ls /etc/nginx/sites-enabled/→phpmyadmin.conf - [ ] Страница открывается:
curl -I http://127.0.0.1/index.php→200 OK - [ ] Можно войти: логин
pmaadminи пароль - [ ] HTTPS работает (если настроен):
https://pma.example.com→ зелёный замок - [ ] Файрвол настроен:
sudo ufw status→ порты 80 и 443 открыты
Часто задаваемые вопросы (FAQ)
Вопрос: Почему вы используете архив upstream, а не пакет phpmyadmin из Debian?
Ответ: Пакет Debian старый (5.2.x против актуального 5.2.x+), имеет другую структуру каталогов и настройки по умолчанию. Upstream-архив даёт последнюю версию и удобную для Nginx структуру.
Вопрос: Какой пользователь и пароль использовать для входа?
Ответ: Используйте pmaadmin и пароль, который вы задали при создании. Никогда не пытайтесь войти как root.
Вопрос: Почему phpMyAdmin такой медленный?
Ответ: Убедитесь, что установлены расширения PHP: php-mbstring, php-xml, php-curl, php-zip, php-gd. Без них phpMyAdmin работает медленнее.
Вопрос: Как ограничить доступ по IP?
Ответ: Добавьте в конфигурацию Nginx внутри блока server (Первый IP это тот, с которого вход разрешен, вам нужно вставить свой):
allow 192.168.1.100; # замените на ваш IP
deny all; # запретить всем остальным
Заключение
Теперь phpMyAdmin установлен и работает с Nginx на вашем Debian. Вы можете управлять базами данных через удобный веб-интерфейс.
Что дальше?
- Настройте регулярное резервное копирование баз данных
- Установите Fail2ban для защиты phpMyAdmin от брутфорса
- Настройте мониторинг сервера