Przejdź do treści
Aktualny kupon:10% zniżkiUżyj w zamówieniu

Bazy danych dla serwerów gier w Pterodactylu (database host)

Skonfiguruj MariaDB tak, aby serwery gier w Pterodactylu mogły tworzyć własne bazy danych dla pluginów: konto dla Panelu, bind-address, firewall i Database Host w Panelu.

  • ekspert
  • ~20 min
  • Zaktualizowano 9.10.2026

Pluginy takie jak LuckPerms czy CoreProtect przechowują dane w bazie MySQL. Skonfigurujemy MariaDB jako database host Pterodactyla, aby użytkownicy mogli jednym kliknięciem w Panelu utworzyć bazę danych dla swojego serwera.

Czego potrzebujesz

  • Pterodactyl Panel (poradnik) i Wings (poradnik) na tym samym VPS
  • MariaDB z instalacji Panelu
  • Połączenie SSH jako root
  • Około 20 minut

Jak to działa#

Gdy użytkownik kliknie New Database w zakładce Databases swojego serwera, Panel łączy się z database hostem i tworzy bazę s<ID serwera>_<nazwa> oraz użytkownika u<ID serwera>_<losowe znaki> z losowym hasłem. Serwer gier łączy się potem z tą bazą ze swojego kontenera.

Kluczowe słowo to kontener. Wewnątrz kontenera adres 127.0.0.1 oznacza sam kontener, nie VPS. Serwer gier nie znajdzie więc MariaDB pod 127.0.0.1. Na tym samym VPS kontenery mogą jednak dotrzeć do samego serwera pod 172.18.0.1 (interfejs pterodactyl0 tworzony przez Wings). Tego adresu użyjemy dla database hosta:

Kto się łączySkądDokąd
Panel (tworzy bazy i użytkowników)z VPS, adres źródłowy 172.18.0.1172.18.0.1:3306
Serwer gier (plugin)z kontenera, adres 172.18.0.x172.18.0.1:3306

Sprawdź, czy interfejs istnieje (Wings musiał wystartować przynajmniej raz):

bash
ip -4 addr show pterodactyl0
  • ip -4 addr show pterodactyl0 – wypisuje adres IPv4 interfejsu pterodactyl0.

Wyjście zawiera linię inet 172.18.0.1/16. Jeśli polecenie mówi Device "pterodactyl0" does not exist, Wings jeszcze nie wystartował; najpierw dokończ jego instalację.

Konto dla Panelu#

Panel potrzebuje konta MariaDB, które może tworzyć bazy i użytkowników oraz nadawać im uprawnienia. Nie używaj konta pterodactyl z instalacji Panelu; ma uprawnienia tylko do bazy panel.

  1. Wygeneruj silne hasło tylko z liter i cyfr (generator haseł).

  2. Zaloguj się do MariaDB:

    bash
    mariadb
  3. Utwórz konto. Zamiast <HASLO_DB_HOST> wstaw hasło z kroku 1:

    SQL
    CREATE USER 'pterodactyluser'@'172.18.0.1' IDENTIFIED BY '<HASLO_DB_HOST>';
    GRANT ALL PRIVILEGES ON *.* TO 'pterodactyluser'@'172.18.0.1' WITH GRANT OPTION;
    exit
CzęśćCo oznacza
'pterodactyluser'@'172.18.0.1'Użytkownik może logować się tylko z 172.18.0.1, czyli tylko z tego VPS przez interfejs Dockera. Nikt nie zaloguje się tym kontem z internetu, nawet z właściwym hasłem.
ALL PRIVILEGES ON *.*Wszystkie uprawnienia do wszystkich baz. Panel musi tworzyć i usuwać bazy oraz użytkowników.
WITH GRANT OPTIONKonto może nadawać uprawnienia innym użytkownikom. Bez tego Panel nie mógłby dać nowemu użytkownikowi bazy dostępu do nowej bazy i jej tworzenie by się nie powiodło.

To konto jest w praktyce administratorem bazy danych

Każdy, kto zna jego hasło i dostanie się na VPS, może czytać i usuwać wszystkie bazy, łącznie z bazą samego Panelu. Dlatego konto dopuszcza tylko host 172.18.0.1, a hasła nie wpisuj nigdzie poza Panelem. Panel przechowuje hasło zaszyfrowane kluczem APP_KEY.

Nasłuchiwanie MariaDB w sieci#

Po instalacji MariaDB nasłuchuje tylko na 127.0.0.1 (ustawienie bind-address w /etc/mysql/mariadb.conf.d/50-server.cnf). Kontenery nie mogą jej tam dosięgnąć. Zmienisz to własnym plikiem, wczytywanym po domyślnym i go nadpisującym. Plik domyślny pozostaje nietknięty, nawet po aktualizacjach pakietu.

  1. Utwórz plik:

    bash
    nano /etc/mysql/mariadb.conf.d/60-pterodactyl.cnf
  2. Wklej zawartość, zapisz i zamknij edytor:

    /etc/mysql/mariadb.conf.d/60-pterodactyl.cnfini
    [mysqld]
    bind-address = 0.0.0.0
UstawienieCo robiZalecana wartośćKiedy zmieniać
[mysqld]Grupa opcji czytana przez serwer bazy danych (MariaDB 10.11 na Ubuntu i 11.8 na Debianie).–Nigdy.
bind-addressNa których adresach MariaDB przyjmuje połączenia. 0.0.0.0 = wszystkie adresy IPv4 VPS.0.0.0.0Jeśli nie chcesz dostępu sieciowego, wróć do 127.0.0.1 (usuń ten plik).
  1. Zrestartuj MariaDB i sprawdź, gdzie nasłuchuje:

    bash
    systemctl restart mariadb
    ss -tlnp | grep 3306
    • ss -tlnp – wypisuje nasłuchujące porty TCP i programy; grep 3306 wybiera linię MariaDB.

    Zobaczysz 0.0.0.0:3306 i nazwę procesu mariadbd.

Dlaczego nie po prostu bind-address = 172.18.0.1

MariaDB może nasłuchiwać także na konkretnym adresie. Interfejs pterodactyl0 tworzy jednak dopiero Docker po starcie. Gdyby przy uruchomieniu VPS MariaDB wstała pierwsza, nie znalazłaby adresu i by nie wystartowała. Użycie 0.0.0.0 i zamknięcie dostępu z zewnątrz firewallem jest bezpieczniejsze.

Firewall#

MariaDB nasłuchuje teraz także na publicznym adresie IP VPS. Port 3306 musi pozostać zamknięty dla internetu. Użytkownicy baz serwerów gier mogą domyślnie łączyć się skądkolwiek (%), więc dałoby się zalogować nimi z zewnątrz.

Firewall w strefie klienta (poradnik):

  • Tryb Blokuj wszystko poza dozwolonym: nie dodawaj żadnej reguły dla portu 3306. Jest zamknięty.
  • Tryb Zezwól na wszystko: dodaj regułę Przychodzący · Drop · TCP · port 3306.

Połączenia z kontenerów do VPS pozostają wewnątrz serwera i firewall strefy klienta ich nie dotyczy.

UFW na VPS: jeśli jest włączony, blokuje także połączenia z kontenerów. Zezwól na port 3306 tylko z interfejsu Dockera:

bash
ufw allow in on pterodactyl0 to any port 3306 proto tcp
  • allow in on pterodactyl0 – zezwala na ruch przychodzący tylko z interfejsu pterodactyl0 (z kontenerów serwerów gier).
  • to any port 3306 proto tcp – tylko na port TCP 3306.

Database host w Panelu#

  1. W części administracyjnej Panelu kliknij Databases po lewej, a potem Create New.
  2. Wypełnij formularz:
PoleCo wpisaćDlaczego
NameNa przykład local-mariadbNazwa hosta dla Ciebie; 1–⁠60 znaków.
Host172.18.0.1Adres, z którym łączy się Panel i który widzą też użytkownicy jako Endpoint swojej bazy. Dlatego nie 127.0.0.1.
Port3306Port MariaDB.
UsernamepterodactyluserKonto z sekcji Konto dla Panelu.
Password<HASLO_DB_HOST>Hasło tego konta.
Linked NodeTwój węzełBazy, które użytkownicy serwerów na tym węźle tworzą sami, powstają na tym hoście. Bez powiązania Panel wybiera dowolny host losowo. W części administracyjnej ten host jest proponowany jako domyślny dla serwerów na tym węźle.
  1. Kliknij Create. Panel od razu próbuje połączyć się z hostem. Jeśli się nie uda, pokazuje błąd i nie zapisuje hosta (zobacz Rozwiązywanie problemów).

Limit baz danych serwera#

Użytkownik może utworzyć tylko tyle baz, na ile pozwolisz. Domyślny limit to 0, a zakładka Databases mówi wtedy Databases cannot be created for this server.

  1. W części administracyjnej otwórz Servers i kliknij serwer.
  2. Przejdź do zakładki Build Configuration.
  3. W Application Feature Limits ustaw Database Limit, na przykład 2.
  4. Kliknij Update Build Configuration.

Tworzenie bazy danych z serwera#

Tę część wykonuje użytkownik serwera:

  1. W Panelu otwórz serwer i jego zakładkę Databases.
  2. Kliknij New Database.
  3. Wypełnij Database Name, na przykład luckperms. Wynikowa nazwa to s<ID>_luckperms. Dozwolone są litery, cyfry, - i _, długość 3–⁠48 znaków.
  4. Pole Connections From ustala, skąd użytkownik bazy może się łączyć. Bezpieczna wartość dla serwerów gier na tym węźle to 172.18.0.% (wszystkie kontenery). Puste pole oznacza %, czyli skądkolwiek.
  5. Kliknij Create Database.
  6. Kliknij ikonę oka obok nowej bazy. Pokazuje Endpoint (172.18.0.1:3306), Connections from, Username, Password i JDBC Connection String.

Wpisz te dane w konfiguracji pluginu. Większość pluginów chce adresu, nazwy bazy, użytkownika i hasła osobno. Na przykład LuckPerms w plugins/LuckPerms/config.yml:

plugins/LuckPerms/config.ymlYAML
storage-method: MariaDB
data:
  address: 172.18.0.1:3306
  database: s1_luckperms
  username: u1_AbCdEfGhIj
  password: '<HASLO_Z_PANELU>'
  • storage-method – typ magazynu; MariaDB lub MySQL.
  • address – Endpoint z Panelu (adres i port).
  • database, username – dokładne wartości z Panelu (w tym przykładzie zmyślone).
  • password – hasło z Panelu, w pojedynczych cudzysłowach ze względu na znaki specjalne.

Pluginy, które chcą jednego ciągu (JDBC URL), dostają wartość z pola JDBC Connection String w formie jdbc:mysql://user:password@172.18.0.1:3306/database. Więcej o bazach dla pluginów Minecrafta: MySQL dla pluginów.

Weryfikacja#

Z VPS sprawdź, czy użytkownik serwera może połączyć się przez adres używany przez kontenery:

bash
mariadb -h 172.18.0.1 -u <DB_USER> -p <DB_NAME> -e "SELECT 1;"
  • -h 172.18.0.1 – łączy się przez TCP z interfejsem Dockera.
  • -u <DB_USER> – użytkownik z Panelu (na przykład u1_AbCdEfGhIj).
  • -p – pyta o hasło.
  • <DB_NAME> – baza z Panelu (na przykład s1_luckperms).
  • -e "SELECT 1;" – wykonuje proste zapytanie i kończy.

Zobaczysz tabelę z liczbą 1. Jeśli w Connections From wpisano 172.18.0.%, ten test z VPS przechodzi, bo połączenie z 172.18.0.1 ma adres źródłowy 172.18.0.1.

Na koniec zrestartuj serwer gier i sprawdź w jego konsoli, czy plugin połączył się z bazą bez błędów.

Dla zaawansowanych: baza danych na innym serwerze#

Jeśli MariaDB działa na innym VPS niż Panel i Wings:

  • Konto dla Panelu utwórz z adresem IP VPS z Panelem ('pterodactyluser'@'203.0.113.10').
  • W polu Host wpisz adres IP serwera bazy danych. Zarówno Panel, jak i kontenery na węzłach muszą móc do niego dotrzeć.
  • W firewallu serwera bazy danych zezwól na port 3306 tylko z adresów IP Panelu i węzłów (reguła z wypełnionym IP / zakres źródłowy).
  • Connections From dla użytkowników baz serwerów ustaw na adres IP węzła.

Rozwiązywanie problemów#

Panel przy tworzeniu hosta zgłasza Access denied for user 'pterodactyluser'@'172.18.0.1'#

Hasło jest błędne albo użytkownik nie ma hosta 172.18.0.1. Sprawdź konta:

SQL
SELECT User, Host FROM mysql.user WHERE User = 'pterodactyluser';

Jeśli host jest inny, usuń konto (DROP USER 'pterodactyluser'@'<STARY_HOST>';) i utwórz je ponownie zgodnie z sekcją Konto dla Panelu.

Connection refused lub Can't connect to … server on '172.18.0.1'#

MariaDB nie nasłuchuje na tym adresie. Sprawdź ss -tlnp | grep 3306 (musi pokazać 0.0.0.0:3306) i plik 60-pterodactyl.cnf. Po każdej zmianie zrestartuj MariaDB.

Plugin nie mógł dotrzeć do bazy. Najczęściej w konfiguracji pluginu jest localhost lub 127.0.0.1 zamiast 172.18.0.1, albo UFW blokuje połączenie z kontenera (zobacz Firewall).

Plugin zgłasza Access denied for user 'u1_…'@'172.18.0.x'#

Connections From zawiera adres, z którego kontener się nie łączy. Usuń bazę i utwórz ją ponownie z 172.18.0.%, albo wygeneruj w Panelu nowe hasło do bazy, jeśli wpisano je błędnie.

Użytkownik nie widzi przycisku New Database#

Serwer ma Database Limit równy 0 albo limit jest wyczerpany. Zmień go zgodnie z sekcją Limit baz danych serwera.

Podsumowanie

  • Kontenery serwerów gier widzą VPS pod 172.18.0.1, nie pod 127.0.0.1.
  • Konto Panelu ma WITH GRANT OPTION i może logować się tylko z 172.18.0.1.
  • MariaDB nasłuchuje na 0.0.0.0 dzięki plikowi 60-pterodactyl.cnf; port 3306 jest zamknięty dla internetu przez firewall.
  • Database Host w Panelu ma adres 172.18.0.1, który użytkownicy widzą jako Endpoint.
  • Ustaw serwerom Database Limit, inaczej użytkownicy nie mogą tworzyć baz.

Wyszukiwanie w poradnikach