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
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ę łączy | Skąd | Dokąd |
|---|---|---|
| Panel (tworzy bazy i użytkowników) | z VPS, adres źródłowy 172.18.0.1 | 172.18.0.1:3306 |
| Serwer gier (plugin) | z kontenera, adres 172.18.0.x | 172.18.0.1:3306 |
Sprawdź, czy interfejs istnieje (Wings musiał wystartować przynajmniej raz):
ip -4 addr show pterodactyl0ip -4 addr show pterodactyl0– wypisuje adres IPv4 interfejsupterodactyl0.
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.
Wygeneruj silne hasło tylko z liter i cyfr (generator haseł).
Zaloguj się do MariaDB:
bash mariadbUtwó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. | 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 OPTION | Konto 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/). 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.
Utwórz plik:
bash nano /etc/mysql/mariadb.conf.d/60-pterodactyl.cnfWklej zawartość, zapisz i zamknij edytor:
/etc/ mysql/ inimariadb.conf.d/ 60-pterodactyl.cnf [mysqld] bind-address = 0.0.0.0
| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
[mysqld] | Grupa opcji czytana przez serwer bazy danych (MariaDB 10.11 na Ubuntu i 11.8 na Debianie). | – | Nigdy. |
bind-address | Na których adresach MariaDB przyjmuje połączenia. 0.0.0.0 = wszystkie adresy IPv4 VPS. | 0.0.0.0 | Jeśli nie chcesz dostępu sieciowego, wróć do 127.0.0.1 (usuń ten plik). |
Zrestartuj MariaDB i sprawdź, gdzie nasłuchuje:
bash systemctl restart mariadb ss -tlnp | grep 3306ss -tlnp– wypisuje nasłuchujące porty TCP i programy;grep 3306wybiera linię MariaDB.
Zobaczysz
0.0.0.0:3306i nazwę procesumariadbd.
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:
ufw allow in on pterodactyl0 to any port 3306 proto tcpallow in on pterodactyl0– zezwala na ruch przychodzący tylko z interfejsupterodactyl0(z kontenerów serwerów gier).to any port 3306 proto tcp– tylko na port TCP 3306.
Database host w Panelu#
- W części administracyjnej Panelu kliknij Databases po lewej, a potem Create New.
- Wypełnij formularz:
| Pole | Co wpisać | Dlaczego |
|---|---|---|
| Name | Na przykład local-mariadb | Nazwa hosta dla Ciebie; 1–60 znaków. |
| Host | 172.18.0.1 | Adres, z którym łączy się Panel i który widzą też użytkownicy jako Endpoint swojej bazy. Dlatego nie 127.0.0.1. |
| Port | 3306 | Port MariaDB. |
| Username | pterodactyluser | Konto z sekcji Konto dla Panelu. |
| Password | <HASLO_DB_HOST> | Hasło tego konta. |
| Linked Node | Twó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. |
- 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.
- W części administracyjnej otwórz Servers i kliknij serwer.
- Przejdź do zakładki Build Configuration.
- W Application Feature Limits ustaw Database Limit, na przykład
2. - Kliknij Update Build Configuration.
Tworzenie bazy danych z serwera#
Tę część wykonuje użytkownik serwera:
- W Panelu otwórz serwer i jego zakładkę Databases.
- Kliknij New Database.
- Wypełnij Database Name, na przykład
luckperms. Wynikowa nazwa tos<ID>_luckperms. Dozwolone są litery, cyfry,-i_, długość 3–48 znaków. - 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. - Kliknij Create Database.
- 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/:
storage-method: MariaDB
data:
address: 172.18.0.1:3306
database: s1_luckperms
username: u1_AbCdEfGhIj
password: '<HASLO_Z_PANELU>'storage-method– typ magazynu;MariaDBlubMySQL.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:. 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:
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ładu1_AbCdEfGhIj).-p– pyta o hasło.<DB_NAME>– baza z Panelu (na przykłads1_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
3306tylko 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:
SELECT User, Host FROM mysql.user WHERE User = 'pterodactyluser';Jeśli host jest inny, usuń konto (DROP USER 'pterodactyluser'@'<STARY_) 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 zgłasza Communications link failure lub przekroczenie czasu połączenia#
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 pod127.0.0.1. - Konto Panelu ma
WITH GRANT OPTIONi może logować się tylko z172.18.0.1. - MariaDB nasłuchuje na
0.0.0.0dzięki plikowi60-pterodactyl.cnf; port3306jest 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.