Pluginy jako LuckPerms nebo CoreProtect ukládají data do MySQL databáze. Nastavíme MariaDB jako databázový host Pterodactylu, aby si uživatelé mohli databázi pro svůj server založit jedním kliknutím v Panelu.
Co budete potřebovat
Jak to funguje#
Když uživatel v záložce Databases svého serveru klikne na New Database, Panel se připojí k databázovému hostiteli a založí na něm databázi s<ID serveru>_<název> a uživatele u<ID serveru>_<náhodné znaky> s náhodným heslem. Herní server se pak k této databázi připojuje ze svého kontejneru.
Klíčový je kontejner. Adresa 127.0.0.1 uvnitř kontejneru znamená kontejner samotný, ne VPS. Herní server proto MariaDB na 127.0.0.1 nenajde. Na stejné VPS ale kontejnery vidí samotný server přes adresu 172.18.0.1 (rozhraní pterodactyl0, které vytvořil Wings). Tu použijeme jako adresu databázového hostitele:
| Kdo se připojuje | Odkud | Kam |
|---|---|---|
| Panel (zakládá databáze a uživatele) | z VPS, zdrojová adresa 172.18.0.1 | 172.18.0.1:3306 |
| Herní server (plugin) | z kontejneru, adresa 172.18.0.x | 172.18.0.1:3306 |
Ověřte, že rozhraní existuje (Wings musí aspoň jednou běžet):
ip -4 addr show pterodactyl0ip -4 addr show pterodactyl0– vypíše IPv4 adresu rozhranípterodactyl0.
Ve výpisu uvidíte řádek inet 172.18.0.1/16. Pokud příkaz hlásí Device "pterodactyl0" does not exist, Wings ještě neběžel, dokončete nejdřív jeho instalaci.
Účet pro Panel#
Panel potřebuje v MariaDB účet, který smí zakládat databáze a uživatele a předávat jim práva. Nepoužívejte účet pterodactyl z instalace Panelu, ten má práva jen k databázi panel.
Vygenerujte silné heslo jen z písmen a číslic (generátor hesel).
Přihlaste se do MariaDB:
bash mariadbVytvořte účet. Za
<HESLO_DB_HOSTA>dosaďte heslo z kroku 1:SQL CREATE USER 'pterodactyluser'@'172.18.0.1' IDENTIFIED BY '<HESLO_DB_HOSTA>'; GRANT ALL PRIVILEGES ON *.* TO 'pterodactyluser'@'172.18.0.1' WITH GRANT OPTION; exit
| Část | Co znamená |
|---|---|
'pterodactyluser'@'172. | Uživatel se smí přihlásit jen z adresy 172.18.0.1, tedy jen z této VPS přes rozhraní Dockeru. Z internetu se tímto účtem nepřihlásí nikdo, ani se správným heslem. |
ALL PRIVILEGES ON *.* | Všechna práva ke všem databázím. Panel potřebuje zakládat a mazat databáze a uživatele. |
WITH GRANT OPTION | Účet smí udělovat práva dalším uživatelům. Bez toho by Panel novému databázovému uživateli nemohl dát přístup k nové databázi a zakládání by selhalo. |
Tento účet je prakticky správce databáze
Kdo zná jeho heslo a dostane se na VPS, může číst a mazat všechny databáze včetně databáze Panelu. Proto má účet povolený jen host 172.18.0.1 a heslo nikam jinam než do Panelu nezadávejte. Panel heslo ukládá zašifrované klíčem APP_KEY.
Naslouchání MariaDB na síti#
Po instalaci MariaDB naslouchá jen na 127.0.0.1 (nastavení bind-address v souboru /etc/). Kontejnery se k ní tak nedostanou. Nastavení změníte vlastním souborem, který se načte po výchozím a přepíše ho. Výchozí soubor tak zůstane beze změny i po aktualizacích balíčku.
Vytvořte soubor:
bash nano /etc/mysql/mariadb.conf.d/60-pterodactyl.cnfVložte obsah, uložte a zavřete editor:
/etc/ mysql/ inimariadb.conf.d/ 60-pterodactyl.cnf [mysqld] bind-address = 0.0.0.0
| Nastavení | Co dělá | Doporučená hodnota | Kdy změnit |
|---|---|---|---|
[mysqld] | Skupina voleb, kterou čte databázový server (MariaDB 10.11 na Ubuntu i 11.8 na Debianu). | – | Nikdy. |
bind-address | Na jakých adresách MariaDB přijímá spojení. 0.0.0.0 = na všech IPv4 adresách VPS. | 0.0.0.0 | Pokud nechcete síťový přístup, vraťte 127.0.0.1 (smažte tento soubor). |
Restartujte MariaDB a ověřte, kde naslouchá:
bash systemctl restart mariadb ss -tlnp | grep 3306ss -tlnp– vypíše naslouchající TCP porty a programy;grep 3306vybere řádek MariaDB.
Uvidíte
0.0.0.0:3306a název procesumariadbd.
Proč ne jen bind-address = 172.18.0.1
MariaDB umí naslouchat i na konkrétní adrese. Rozhraní pterodactyl0 ale vytváří Docker až po svém startu. Kdyby MariaDB při startu VPS naběhla dřív, adresu by nenašla a nespustila by se. Bezpečnější je 0.0.0.0 a přístup zvenku zavřít firewallem.
Firewall#
MariaDB teď naslouchá i na veřejné IP adrese VPS. Port 3306 musí zůstat z internetu zavřený. Databázoví uživatelé herních serverů mají ve výchozím stavu povolený přístup odkudkoli (%), takže by se k nim šlo zvenku přihlásit.
Firewall v zákaznické zóně (návod):
- Režim Blokovat vše kromě povoleného: pro port
3306žádné pravidlo nepřidávejte. Je zavřený. - Režim Povolit vše: přidejte pravidlo Příchozí · Zahodit · TCP · port
3306.
Spojení z kontejnerů do VPS jde jen uvnitř serveru a firewall zákaznické zóny ho neovlivní.
UFW ve VPS: pokud ho máte zapnutý, blokuje i spojení z kontejnerů. Povolte port 3306 jen z rozhraní Dockeru:
ufw allow in on pterodactyl0 to any port 3306 proto tcpallow in on pterodactyl0– povolí příchozí provoz jen z rozhranípterodactyl0(z kontejnerů herních serverů).to any port 3306 proto tcp– jen na TCP port 3306.
Databázový host v Panelu#
- V administraci Panelu klikněte vlevo na Databases a pak na Create New.
- Vyplňte formulář:
| Pole | Co zadat | Proč |
|---|---|---|
| Name | Například local-mariadb | Název hostitele pro vás, 1–60 znaků. |
| Host | 172.18.0.1 | Adresa, na kterou se připojí Panel a zároveň adresa, kterou uvidí uživatelé jako Endpoint své databáze. Proto ne 127.0.0.1. |
| Port | 3306 | Port MariaDB. |
| Username | pterodactyluser | Účet z kapitoly Účet pro Panel. |
| Password | <HESLO_DB_HOSTA> | Heslo k tomuto účtu. |
| Linked Node | Váš nod | Databáze, které si uživatelé serverů na tomto nodu založí sami, se vytvoří na tomto hostiteli. Bez propojení Panel vybere náhodně kteréhokoli hostitele. V administraci se hostitel u serverů z tohoto nodu nabídne jako výchozí. |
- Klikněte na Create. Panel se k hostiteli hned zkusí připojit. Když se to nepovede, zobrazí chybu a hostitele neuloží (viz Když něco nefunguje).
Limit databází serveru#
Uživatel si může založit jen tolik databází, kolik mu povolíte. Ve výchozím stavu je limit 0, záložka Databases pak hlásí Databases cannot be created for this server.
- V administraci otevřete Servers a klikněte na server.
- Přejděte na záložku Build Configuration.
- V části Application Feature Limits nastavte Database Limit, například
2. - Klikněte na Update Build Configuration.
Vytvoření databáze ze serveru#
Tohle už dělá uživatel serveru:
- V Panelu otevřete server a záložku Databases.
- Klikněte na New Database.
- Vyplňte Database Name, například
luckperms. Výsledný název budes<ID>_luckperms. Povolená jsou písmena, číslice,-a_, délka 3–48 znaků. - Pole Connections From určuje, odkud se smí databázový uživatel připojit. Bezpečná hodnota pro herní servery na tomto nodu je
172.18.0.%(všechny kontejnery). Prázdné pole znamená%, tedy odkudkoli. - Klikněte na Create Database.
- U nové databáze klikněte na ikonu oka. Zobrazí se Endpoint (
172.18.0.1:3306), Connections from, Username, Password a JDBC Connection String.
Údaje zadejte do konfigurace pluginu. Většina pluginů chce adresu, název databáze, uživatele a heslo zvlášť. Například LuckPerms v souboru plugins/:
storage-method: MariaDB
data:
address: 172.18.0.1:3306
database: s1_luckperms
username: u1_AbCdEfGhIj
password: '<HESLO_Z_PANELU>'storage-method– typ úložiště;MariaDBneboMySQL.address– Endpoint z Panelu (adresa a port).database,username– přesné hodnoty z Panelu (v ukázce smyšlené).password– heslo z Panelu, v apostrofech kvůli speciálním znakům.
Pluginy, které chtějí jeden řetězec (JDBC URL), dostanou hodnotu z pole JDBC Connection String ve tvaru jdbc:. Podrobně o databázích pro Minecraft pluginy: MySQL pro pluginy.
Ověření#
Zkontrolujte z VPS, že se uživatel serveru připojí přes adresu, kterou používají kontejnery:
mariadb -h 172.18.0.1 -u <UZIVATEL_DB> -p <NAZEV_DB> -e "SELECT 1;"-h 172.18.0.1– připojení přes TCP na rozhraní Dockeru.-u <UZIVATEL_DB>– uživatel z Panelu (napříkladu1_AbCdEfGhIj).-p– zeptá se na heslo.<NAZEV_DB>– databáze z Panelu (napříklads1_luckperms).-e "SELECT 1;"– spustí jednoduchý dotaz a skončí.
Uvidíte tabulku s číslem 1. Pokud jste do Connections From zadali 172.18.0.%, tento test z VPS projde, protože spojení na 172.18.0.1 má zdrojovou adresu 172.18.0.1.
Nakonec restartujte herní server a v jeho konzoli zkontrolujte, že se plugin k databázi připojil bez chyby.
Pro pokročilé: databáze na jiném serveru#
Pokud MariaDB běží na jiné VPS než Panel a Wings:
- Účet pro Panel založte s IP adresou VPS s Panelem (
'pterodactyluser'@'203.).0. 113. 10' - Do pole Host zadejte IP adresu databázového serveru. Tu musí vidět Panel i kontejnery na nodech.
- Ve firewallu databázového serveru povolte port
3306jen z IP adres Panelu a nodů (pravidlo s vyplněnou Zdrojovou IP). - Databázovým uživatelům serverů nastavujte Connections From na IP adresu nodu.
Když něco nefunguje#
Panel při vytváření hostitele hlásí Access denied for user 'pterodactyluser'@'172.18.0.1' #
Nesedí heslo, nebo uživatel nemá host 172.18.0.1. Zkontrolujte účty:
SELECT User, Host FROM mysql.user WHERE User = 'pterodactyluser';Pokud je host jiný, smažte účet (DROP USER 'pterodactyluser'@'<STARY_) a vytvořte ho znovu podle kapitoly Účet pro Panel.
Connection refused nebo Can't connect to … server on '172.18.0.1'#
MariaDB na této adrese nenaslouchá. Zkontrolujte ss -tlnp | grep 3306 (musí být 0.0.0.0:3306) a soubor 60-pterodactyl.cnf. Po změně MariaDB restartujte.
Plugin hlásí Communications link failure nebo časový limit spojení#
Plugin se k databázi nedostal. Nejčastěji je v konfiguraci pluginu localhost nebo 127.0.0.1 místo 172.18.0.1, nebo spojení z kontejneru blokuje UFW (viz Firewall).
Plugin hlásí Access denied for user 'u1_…'@'172.18.0.x'#
V Connections From je zadaná adresa, ze které se kontejner nepřipojuje. Databázi smažte a vytvořte znovu s hodnotou 172.18.0.%, nebo v Panelu u databáze vygenerujte nové heslo, pokud jste ho zadali špatně.
Uživatel nevidí tlačítko New Database#
Server má Database Limit 0, nebo už limit vyčerpal. Upravte ho podle kapitoly Limit databází serveru.
Shrnutí
- Kontejnery herních serverů vidí VPS na adrese
172.18.0.1, ne na127.0.0.1. - Účet pro Panel má
WITH GRANT OPTIONa smí se přihlásit jen z172.18.0.1. - MariaDB naslouchá na
0.0.0.0díky souboru60-pterodactyl.cnf; port3306je z internetu zavřený firewallem. - Database Host v Panelu má adresu
172.18.0.1, kterou uživatelé uvidí jako Endpoint. - Serverům nastavte Database Limit, jinak si databázi nezaloží.