Plugins zoals LuckPerms of CoreProtect slaan hun gegevens op in een MySQL-database. We stellen MariaDB in als databasehost van Pterodactyl, zodat gebruikers met één klik in het Panel een database voor hun server kunnen aanmaken.
Wat je nodig hebt
- Pterodactyl Panel (handleiding) en Wings (handleiding) op dezelfde VPS
- MariaDB uit de installatie van het Panel
- Een SSH-verbinding als root
- Ongeveer 20 minuten
Hoe het werkt#
Wanneer een gebruiker op het tabblad Databases van zijn server op New Database klikt, maakt het Panel verbinding met de databasehost en maakt het daar een database s<server-ID>_<naam> en een gebruiker u<server-ID>_ met een willekeurig wachtwoord aan. De gameserver maakt daarna vanuit zijn container verbinding met deze database.
Het sleutelwoord is container. Het adres 127.0.0.1 binnen een container betekent de container zelf, niet de VPS. De gameserver vindt MariaDB op 127.0.0.1 dus niet. Op dezelfde VPS zien containers de server zelf wel via het adres 172.18.0.1 (de interface pterodactyl0, die Wings heeft aangemaakt). Dat adres gebruiken we als adres van de databasehost:
| Wie maakt verbinding | Vanwaar | Waarheen |
|---|---|---|
| Panel (maakt databases en gebruikers aan) | vanaf de VPS, bronadres 172.18.0.1 | 172.18.0.1:3306 |
| Gameserver (plugin) | vanuit de container, adres 172.18.0.x | 172.18.0.1:3306 |
Controleer of de interface bestaat (Wings moet minstens één keer hebben gedraaid):
ip -4 addr show pterodactyl0ip -4 addr show pterodactyl0– toont het IPv4-adres van de interfacepterodactyl0.
In de uitvoer zie je de regel inet 172.18.0.1/16. Meldt het commando Device "pterodactyl0" does not exist, dan heeft Wings nog niet gedraaid. Rond eerst de installatie ervan af.
Een account voor het Panel#
Het Panel heeft in MariaDB een account nodig dat databases en gebruikers mag aanmaken en hun rechten mag geven. Gebruik niet het account pterodactyl uit de installatie van het Panel: dat heeft alleen rechten op de database panel.
Genereer een sterk wachtwoord met alleen letters en cijfers (wachtwoordgenerator).
Log in op MariaDB:
bash mariadbMaak het account aan. Vervang
<DB_HOST_PASSWORD>door het wachtwoord uit stap 1:SQL CREATE USER 'pterodactyluser'@'172.18.0.1' IDENTIFIED BY '<DB_HOST_PASSWORD>'; GRANT ALL PRIVILEGES ON *.* TO 'pterodactyluser'@'172.18.0.1' WITH GRANT OPTION; exit
| Onderdeel | Wat het betekent |
|---|---|
'pterodactyluser'@'172. | De gebruiker mag alleen inloggen vanaf het adres 172.18.0.1, dus alleen vanaf deze VPS via de interface van Docker. Vanaf internet logt niemand met dit account in, ook niet met het juiste wachtwoord. |
ALL PRIVILEGES ON *.* | Alle rechten op alle databases. Het Panel moet databases en gebruikers kunnen aanmaken en verwijderen. |
WITH GRANT OPTION | Het account mag rechten toekennen aan andere gebruikers. Zonder deze optie zou het Panel een nieuwe databasegebruiker geen toegang tot een nieuwe database kunnen geven en zou het aanmaken mislukken. |
Dit account is in de praktijk een databasebeheerder
Wie het wachtwoord ervan kent en op de VPS binnenkomt, kan alle databases lezen en verwijderen, ook de database van het Panel. Daarom is voor het account alleen de host 172.18.0.1 toegestaan en vul je het wachtwoord nergens anders in dan in het Panel. Het Panel slaat het wachtwoord versleuteld op met de sleutel APP_KEY.
MariaDB laten luisteren op het netwerk#
Na de installatie luistert MariaDB alleen op 127.0.0.1 (de instelling bind-address in het bestand /etc/). Containers kunnen er zo niet bij. Je wijzigt de instelling met een eigen bestand dat na het standaardbestand wordt geladen en het overschrijft. Het standaardbestand blijft zo ongewijzigd, ook na updates van het pakket.
Maak het bestand aan:
bash nano /etc/mysql/mariadb.conf.d/60-pterodactyl.cnfPlak de inhoud, sla op en sluit de editor:
/etc/ mysql/ inimariadb.conf.d/ 60-pterodactyl.cnf [mysqld] bind-address = 0.0.0.0
| Instelling | Wat het doet | Aanbevolen waarde | Wanneer wijzigen |
|---|---|---|---|
[mysqld] | De groep opties die de databaseserver leest (MariaDB 10.11 op Ubuntu en 11.8 op Debian). | – | Nooit. |
bind-address | Op welke adressen MariaDB verbindingen accepteert. 0.0.0.0 = op alle IPv4-adressen van de VPS. | 0.0.0.0 | Wil je geen netwerktoegang, zet dan 127.0.0.1 terug (verwijder dit bestand). |
Herstart MariaDB en controleer waar hij luistert:
bash systemctl restart mariadb ss -tlnp | grep 3306ss -tlnp– toont de luisterende TCP-poorten en programma's;grep 3306selecteert de regel van MariaDB.
Je ziet
0.0.0.0:3306en de procesnaammariadbd.
Waarom niet gewoon bind-address = 172.18.0.1
MariaDB kan ook op een specifiek adres luisteren. De interface pterodactyl0 maakt Docker echter pas aan nadat het zelf is gestart. Zou MariaDB bij het opstarten van de VPS eerder klaar zijn, dan vindt hij het adres niet en start hij niet. Veiliger is 0.0.0.0 gebruiken en de toegang van buitenaf dichtzetten met de firewall.
Firewall#
MariaDB luistert nu ook op het openbare IP-adres van de VPS. Poort 3306 moet vanaf internet gesloten blijven. Voor de databasegebruikers van gameservers is standaard toegang vanaf elke locatie (%) toegestaan, dus iemand zou er van buitenaf mee kunnen inloggen.
Firewall in je klantaccount (handleiding):
- Modus Alles blokkeren behalve wat is toegestaan: voeg voor poort
3306geen regel toe. De poort is gesloten. - Modus Alles toestaan: voeg de regel Inkomend · Verwerpen · TCP · poort
3306toe.
Verbindingen van containers naar de VPS blijven binnen de server en de firewall van je klantaccount heeft er geen invloed op.
UFW op de VPS: heb je UFW ingeschakeld, dan blokkeert het ook verbindingen vanuit containers. Sta poort 3306 alleen toe vanaf de interface van Docker:
ufw allow in on pterodactyl0 to any port 3306 proto tcpallow in on pterodactyl0– staat inkomend verkeer alleen toe vanaf de interfacepterodactyl0(vanuit de containers van gameservers).to any port 3306 proto tcp– alleen naar TCP-poort 3306.
De databasehost in het Panel#
- Klik in het beheergedeelte van het Panel links op Databases en daarna op Create New.
- Vul het formulier in:
| Veld | Wat je invult | Waarom |
|---|---|---|
| Name | Bijvoorbeeld local-mariadb | De naam van de host, voor jezelf, 1–60 tekens. |
| Host | 172.18.0.1 | Het adres waarmee het Panel verbinding maakt en tegelijk het adres dat gebruikers zien als Endpoint van hun database. Daarom niet 127.0.0.1. |
| Port | 3306 | De poort van MariaDB. |
| Username | pterodactyluser | Het account uit het hoofdstuk Een account voor het Panel. |
| Password | <DB_HOST_PASSWORD> | Het wachtwoord van dit account. |
| Linked Node | Jouw node | Databases die gebruikers van servers op deze node zelf aanmaken, komen op deze host terecht. Zonder koppeling kiest het Panel willekeurig een van de hosts. In het beheergedeelte wordt de host bij servers van deze node als standaard aangeboden. |
- Klik op Create. Het Panel probeert meteen verbinding te maken met de host. Lukt dat niet, dan toont het een fout en slaat het de host niet op (zie Als iets niet werkt).
De databaselimiet van een server#
Een gebruiker kan maar zoveel databases aanmaken als jij toestaat. Standaard is de limiet 0; het tabblad Databases meldt dan Databases cannot be created for this server.
- Open in het beheergedeelte Servers en klik op de server.
- Ga naar het tabblad Build Configuration.
- Stel in het onderdeel Application Feature Limits de Database Limit in, bijvoorbeeld
2. - Klik op Update Build Configuration.
Een database aanmaken vanuit de server#
Dit doet de gebruiker van de server zelf:
- Open in het Panel de server en het tabblad Databases.
- Klik op New Database.
- Vul Database Name in, bijvoorbeeld
luckperms. De uiteindelijke naam wordts<ID>_luckperms. Toegestaan zijn letters, cijfers,-en_, met een lengte van 3–48 tekens. - Het veld Connections From bepaalt vanwaar de databasegebruiker verbinding mag maken. Een veilige waarde voor gameservers op deze node is
172.18.0.%(alle containers). Een leeg veld betekent%, dus vanaf elke locatie. - Klik op Create Database.
- Klik bij de nieuwe database op het oogpictogram. Je ziet het Endpoint (
172.18.0.1:3306), Connections from, Username, Password en de JDBC Connection String.
Vul de gegevens in de configuratie van de plugin in. De meeste plugins willen het adres, de databasenaam, de gebruiker en het wachtwoord apart. Bijvoorbeeld LuckPerms in het bestand plugins/:
storage-method: MariaDB
data:
address: 172.18.0.1:3306
database: s1_luckperms
username: u1_AbCdEfGhIj
password: '<PASSWORD_FROM_PANEL>'storage-method– het type opslag;MariaDBofMySQL.address– het Endpoint uit het Panel (adres en poort).database,username– de exacte waarden uit het Panel (in het voorbeeld verzonnen).password– het wachtwoord uit het Panel, tussen enkele aanhalingstekens vanwege speciale tekens.
Plugins die één tekenreeks willen (JDBC-URL), krijgen de waarde uit het veld JDBC Connection String in de vorm jdbc:. Meer over databases voor Minecraft-plugins: MySQL voor plugins.
Controle#
Controleer vanaf de VPS of de gebruiker van de server verbinding kan maken via het adres dat de containers gebruiken:
mariadb -h 172.18.0.1 -u <DB_USER> -p <DB_NAME> -e "SELECT 1;"-h 172.18.0.1– verbinding via TCP met de interface van Docker.-u <DB_USER>– de gebruiker uit het Panel (bijvoorbeeldu1_AbCdEfGhIj).-p– vraagt om het wachtwoord.<DB_NAME>– de database uit het Panel (bijvoorbeelds1_luckperms).-e "SELECT 1;"– voert een eenvoudige query uit en stopt.
Je ziet een tabel met het getal 1. Heb je bij Connections From 172.18.0.% ingevuld, dan slaagt deze test vanaf de VPS, omdat een verbinding met 172.18.0.1 het bronadres 172.18.0.1 heeft.
Herstart tot slot de gameserver en controleer in de console ervan of de plugin zonder fouten verbinding heeft gemaakt met de database.
Voor gevorderden: de database op een andere server#
Draait MariaDB op een andere VPS dan het Panel en Wings:
- Maak het account voor het Panel aan met het IP-adres van de VPS met het Panel (
'pterodactyluser'@'203.).0. 113. 10' - Vul in het veld Host het IP-adres van de databaseserver in. Zowel het Panel als de containers op de nodes moeten dat adres kunnen bereiken.
- Sta in de firewall van de databaseserver poort
3306alleen toe vanaf de IP-adressen van het Panel en de nodes (een regel met een ingevuld Bron-IP). - Stel bij de databasegebruikers van servers Connections From in op het IP-adres van de node.
Als iets niet werkt#
Het Panel meldt bij het aanmaken van de host Access denied for user 'pterodactyluser'@'172.18.0.1' #
Het wachtwoord klopt niet, of de gebruiker heeft niet de host 172.18.0.1. Controleer de accounts:
SELECT User, Host FROM mysql.user WHERE User = 'pterodactyluser';Is de host anders, verwijder dan het account (DROP USER 'pterodactyluser'@'<OLD_) en maak het opnieuw aan volgens het hoofdstuk Een account voor het Panel.
Connection refused of Can't connect to … server on '172.18.0.1'#
MariaDB luistert niet op dit adres. Controleer ss -tlnp | grep 3306 (er moet 0.0.0.0:3306 staan) en het bestand 60-pterodactyl.cnf. Herstart MariaDB na een wijziging.
De plugin meldt Communications link failure of een time-out van de verbinding#
De plugin heeft de database niet bereikt. Meestal staat in de configuratie van de plugin localhost of 127.0.0.1 in plaats van 172.18.0.1, of UFW blokkeert de verbinding vanuit de container (zie Firewall).
De plugin meldt Access denied for user 'u1_…'@'172.18.0.x'#
Bij Connections From staat een adres waarvandaan de container geen verbinding maakt. Verwijder de database en maak hem opnieuw aan met de waarde 172.18.0.%, of genereer in het Panel bij de database een nieuw wachtwoord als je het verkeerd hebt ingevuld.
De gebruiker ziet de knop New Database niet#
De server heeft een Database Limit van 0, of heeft de limiet al bereikt. Pas de limiet aan volgens het hoofdstuk De databaselimiet van een server.
Samenvatting
- De containers van gameservers zien de VPS op het adres
172.18.0.1, niet op127.0.0.1. - Het account voor het Panel heeft
WITH GRANT OPTIONen mag alleen inloggen vanaf172.18.0.1. - MariaDB luistert op
0.0.0.0dankzij het bestand60-pterodactyl.cnf; poort3306is vanaf internet gesloten door de firewall. - De Database Host in het Panel heeft het adres
172.18.0.1, dat gebruikers zien als Endpoint. - Stel voor servers een Database Limit in, anders kunnen ze geen database aanmaken.