Przejdź do treści głównej
50% zniżki wszystkie plany, oferta limitowana. Od $2.48/mo
10 min left
Bazy danych i analityka

Jak zainstalować Adminer na VPS z Linuksem (z Nginx i właściwym zabezpieczeniem)

H Autor: Haze 10 min czytania
Adminer login screen served by Nginx on a Linux VPS

Instancja Adminera działająca na otwartym adresie to jeden z najcichszych sposobów na utratę bazy danych. Ktoś wdraża pojedynczy plik PHP, żeby sprawdzić tabelę, URL działa, a plik zostaje tam przez miesiące, dopóki przestarzała kopia nie stanie się powierzchnią ataku. Dlatego ten przewodnik instalacji Adminera na Linux VPS poświęca tyle samo miejsca zabezpieczeniu narzędzia, co jego uruchomieniu.

Adminer to pojedynczy plik PHP (około 503 KB w pełnej wersji), który obsługuje MySQL, MariaDB, PostgreSQL, SQLite i kilka innych baz danych. Jest niezwykle prosty we wdrożeniu, co jest dokładnie powodem, dla którego często jest wdrażany nieostrożnie.

Zainstalujesz to na nowoczesnym VPS Ubuntu lub Debian z Nginx i PHP-FPM, dodasz uwierzytelnianie HTTP, listę dozwolonych adresów IP i HTTPS z Let's Encrypt, a zakończysz jasną zasadą dotyczącą tego, kiedy całkowicie pominąć publiczną konfigurację i zamiast tego uzyskać dostęp do Adminera przez tunel SSH.

TL;DR

  • Adminer to jeden plik PHP, który pobierasz do katalogu głównego strony za pomocą wget do katalogu głównego strony; Nginx i PHP-FPM go serwują.
  • Publiczna instancja Adminera potrzebuje wszystkich trzech: warstwy uwierzytelniania HTTP, listy dozwolonych adresów IP i HTTPS. Żaden z nich sam w sobie nie wystarczy.
  • W przypadku najbardziej wrażliwych baz danych w ogóle nie wystawiaj Adminera: przywiąż go do localhost i uzyskiwać do niego dostęp przez tunel SSH.
  • Aktualizacja to jedno polecenie: uruchom ponownie wget polecenie pobierania. Ostatnie aktualizacje bezpieczeństwa sprawiają, że utrzymywanie aktualności to prawdziwe zadanie operacyjne, a nie luksus.

Wymagania wstępne: co będziesz potrzebować przed instalacją

Ten przewodnik dotyczy Ubuntu 26.04 i 24.04 oraz Debian 13, z uwagami o zgodności dla Ubuntu 22.04 i Debian 12. Domyślne wersje PHP-FPM to 8.5 na Ubuntu 26.04, 8.3 na Ubuntu 24.04, 8.4 na Debian 13, 8.2 na Debian 12 i 8.1 na Ubuntu 22.04.

  • VPS z systemem Linux Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 lub Debian 13, z użytkownikiem posiadającym sudo dostęp.
  • Serwer bazy danych (MySQL, MariaDB lub PostgreSQL) już działający, albo na tym VPS, albo taki, który Adminer może osiągnąć przez sieć. Ten przewodnik nie instaluje bazy danych; instaluje narzędzie, które służy do jej administrowania.
  • PHP-FPM z obsługiwanych repozytoriów systemu operacyjnego. Mimo że skompilowany plik Adminera obsługuje PHP 5.3+, używaj bieżącej wersji dostarczonej przez dystrybucję wymienionej powyżej, zamiast instalować przestarzałą wersję PHP.
  • Do publicznej konfiguracji HTTPS potrzebujesz nazwy hosta wskazującej na VPS i dostępnych przychodzących portów TCP 80 i 443. przepływ pracy Certbot Nginx używa walidacji HTTP-01 na porcie 80. Let's Encrypt obsługuje teraz krótkoterminowe certyfikaty adresów IP, ale Certbot nie instaluje ich automatycznie przez swój przepływ pracy Nginx, więc ten przewodnik używa nazwy hosta.

Uwaga: Ten przewodnik celowo używa Nginx. Jeśli używasz Apache, logika pobierania i wzmacniania nadal obowiązuje, ale konfiguracja bloku serwera poniżej nie.

Zainstaluj Nginx i PHP-FPM

Zacznij od odświeżenia indeksu pakietów i zainstalowania Nginx i PHP-FPM wraz z rozszerzeniem bazy danych PHP, którego potrzebuje Twój serwer:

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

Dla backendu PostgreSQL zainstaluj php-pgsql zamiast lub obok php-mysql:

sudo apt install -y php-pgsql

Potwierdź, że gniazdo PHP-FPM istnieje:

ls /run/php/

Dopasuj nazwę pliku gniazda do wersji wymienionej powyżej, na przykład php8.5-fpm.sock na Ubuntu 26.04, php8.3-fpm.sock na Ubuntu 24.04, lub php8.4-fpm.sock na Debian 13. Jeśli oczekiwane gniazdo brakuje, sprawdź pasującą usługę za pomocą systemctl status php8.5-fpm, zastępując 8.5 wersją zainstalowaną w Twoim systemie operacyjnym.

Wskazówka: Niezgodność gniazda jest jedną z możliwych przyczyn 502 Bad Gateway. Dopasuj fastcgi_pass z nazwą pliku pod /run/php/, potwierdź, że odpowiednia usługa PHP-FPM jest uruchomiona, i sprawdź /var/log/nginx/error.log jeśli błąd nadal występuje.

Pobierz Adminer

Utwórz katalog do serwowania Adminera, a następnie pobierz do niego pojedynczy plik. latest.php URL zawsze wskazuje na bieżące stabilne wydanie:

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

Jeśli pracujesz tylko z MySQL lub MariaDB, kompilacja tylko dla MySQL jest mniejsza (około 406 KB) i pobierana w ten sam sposób:

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

Utrzymaj katalog Adminer w posiadaniu roota, jednocześnie przyznając PHP-FPM dostęp do odczytu:

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 oznacza, że ponowne uruchomienie pobierania jest również ścieżką aktualizacji, do której wraca sekcja konserwacji.

Konfiguracja bloku serwera Nginx

Utwórz blok serwera, który obsługuje katalog Adminera i przekazuje żądania .php żądania do gniazda PHP-FPM, które zidentyfikowałeś wcześniej. Otwórz nowy plik witryny:

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

Wklej poniższe, zastępując db.example.com nazwą hosta wskazującą już na Twój VPS i potwierdzając, że fastcgi_pass gniazdo odpowiada Twojej wersji 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;
    }
}

Włącz stronę, tworząc dowiązanie symboliczne w sites-enabled, a następnie przetestuj konfigurację bez ponownego ładowania Nginx:

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

nginx -t powinien informować, że składnia jest prawidłowa, a test zakończony sukcesem. Nie przeładowuj jeszcze Nginx, bo strona nie ma uwierzytelniania ani ograniczenia IP. Kontynuuj przez te dwa kroki wzmacniania; krok ograniczenia IP wykonuje pierwsze przeładowanie po wprowadzeniu obu zabezpieczeń.

Zabezpieczenie dostępu: Uwierzytelnianie, Ograniczenie IP i HTTPS

Publiczna instancja Adminera stoi bezpośrednio przed danymi uwierzytelniającymi Twojej bazy danych, więc potrzebuje warstwowej obrony zamiast pojedynczej blokady. Trzy warstwy poniżej pełnią różne funkcje: uwierzytelnianie HTTP zatrzymuje każdego bez hasła przy serwerze web, lista dozwolonych adresów IP blokuje połączenia z niezatwierdzonych adresów, a HTTPS uniemożliwia wpisanym poświadczeniom przechodzenie przez sieć w tekście jawnym. Dodaj wszystkie trzy. Żadna z nich nie zastępuje innych.

Dodaj podstawowe uwierzytelnianie HTTP

Zainstaluj htpasswd narzędzie, zawarte w pakiecie apache2-utils pakiecie na Ubuntu i Debianie:

sudo apt install -y apache2-utils

Utwórz plik haseł i użytkownika (zostaniesz poproszony o hasło):

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

Dodaj dyrektywy do dokładnej lokalizacji PHP Adminera, aby sam żądanie PHP było chronione:

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;
}

Obie dyrektywy są udokumentowane w dokumentacji modułu Nginx HTTP auth_basic. Uruchom sudo nginx -t aby zatwierdzić konfigurację, ale jeszcze nie przeładowuj Nginx; lista dozwolonych IP zostanie dodana następnie. Nie przesyłaj danych uwierzytelniających Basic Auth przez zwykłe HTTP; poczekaj, aż HTTPS zostanie włączony poniżej.

Ogranicz dostęp według adresu IP

Podstawowe uwierzytelnianie blokuje nieuwierzytelnionych użytkowników, ale Nginx nadal odbiera żądania z każdego źródła. Zastąp istniejącą lokalizację PHP Adminera poniższym połączonym blokiem, aby reguły IP i dyrektywy Basic Auth pozostały w jednym miejscu:

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;
}

Zastąp przykładowe adresy swoim rzeczywistym publicznym adresem IP lub zakresem zaufanej sieci. Zachowaj tylko wpisy allow których potrzebujesz i usuń nieużywane przykłady. Pierwszy wpis demonstruje pojedynczy adres, a drugi zakres CIDR. Nginx zwraca 403 Forbidden do adresów, które nie pasują do reguły allow reguły allow. dokumentacji modułu dostępu Nginx dokumentuje składnię dyrektyw. Przetestuj i przeładuj Nginx:

sudo nginx -t && sudo systemctl reload nginx

Włącz HTTPS z Let's Encrypt

Mając domenę wskazującą na VPS, zainstaluj Certbot i jego wtyczkę Nginx, a następnie poproś o certyfikat:

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

Certbot edytuje Twój blok serwera, aby obsługiwał HTTPS na porcie 443 i oferuje przekierowanie HTTP do HTTPS; zaakceptuj przekierowanie. Instaluje również timer odnowienia, więc certyfikat odnawia się automatycznie przed wygaśnięciem. Możesz potwierdzić ścieżkę odnowienia za pomocą sudo certbot renew --dry-run, które powinno zakończyć się bez błędów.

Teraz odwiedź https://db.example.com/adminer.php z dozwolonego adresu i potwierdź, że Nginx żąda danych uwierzytelniających Basic Auth przed załadowaniem Adminera.

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

Wybierz model dostępu: Publiczny HTTPS a tunel SSH

Powyższa konfiguracja jest odpowiednia, gdy potrzebujesz dostępu przez przeglądarkę do bazy danych z kilku maszyn lub gdy otwarcie sesji SSH jest niepraktyczne. Nie jest to jedyny model i dla wrażliwej bazy danych nie jest najbardziej defensywny.

W przypadku wrażliwych konfiguracji nie wystawiaj Adminera publicznie. Oficjalne wytyczne bezpieczeństwa Adminer zaleca uniemożliwienie dostępu z publicznego internetu, gdy tylko jest to możliwe. Jeśli wybierzesz dostęp tylko przez tunel, zastąp publiczny blok serwera Nginx tą konfiguracją tylko loopback i pomiń publiczną konfigurację 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;
    }
}

Przetestuj i przeładuj zastępczą konfigurację:

sudo nginx -t && sudo systemctl reload nginx

Następnie otwórz tunel ze swojej maszyny:

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

Z uruchomionym tunelem otwórz http://127.0.0.1:8080/adminer.php. Nginx akceptuje połączenia Adminer tylko przez interfejs loopback VPS, podczas gdy SSH przenosi ruch przez swoje szyfrowane połączenie. To wykorzystuje zachowanie opisane w dokumentacji lokalnego przekierowania OpenSSH.

Używaj publicznego HTTPS, Basic Auth i konfiguracji listy dozwolonych IP, gdy potrzebujesz bezpośredniego dostępu przez przeglądarkę z wielu maszyn. Preferuj konfigurację SSH tylko z loopback, gdy publiczny dostęp jest niepotrzebny.

Kluczowy wniosek: Najbezpieczniejszy Adminer to ten, który nigdy nie jest dostępny z publicznego internetu.

Utrzymywanie Adminera na bieżąco

Zapomniana instancja to prawdziwe ryzyko tutaj, i warto traktować ją jako zaplanowane zadanie, a nie myśl dodaną na końcu. Aktualizacja Adminera to jedno polecenie, to samo wget polecenie, którego użyłeś do instalacji, ponieważ latest.php zawsze pobiera bieżące wydanie:

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

To nie jest teoretyczna troska. Adminer 5.4.3, wydany 9 lipca 2026, rozwiązał siedem poradników bezpieczeństwa GitHub w jednym wydaniu. Wcześniejszy poradnik dotyczący CVE-2026-25892 wykazał, że nawet punkt końcowy sprawdzania wersji Adminer mógł zostać przekształcony w wektor ataku denial-of-service bez uwierzytelnienia; problem został naprawiony w wersji 5.4.2. Przestarzała kopia gromadzi publicznie udokumentowane podatności, więc jej aktualizacja powinna być rutynową konserwacją.

Uwaga: Pozostań na aktualnym wydaniu Adminer z upstream. repozytorium AdminerEvo zostało zarchiwizowane w styczniu 2025 i nie jest aktywnie utrzymywaną alternatywą.

Wdrażanie na VPS

Jeśli wolisz pominąć ręczne kroki, Adminer jest dostępny jako wdrożenie jednym kliknięciem w marketplace Cloudzy na Cloudzy Linux VPS. Obraz marketplace używa Apache, Basic Auth i certyfikatu samopodpisanego, więc różni się od stosu Nginx, listy dozwolonych IP i Let's Encrypt powyżej. Przejrzyj te różnice bezpieczeństwa przed wprowadzeniem poświadczeń produkcyjnej bazy danych.

Własny ślad Adminera jest nieistotny; baza danych determinuje Twój rozmiar. Wybieraj CPU, pamięć i przechowywanie na podstawie rozmiaru danych i indeksów bazy danych, obciążenia zapytań, liczby połączeń, kopii zapasowych i oczekiwanego wzrostu, a nie samego Adminera.

Często zadawane pytania

Czy bezpieczne jest publiczne udostępnianie Adminera na VPS?

Nie samodzielnie. Jeśli musisz publicznie udostępnić Adminera, umieść go za HTTP Basic Authentication, listą dozwolonych IP i HTTPS razem. Te kontrole redukują ryzyko, ale nie czynią publicznego dostępu bezpiecznym. Dla wrażliwych baz danych powiąż Adminera z localhost i uzyskuj do niego dostęp przez tunel SSH.

Jak uzyskać dostęp do Adminera bez narażenia go na internet?

Skonfiguruj pokazany powyżej blok serwera Nginx tylko dla loopback, tak aby Adminer nasłuchiwał na 127.0.0.1:8080, potem uruchom ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip na swojej maszynie. Otwórz http://127.0.0.1:8080/adminer.php gdy tunel jest uruchomiony.

Czy Adminer może się połączyć z PostgreSQL i MySQL?

Tak. Adminer obsługuje MySQL, MariaDB, PostgreSQL, SQLite, MS SQL i Oracle po wyjęciu z pudełka, z dodatkowymi bazami danych dostępnymi przez wtyczki. Zainstaluj pasujące rozszerzenie PHP dla swojej bazy danych, na przykład php-pgsql dla PostgreSQL, aby PHP mogło z nim rozmawiać.

Jak Utrzymać Adminera na Bieżąco?

Ponownie uruchom polecenie pobierania: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. The latest.php URL zawsze zwraca aktualną stabilną wersję, więc nadpisuje to Twoją kopię najnowszą wersją. Ostatnie wydania bezpieczeństwa sprawiają, że warto robić to według harmonogramu, a nie tylko gdy pamiętasz.

Czy powinienem zainstalować Adminera przez apt Pakiet czy Pobrać Bezpośrednio?

Pobierz plik bezpośrednio. Daje ci aktualną wersję natychmiast i sprawia, że aktualizacje są jednoliniowym poleceniem, podczas gdy pakiet dystrybucji może być opóźniony za oficjalnym wydaniem. Bezpośredni plik to to samo narzędzie z krótszą ścieżką do najnowszych poprawek bezpieczeństwa.

Udostępnij

Więcej z bloga

Czytaj dalej.

Gotowy do wdrożenia? Od $2,48/mies.

Niezależna chmura od 2008 roku. AMD EPYC, NVMe, 40 Gbps. Zwrot pieniędzy w ciągu 14 dni.