Plugins wie LuckPerms oder CoreProtect speichern ihre Daten in einer MySQL-Datenbank. Wir richten MariaDB als Database Host für Pterodactyl ein, damit Benutzer mit einem Klick im Panel eine Datenbank für ihren Server anlegen können.
Was Sie brauchen
So funktioniert es#
Wenn ein Benutzer in der Registerkarte Databases seines Servers auf New Database klickt, verbindet sich das Panel mit dem Database Host und legt eine Datenbank s<Server-ID>_<Name> und einen Benutzer u<Server-ID>_<zufällige Zeichen> mit einem zufälligen Passwort an. Der Gameserver verbindet sich dann aus seinem Container mit dieser Datenbank.
Das Schlüsselwort ist Container. In einem Container bedeutet die Adresse 127.0.0.1 den Container selbst, nicht den VPS. Der Gameserver findet MariaDB also nicht unter 127.0.0.1. Auf demselben VPS erreichen Container den Server selbst jedoch unter 172.18.0.1 (die von Wings erstellte Schnittstelle pterodactyl0). Diese Adresse verwenden wir für den Database Host:
| Wer sich verbindet | Von | Nach |
|---|---|---|
| Panel (legt Datenbanken und Benutzer an) | vom VPS, Quelladresse 172.18.0.1 | 172.18.0.1:3306 |
| Gameserver (Plugin) | aus dem Container, Adresse 172.18.0.x | 172.18.0.1:3306 |
Prüfen Sie, dass die Schnittstelle existiert (Wings muss mindestens einmal gelaufen sein):
ip -4 addr show pterodactyl0ip -4 addr show pterodactyl0– gibt die IPv4-Adresse der Schnittstellepterodactyl0aus.
Die Ausgabe enthält die Zeile inet 172.18.0.1/16. Meldet der Befehl Device "pterodactyl0" does not exist, ist Wings noch nicht gelaufen; schließen Sie zuerst seine Installation ab.
Ein Konto für das Panel#
Das Panel braucht ein MariaDB-Konto, das Datenbanken und Benutzer anlegen und ihnen Rechte erteilen kann. Verwenden Sie nicht das Konto pterodactyl aus der Panel-Installation; es hat nur Rechte auf die Datenbank panel.
Erzeugen Sie ein starkes Passwort nur aus Buchstaben und Ziffern (Passwortgenerator).
Melden Sie sich an MariaDB an:
bash mariadbLegen Sie das Konto an. Ersetzen Sie
<DB_HOST_PASSWORT>durch das Passwort aus Schritt 1:SQL CREATE USER 'pterodactyluser'@'172.18.0.1' IDENTIFIED BY '<DB_HOST_PASSWORT>'; GRANT ALL PRIVILEGES ON *.* TO 'pterodactyluser'@'172.18.0.1' WITH GRANT OPTION; exit
| Teil | Was er bedeutet |
|---|---|
'pterodactyluser'@'172. | Der Benutzer darf sich nur von 172.18.0.1 anmelden, also nur von diesem VPS über die Docker-Schnittstelle. Niemand kann sich mit diesem Konto aus dem Internet anmelden, auch nicht mit dem richtigen Passwort. |
ALL PRIVILEGES ON *.* | Alle Rechte auf alle Datenbanken. Das Panel muss Datenbanken und Benutzer anlegen und löschen. |
WITH GRANT OPTION | Das Konto darf anderen Benutzern Rechte erteilen. Ohne sie könnte das Panel einem neuen Datenbankbenutzer keinen Zugriff auf eine neue Datenbank geben, und das Anlegen würde scheitern. |
Dieses Konto ist praktisch ein Datenbankadministrator
Wer sein Passwort kennt und auf den VPS gelangt, kann alle Datenbanken lesen und löschen, einschließlich der des Panels. Deshalb erlaubt das Konto nur den Host 172.18.0.1, und Sie sollten das Passwort nirgendwo anders als im Panel eingeben. Das Panel speichert das Passwort mit dem Schlüssel APP_KEY verschlüsselt.
MariaDB im Netz lauschen lassen#
Nach der Installation lauscht MariaDB nur auf 127.0.0.1 (die Einstellung bind-address in /etc/). Container erreichen es dort nicht. Das ändern Sie mit einer eigenen Datei, die nach der Standarddatei geladen wird und sie überschreibt. So bleibt die Standarddatei unberührt, auch nach Paket-Updates.
Erstellen Sie die Datei:
bash nano /etc/mysql/mariadb.conf.d/60-pterodactyl.cnfFügen Sie den Inhalt ein, speichern Sie und schließen Sie den Editor:
/etc/ mysql/ inimariadb.conf.d/ 60-pterodactyl.cnf [mysqld] bind-address = 0.0.0.0
| Einstellung | Was sie tut | Empfohlener Wert | Wann ändern |
|---|---|---|---|
[mysqld] | Die vom Datenbankserver gelesene Optionsgruppe (MariaDB 10.11 unter Ubuntu und 11.8 unter Debian). | – | Nie. |
bind-address | Auf welchen Adressen MariaDB Verbindungen annimmt. 0.0.0.0 = alle IPv4-Adressen des VPS. | 0.0.0.0 | Möchten Sie keinen Netzwerkzugriff, gehen Sie zurück zu 127.0.0.1 (löschen Sie diese Datei). |
Starten Sie MariaDB neu und prüfen Sie, wo es lauscht:
bash systemctl restart mariadb ss -tlnp | grep 3306ss -tlnp– listet lauschende TCP-Ports und Programme auf;grep 3306wählt die MariaDB-Zeile aus.
Sie sehen
0.0.0.0:3306und den Prozessnamenmariadbd.
Warum nicht einfach bind-address = 172.18.0.1
MariaDB kann auch auf einer bestimmten Adresse lauschen. Die Schnittstelle pterodactyl0 wird aber erst von Docker erstellt, sobald es startet. Käme MariaDB beim Booten des VPS zuerst hoch, fände es die Adresse nicht und würde nicht starten. 0.0.0.0 zu verwenden und den Zugriff von außen mit der Firewall zu schließen ist sicherer.
Firewall#
MariaDB lauscht jetzt auch auf der öffentlichen IP-Adresse des VPS. Port 3306 muss für das Internet geschlossen bleiben. Die Datenbankbenutzer der Gameserver dürfen sich standardmäßig von überall (%) verbinden, könnten also von außen angemeldet werden.
Firewall im Kundenbereich (Anleitung):
- Modus Alles blockieren außer Erlaubtem: Fügen Sie keine Regel für Port
3306hinzu. Er ist geschlossen. - Modus Alles erlauben: Fügen Sie die Regel Eingehend · Verwerfen · TCP · Port
3306hinzu.
Verbindungen von Containern zum VPS bleiben innerhalb des Servers, und die Firewall im Kundenbereich beeinflusst sie nicht.
UFW auf dem VPS: Haben Sie es aktiviert, blockiert es auch Verbindungen von Containern. Erlauben Sie Port 3306 nur von der Docker-Schnittstelle:
ufw allow in on pterodactyl0 to any port 3306 proto tcpallow in on pterodactyl0– erlaubt eingehenden Verkehr nur von der Schnittstellepterodactyl0(von Gameserver-Containern).to any port 3306 proto tcp– nur zu TCP-Port 3306.
Der Database Host im Panel#
- Klicken Sie im Admin-Bereich des Panels links auf Databases und dann auf Create New.
- Füllen Sie das Formular aus:
| Feld | Was eintragen | Warum |
|---|---|---|
| Name | Zum Beispiel local-mariadb | Ein Name für den Host, für Sie; 1–60 Zeichen. |
| Host | 172.18.0.1 | Die Adresse, mit der sich das Panel verbindet, und zugleich die Adresse, die Benutzer als Endpoint ihrer Datenbank sehen. Deshalb nicht 127.0.0.1. |
| Port | 3306 | Der MariaDB-Port. |
| Username | pterodactyluser | Das Konto aus Ein Konto für das Panel. |
| Password | <DB_HOST_PASSWORT> | Das Passwort dieses Kontos. |
| Linked Node | Ihre Node | Datenbanken, die Benutzer von Servern auf dieser Node selbst anlegen, werden auf diesem Host erstellt. Ohne Verknüpfung wählt das Panel irgendeinen Host zufällig. Im Admin-Bereich wird dieser Host für Server auf dieser Node als Standard angeboten. |
- Klicken Sie auf Create. Das Panel versucht sofort, sich mit dem Host zu verbinden. Scheitert das, zeigt es einen Fehler und speichert den Host nicht (siehe Fehlerbehebung).
Das Datenbanklimit des Servers#
Ein Benutzer kann nur so viele Datenbanken anlegen, wie Sie erlauben. Das Standardlimit ist 0, dann sagt die Registerkarte Databases Databases cannot be created for this server.
- Öffnen Sie im Admin-Bereich Servers und klicken Sie auf den Server.
- Wechseln Sie zur Registerkarte Build Configuration.
- Setzen Sie unter Application Feature Limits das Database Limit, zum Beispiel
2. - Klicken Sie auf Update Build Configuration.
Eine Datenbank vom Server aus anlegen#
Diesen Teil erledigt der Benutzer des Servers:
- Öffnen Sie im Panel den Server und seine Registerkarte Databases.
- Klicken Sie auf New Database.
- Füllen Sie Database Name aus, zum Beispiel
luckperms. Der resultierende Name lautets<ID>_luckperms. Erlaubt sind Buchstaben, Ziffern,-und_, 3–48 Zeichen lang. - Das Feld Connections From legt fest, von wo sich der Datenbankbenutzer verbinden darf. Ein sicherer Wert für Gameserver auf dieser Node ist
172.18.0.%(alle Container). Ein leeres Feld bedeutet%, also von überall. - Klicken Sie auf Create Database.
- Klicken Sie auf das Augensymbol neben der neuen Datenbank. Es zeigt Endpoint (
172.18.0.1:3306), Connections from, Username, Password und JDBC Connection String.
Tragen Sie diese Daten in die Konfiguration des Plugins ein. Die meisten Plugins möchten Adresse, Datenbankname, Benutzer und Passwort getrennt. Zum Beispiel LuckPerms in plugins/:
storage-method: MariaDB
data:
address: 172.18.0.1:3306
database: s1_luckperms
username: u1_AbCdEfGhIj
password: '<PASSWORT_AUS_DEM_PANEL>'storage-method– der Speichertyp;MariaDBoderMySQL.address– der Endpoint aus dem Panel (Adresse und Port).database,username– die genauen Werte aus dem Panel (in diesem Beispiel ausgedacht).password– das Passwort aus dem Panel, wegen Sonderzeichen in einfachen Anführungszeichen.
Plugins, die eine einzelne Zeichenkette (JDBC-URL) möchten, erhalten den Wert aus dem Feld JDBC Connection String in der Form jdbc:. Mehr zu Datenbanken für Minecraft-Plugins: MySQL für Plugins.
Überprüfung#
Prüfen Sie vom VPS aus, dass sich der Benutzer des Servers über die Adresse verbinden kann, die die Container verwenden:
mariadb -h 172.18.0.1 -u <DB_BENUTZER> -p <DB_NAME> -e "SELECT 1;"-h 172.18.0.1– verbindet sich über TCP mit der Docker-Schnittstelle.-u <DB_BENUTZER>– der Benutzer aus dem Panel (zum Beispielu1_AbCdEfGhIj).-p– fragt nach dem Passwort.<DB_NAME>– die Datenbank aus dem Panel (zum Beispiels1_luckperms).-e "SELECT 1;"– führt eine einfache Abfrage aus und beendet sich.
Sie sehen eine Tabelle mit der Zahl 1. Haben Sie bei Connections From 172.18.0.% eingetragen, besteht dieser Test vom VPS aus, weil eine Verbindung zu 172.18.0.1 die Quelladresse 172.18.0.1 hat.
Starten Sie zum Schluss den Gameserver neu und prüfen Sie in seiner Konsole, dass sich das Plugin ohne Fehler mit der Datenbank verbunden hat.
Für Fortgeschrittene: die Datenbank auf einem anderen Server#
Läuft MariaDB auf einem anderen VPS als Panel und Wings:
- Legen Sie das Panel-Konto mit der IP-Adresse des VPS mit dem Panel an (
'pterodactyluser'@'203.).0. 113. 10' - Tragen Sie im Feld Host die IP-Adresse des Datenbankservers ein. Sowohl das Panel als auch die Container auf den Nodes müssen ihn erreichen können.
- Erlauben Sie in der Firewall des Datenbankservers Port
3306nur von den IP-Adressen des Panels und der Nodes (eine Regel mit ausgefülltem Quell-IP / Bereich). - Setzen Sie Connections From für die Datenbankbenutzer der Server auf die IP-Adresse der Node.
Fehlerbehebung#
Das Panel meldet beim Anlegen des Hosts Access denied for user 'pterodactyluser'@'172.18.0.1' #
Das Passwort ist falsch, oder der Benutzer hat nicht den Host 172.18.0.1. Prüfen Sie die Konten:
SELECT User, Host FROM mysql.user WHERE User = 'pterodactyluser';Ist der Host ein anderer, löschen Sie das Konto (DROP USER 'pterodactyluser'@'<ALTER_) und legen Sie es wie unter Ein Konto für das Panel beschrieben erneut an.
Connection refused oder Can't connect to … server on '172.18.0.1'#
MariaDB lauscht nicht auf dieser Adresse. Prüfen Sie ss -tlnp | grep 3306 (es muss 0.0.0.0:3306 zeigen) und die Datei 60-pterodactyl.cnf. Starten Sie MariaDB nach jeder Änderung neu.
Das Plugin meldet Communications link failure oder ein Verbindungs-Timeout#
Das Plugin konnte die Datenbank nicht erreichen. Meist steht in der Plugin-Konfiguration localhost oder 127.0.0.1 statt 172.18.0.1, oder UFW blockiert die Verbindung aus dem Container (siehe Firewall).
Das Plugin meldet Access denied for user 'u1_…'@'172.18.0.x'#
Connections From enthält eine Adresse, von der sich der Container nicht verbindet. Löschen Sie die Datenbank und legen Sie sie mit 172.18.0.% erneut an, oder erzeugen Sie im Panel ein neues Passwort für die Datenbank, falls Sie es falsch eingegeben haben.
Der Benutzer sieht die Schaltfläche New Database nicht#
Der Server hat ein Database Limit von 0, oder das Limit ist ausgeschöpft. Ändern Sie es wie unter Das Datenbanklimit des Servers beschrieben.
Zusammenfassung
- Gameserver-Container sehen den VPS unter
172.18.0.1, nicht unter127.0.0.1. - Das Panel-Konto hat
WITH GRANT OPTIONund darf sich nur von172.18.0.1anmelden. - MariaDB lauscht dank der Datei
60-pterodactyl.cnfauf0.0.0.0; Port3306ist durch die Firewall für das Internet geschlossen. - Der Database Host im Panel hat die Adresse
172.18.0.1, die Benutzer als Endpoint sehen. - Setzen Sie für Server ein Database Limit, sonst können Benutzer keine Datenbanken anlegen.