Перейти до основного вмісту
Знижка 50% усі плани, обмежений час. Від $2.48/mo
10 min left
Бази даних та аналітика

Як встановити Adminer на Linux VPS (з Nginx і належним захистом)

H Автор: Haze 10 хв читання
Adminer login screen served by Nginx on a Linux VPS

Екземпляр Adminer, залишений запущеним на відкритій адресі, — один із найтихіших способів втратити базу даних. Хтось розгортає єдиний PHP-файл, щоб перевірити таблицю, URL працює, і файл залишається там місяцями, поки застаріла копія не перетворюється на вектор атаки. Саме тому цей посібник із встановлення Adminer на Linux VPS приділяє стільки ж уваги захисту інструменту, скільки й його запуску.

Adminer — це єдиний PHP-файл (близько 503 КБ у повній збірці), який підтримує MySQL, MariaDB, PostgreSQL, SQLite та інші бази даних. Його надзвичайно просто розгорнути, що якраз і є причиною, чому це часто робиться недбало.

Ви встановите його на сучасному VPS з Ubuntu або Debian разом з Nginx та PHP-FPM, додасте HTTP-аутентифікацію, список дозволених IP-адрес та HTTPS з Let's Encrypt, і завершите чітким правилом щодо того, коли взагалі обійти публічне налаштування та звертатися до Adminer через SSH-тунель.

TL;DR

  • Adminer — це один PHP-файл, який ви завантажуєте в кореневу директорію сайту за допомогою wget у кореневу директорію сайту; Nginx разом з PHP-FPM його обслуговують.
  • Публічний екземпляр Adminer потребує всіх трьох: рівня HTTP-аутентифікації, списку дозволених IP-адрес та HTTPS. Жодного з них поодинці недостатньо.
  • Для найбільш чутливих баз даних взагалі не відкривайте Adminer: прив'яжіть його до localhost і звертатися до нього через SSH-тунель.
  • Оновлення — це одна команда: повторно виконайте wget команду завантаження. Нещодавні безпекові випуски роблять підтримку актуальності справжнім операційним завданням, а не просто бажаним.

Передумови: що вам знадобиться перед встановленням

Цей посібник орієнтований на Ubuntu 26.04 та 24.04 і Debian 13, з примітками про сумісність для Ubuntu 22.04 та Debian 12. Версії PHP-FPM за замовчуванням: 8.5 на Ubuntu 26.04, 8.3 на Ubuntu 24.04, 8.4 на Debian 13, 8.2 на Debian 12 та 8.1 на Ubuntu 22.04.

  • Linux VPS з Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 або Debian 13, з користувачем, який має sudo доступ.
  • Сервер бази даних (MySQL, MariaDB або PostgreSQL), який вже працює — або на цьому VPS, або на тому, до якого Adminer може дістатися через мережу. Цей посібник не встановлює базу даних; він встановлює інструмент для її адміністрування.
  • PHP-FPM з офіційних репозиторіїв операційної системи. Незважаючи на те, що скомпільований файл Adminer підтримує PHP 5.3+, використовуйте поточну версію, надану дистрибутивом (вказана вище), а не встановлюйте застарілу версію PHP.
  • Для публічного налаштування HTTPS вам потрібне ім'я хоста, що вказує на VPS, та доступні вхідні TCP-порти 80 і 443. процес Certbot Nginx використовує перевірку HTTP-01 на порту 80. Let's Encrypt тепер підтримує короткострокові сертифікати IP-адрес, але Certbot не встановлює їх автоматично через свій робочий процес Nginx, тому в цьому посібнику використовується ім'я хоста.

Примітка: Цей посібник навмисно використовує Nginx. Якщо ви використовуєте Apache, логіка завантаження та захисту все одно застосовується, але конфігурація серверного блоку нижче — ні.

Встановлення Nginx та PHP-FPM

Почніть з оновлення індексу пакетів та встановлення Nginx і PHP-FPM разом з потрібним вашому серверу розширенням PHP для бази даних:

sudo apt update
sudo apt install -y nginx php-fpm php-mysql

Для бекенду PostgreSQL встановіть php-pgsql замість або разом з php-mysql:

sudo apt install -y php-pgsql

Переконайтесь, що сокет PHP-FPM існує:

ls /run/php/

Зіставте ім'я файлу сокету з версією, зазначеною вище, наприклад, php8.5-fpm.sock на Ubuntu 26.04, php8.3-fpm.sock на Ubuntu 24.04 або php8.4-fpm.sock на Debian 13. Якщо очікуваний сокет відсутній, перевірте відповідний сервіс за допомогою systemctl status php8.5-fpm, замінивши 8.5 на версію, встановлену у вашій ОС.

Порада профі: невідповідність сокету — одна з можливих причин 502 Bad Gateway. Переконайтесь, fastcgi_pass з ім'ям файлу в директорії /run/php/, переконайтесь, що відповідний сервіс PHP-FPM запущено, та перевірте /var/log/nginx/error.log якщо помилка залишається.

Завантаження Adminer

Створіть директорію для Adminer, потім завантажте в неї єдиний файл. latest.php URL завжди вказує на поточний стабільний випуск:

sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php

Якщо ви працюєте лише з MySQL або MariaDB, збірка тільки для MySQL менша (близько 406 КБ) і завантажується тим самим способом:

sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php

Збережіть директорію Adminer під власністю root, надавши PHP-FPM доступ на читання:

sudo chown -R root:root /var/www/adminer
sudo chmod 755 /var/www/adminer
sudo chmod 644 /var/www/adminer/adminer.php

You do not need to track the version number: the latest.php URL означає, що повторний запуск завантаження є і шляхом оновлення, до якого повертається розділ обслуговування.

Налаштування серверного блоку Nginx

Створіть серверний блок, який обслуговує директорію Adminer та передає запити .php запити до сокету PHP-FPM, який ви визначили раніше. Відкрийте новий файл сайту:

sudo nano /etc/nginx/sites-available/adminer

Вставте наступне, замінивши db.example.com на ім'я хоста, яке вже вказує на ваш VPS, і підтвердивши, що fastcgi_pass сокет відповідає вашій версії PHP:

# /etc/nginx/sites-available/adminer
server {
    listen 80;
    server_name db.example.com;
    root /var/www/adminer;

    location = / {
        return 302 /adminer.php;
    }

    location = /adminer.php {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location / {
        return 404;
    }
}

Активуйте сайт, створивши символічне посилання в директорії sites-enabled, потім перевірте конфігурацію без перезавантаження Nginx:

sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t

nginx -t повинен повідомити, що синтаксис вірний і тест пройшов успішно. Не перезавантажуйте Nginx, оскільки сайт ще не має аутентифікації або обмеження IP. Продовжуйте виконання двох кроків захисту; крок обмеження IP виконає перше перезавантаження після встановлення обох засобів захисту.

Захист доступу: Автентифікація, Обмеження IP та HTTPS

Публічний екземпляр Adminer стоїть безпосередньо перед обліковими даними вашої бази даних, тому йому потрібні багаторівневий захист, а не один замок. Три рівні нижче виконують різні завдання: HTTP-аутентифікація зупиняє будь-кого без пароля на веб-сервері, список дозволених IP блокує підключення з неухвалених адрес, а HTTPS не дозволяє введеним обліковим даним перетинати мережу у відкритому вигляді. Додайте всі три. Жоден з них не замінює інших.

Додавання HTTP Basic аутентифікації

Встановіть htpasswd утиліту, яка входить до пакету apache2-utils пакету на Ubuntu та Debian:

sudo apt install -y apache2-utils

Створіть файл паролів і користувача (вам буде запропоновано ввести пароль):

sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd

Додайте директиви до точного розташування PHP Adminer, щоб сам PHP-запит був захищений:

location = /adminer.php {
    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Обидві директиви задокументовані в довіднику модуля Nginx HTTP auth_basic. Запустити sudo nginx -t для перевірки конфігурації, але не перезавантажуйте Nginx поки що; список дозволених IP додається наступним. Не надсилайте облікові дані Basic Auth через незашифрований HTTP; дочекайтесь активації HTTPS нижче.

Обмеження доступу за IP-адресою

Базова аутентифікація блокує неавтентифікованих користувачів, але Nginx все одно отримує запити з будь-якого джерела. Замініть існуючий блок розташування PHP Adminer наступним об'єднаним блоком, щоб правила IP та директиви Basic Auth залишалися в одному місці:

location = /adminer.php {
    satisfy all;

    allow                203.0.113.10;
    allow                203.0.113.0/28;
    deny                 all;

    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Замініть приклади адрес вашою реальною публічною IP-адресою або діапазоном довіреної мережі. Залиште лише записи allow які вам потрібні, та видаліть невикористані приклади. Перший запис демонструє одиночну адресу, другий — діапазон CIDR. Nginx повертає 403 Forbidden адресам, які не відповідають жодному правилу allow правилу allow. довіднику модуля доступу Nginx документує синтаксис директив. Протестуйте та перезавантажте Nginx:

sudo nginx -t && sudo systemctl reload nginx

Увімкнення HTTPS з Let's Encrypt

Маючи домен, що вказує на VPS, встановіть Certbot та його плагін для Nginx, потім запросіть сертифікат:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com

Certbot редагує ваш серверний блок для обслуговування HTTPS на порту 443 та пропонує перенаправлення HTTP на HTTPS; прийміть перенаправлення. Також встановлюється таймер поновлення, тому сертифікат поновлюється автоматично до закінчення терміну дії. Ви можете підтвердити шлях поновлення за допомогою sudo certbot renew --dry-run, яка повинна завершитись без помилок.

Тепер перейдіть за адресою https://db.example.com/adminer.php з дозволеної адреси та підтвердіть, що Nginx запитує облікові дані Basic Auth перед завантаженням Adminer.

Adminer login screen after first successful load, showing the database system dropdown and server and username fields

Вибір моделі доступу: Публічний HTTPS або SSH-тунель

Описане вище налаштування підходить, коли вам потрібен доступ через браузер до бази даних з кількох машин або коли відкриття SSH-сесії незручне. Це не єдина модель, і для чутливої бази даних вона не є найбільш захищеною.

Для чутливих налаштувань не відкривайте Adminer публічно. Офіційні рекомендації безпеки Adminer рекомендує зробити його недоступним з публічного інтернету за можливості. Якщо ви обираєте доступ тільки через тунель, замініть публічний серверний блок Nginx цією конфігурацією лише для loopback і пропустіть публічне налаштування HTTPS:

# /etc/nginx/sites-available/adminer
server {
    listen 127.0.0.1:8080 default_server;
    server_name _;
    root /var/www/adminer;

    location = / {
        return 302 /adminer.php;
    }

    location = /adminer.php {
        auth_basic           "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location / {
        return 404;
    }
}

Протестуйте та перезавантажте замінюючу конфігурацію:

sudo nginx -t && sudo systemctl reload nginx

Потім відкрийте тунель зі своєї машини:

ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip

З запущеним тунелем відкрийте http://127.0.0.1:8080/adminer.php. Nginx приймає підключення Adminer лише через loopback-інтерфейс VPS, тоді як SSH передає трафік через зашифроване з'єднання. Це використовує поведінку, описану в документації локального перенаправлення OpenSSH.

Використовуйте публічний HTTPS, Basic Auth і налаштування списку дозволених IP, коли вам потрібен прямий доступ через браузер з кількох машин. Надавайте перевагу конфігурації SSH тільки для loopback, коли публічний доступ не потрібен.

Ключовий висновок: Найбезпечніший Adminer — той, до якого ніколи не можна дістатися з публічного інтернету.

Підтримання Adminer в актуальному стані

Забутий екземпляр — справжній ризик тут, і його варто розглядати як заплановане завдання, а не запізнілу думку. Оновлення Adminer — це одна команда, та сама wget команду, яку ви використовували для встановлення, тому що latest.php завжди завантажує поточний випуск:

sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php

Це не теоретична проблема. Adminer 5.4.3, випущений 9 липня 2026 р., усунув сім порад безпеки GitHub в одному випуску. Попередня порада щодо CVE-2026-25892 показав, що навіть кінцева точка перевірки версії Adminer може бути перетворена на вектор неаутентифікованої відмови в обслуговуванні; проблему було виправлено у версії 5.4.2. Застаріла копія накопичує публічно задокументовані вразливості, тому її оновлення має бути плановим обслуговуванням.

Примітка: Залишайтеся на поточному офіційному випуску Adminer. репозиторій AdminerEvo було заархівовано у січні 2025 р. і не є активно підтримуваною альтернативою.

Розгортання на VPS

Якщо ви хочете пропустити ручні кроки, Adminer доступний як однокнопкове розгортання в маркетплейс Cloudzy на Cloudzy Linux VPS. Образ маркетплейсу використовує Apache, Basic Auth і самопідписаний сертифікат, тому він відрізняється від стека Nginx, списку дозволених IP і Let's Encrypt вище. Перегляньте ці відмінності в безпеці перед введенням облікових даних виробничої бази даних.

Власний «слід» Adminer є незначним; базу даних визначає розмір. Вибирайте CPU, пам'ять і сховище на основі розміру даних та індексів бази даних, навантаження запитів, кількості з'єднань, резервних копій та очікуваного зростання, а не самого Adminer.

Часті запитання

Чи безпечно публічно відкривати Adminer на VPS?

Не самостійно. Якщо ви повинні відкрити Adminer публічно, розмістіть його за HTTP Basic Authentication, списком дозволених IP і HTTPS разом. Ці засоби контролю зменшують ризик, але не роблять публічний доступ безпечним. Для чутливих баз даних прив'яжіть Adminer до localhost і отримуйте до нього доступ через SSH-тунель.

Як отримати доступ до Adminer, не відкриваючи його в інтернет?

Налаштуйте наведений вище серверний блок Nginx лише для loopback, щоб Adminer прослуховував 127.0.0.1:8080, потім виконайте ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip на своїй машині. Відкрийте http://127.0.0.1:8080/adminer.php поки тунель працює.

Чи може Adminer підключатися до PostgreSQL а також MySQL?

Так. Adminer підтримує MySQL, MariaDB, PostgreSQL, SQLite, MS SQL та Oracle з коробки, з додатковими базами даних через плагіни. Встановіть відповідне розширення PHP для вашої бази даних, наприклад php-pgsql для PostgreSQL, щоб PHP міг з ним спілкуватись.

Як підтримувати Adminer в актуальному стані?

Повторно запустіть команду завантаження: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. The latest.php URL завжди повертає поточний стабільний випуск, тому це перезаписує вашу копію найновішою версією. Нещодавні випуски безпеки роблять це вартим виконання за розкладом, а не лише коли ви пам'ятаєте.

Чи слід встановлювати Adminer через apt пакет чи завантажити безпосередньо?

Завантажте один файл безпосередньо. Це дає вам поточну версію негайно і робить оновлення однорядковою командою, тоді як пакет дистрибутива може відставати від офіційного випуску. Прямий файл — це той самий інструмент з коротшим шляхом до останніх виправлень безпеки.

Поділитися

Більше з блогу

Продовжуйте читати.

Готові розгортати? Від $2,48/міс.

Незалежна хмара з 2008 року. AMD EPYC, NVMe, 40 Gbps. Повернення коштів за 14 днів.