Установка phpMyAdmin с Nginx на Debian 13, 12, 11: полное руководство

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 authenticationY
  • Change the root password?n (оставляем без пароля, т.к. используется unix_socket)
  • Remove anonymous users?Y
  • Disallow root login remotely?Y
  • Remove test database and access to it?Y
  • Reload 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 nginxactive (running)
  • [ ] MariaDB работает: systemctl status mariadbactive (running)
  • [ ] PHP-FPM работает: systemctl status php8.4-fpmactive (running)
  • [ ] phpMyAdmin установлен: ls /var/www/phpmyadmin/index.php → файл существует
  • [ ] Конфигурация Nginx активна: ls /etc/nginx/sites-enabled/phpmyadmin.conf
  • [ ] Страница открывается: curl -I http://127.0.0.1/index.php200 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. Вы можете управлять базами данных через удобный веб-интерфейс.

Что дальше?