Provoz Valheimu na panelu Pterodactyl vyžaduje čtyři věci: egg pro Valheim importovaný do nestu, node s dvěma po sobě jdoucími porty přidělenými serveru (herní port a ten nad ním, oba dosažitelné přes UDP), vyplněné startovací proměnné - název serveru, název světa, heslo, které nesdílí slovo ani s jedním z nich, a veřejný režim zapnutý či vypnutý - a stop příkaz ^C, aby tlačítko Stop v panelu poslalo SIGINT a svět se uložil dřív, než kontejner skončí. Světy pak leží ve správci souborů serveru pod domovským adresářem kontejneru a mody používají samostatný egg s BepInEx, ne upravený vanilla egg. Skoro každý problém, na který lidé narazí, je jeden ze tří: přidělený jen jeden port, heslo, které hra odmítne, nebo název světa, který neodpovídá souboru.
Článek je pro dva druhy čtenářů: pro ty, kdo provozují vlastní panel Pterodactyl a přidávají Valheim, a pro ty, kdo si pronajímají server Valheim od hostingu postaveného na Pterodactylu a chtějí pochopit, co ve skutečnosti dělají záložky Startup a Network.
Jak Pterodactyl spouští server Valheim#
Pterodactyl má dvě poloviny. Panel je webová aplikace, kde žijí servery, uživatelé a nastavení. Wings je démon na každém stroji (node), který vytváří kontejnery Docker, spouští a zastavuje je, streamuje jejich konzoli a poskytuje jejich soubory. Každý herní server je jeden kontejner s limitem paměti, CPU a disku nastaveným panelem a svazkem na nodu, který drží jeho soubory.
Co kontejner dělá, určuje egg - soubor JSON popisující jednu hru. Eggy jsou seskupené do nestů. Egg obsahuje:
| Část | K čemu je u Valheimu |
|---|---|
| Obraz Dockeru | Běhové prostředí serveru, obvykle obraz Debianu nebo Ubuntu schopný SteamCMD |
| Instalační skript | Běží jednou v samostatném instalačním kontejneru: SteamCMD stáhne app 896660 |
| Startovací příkaz | Řádek valheim_server.x86_64 s proměnnými místo hodnot |
| Proměnné | Název, svět, heslo, public a cokoli dalšího egg zpřístupňuje |
| Stop příkaz | ^C, které Wings převede na SIGINT |
| Done string | Řádek logu, podle kterého panel pozná, že server dokončil start |
Dobrý egg znamená, že nikdo na panelu nemusí vědět, že SteamCMD existuje. Špatný znamená, že se server při každém startu přeinstaluje nebo se při každém zastavení zabije. Eggy Pterodactylu pro herní servery prochází formát obecně; tenhle článek se drží toho, na čem u Valheimu záleží. Pokud je pro tebe Pterodactyl sám o sobě nový, pozadí poskytuje panel Pterodactyl vysvětleně.
Získání a import eggu pro Valheim#
Pterodactyl egg pro Valheim nedodává. Repozitář komunitních eggů na GitHubu - dřív parkervcp/eggs, dnes udržovaný pod organizací pelican-eggs - má složku Valheim se samostatnými eggy pro vanilla, pro BepInEx a pro Valheim Plus. Pokud nevíš jistě, že potřebuješ mody, použij vanilla; varianty jsou popsané níže.
Import na panelu Pterodactyl 1.x:
- Stáhni ze repozitáře soubor
.jsoneggu. Přečti si ho - je to instalační skript tvého serveru. - V administraci otevři Nests, vyber nebo vytvoř nest (hezky přehledný je nest „Valheim“ nebo „Survival games“) a použij Import Egg.
- Otevři importovaný egg a porovnej seznam obrazů Dockeru, startovací příkaz a instalační skript s tím, co očekáváš.
- Vytvoř server s tímto eggem. Panel spustí instalační skript a pak je server připravený ke startu.
Instalační kontejner spouští skript eggu se svazkem serveru připojeným v /mnt/server a v běžícím kontejneru je tentýž svazek domovským adresářem /home/container. První instalace trvá několik minut - server Valheimu má asi 2 GB.
Pokud používáš Pelican, fork Pterodactylu, eggy se importují podobně, ale struktura panelu se liší; kde import najdeš, zjistíš v dokumentaci Pelicanu.
Startovací proměnné a startovací řádek#
Startovací příkaz eggu je šablona. Proměnné se píšou jako {{NAME}} a při startu se nahradí hodnotami každého serveru. Zjednodušený startovací příkaz Valheimu vypadá takto - přesné názvy proměnných se mezi verzemi eggu liší, takže si přečti ten svůj na stránce eggu nebo v záložce Startup serveru:
./valheim_server.x86_64 -nographics -batchmode -name "{{SERVER_NAME}}" \ -port {{SERVER_PORT}} -world "{{WORLD}}" -password "{{PASSWORD}}" \ -public {{PUBLIC_SERVER}}Skutečné eggy před ten řádek přidávají prostředí, které Valheim potřebuje - LD_LIBRARY_PATH ukazující do složky linux64 serveru a SteamAppId=892970 - buď ve startovacím příkazu, nebo v entrypointu obrazu Dockeru. Návod k instalaci přes SteamCMD vysvětluje, proč jsou obě nutné.
{{SERVER_PORT}} není proměnná eggu. Nastavuje ho Wings na primární alokaci serveru, a proto se port nikdy neobjeví jako upravitelné pole. Mezi další zabudované hodnoty patří SERVER_IP a SERVER_MEMORY.
Proměnné, které egg pro Valheim typicky zpřístupňuje, podle role:
| Proměnná | Odpovídá | Poznámky |
|---|---|---|
| Název serveru | -name | Zobrazuje se v seznamu komunity; nesmí obsahovat heslo |
| Název světa | -world | Název souboru ve worlds_local bez přípony, rozlišuje velikost písmen |
| Heslo | -password | Minimálně 5 znaků; žádné slovo společné s názvem serveru nebo světa |
| Public | -public | 1 server uvede v seznamu, 0 ho skryje |
| Auto update | (entrypoint) | Při každém startu spustí aktualizaci přes SteamCMD, pokud ji egg má |
| Extra arguments | připojeno | Některé eggy mají volné textové pole pro přepínače jako -crossplay |
Každá proměnná má validační pravidla zapsaná v syntaxi Laravelu (například required|string|min:5) a dva příznaky: zda ji uživatelé vidí a zda ji mohou upravovat. Jako administrátor panelu rozhoduješ, která nastavení patří zákazníkovi. Heslo upravitelné uživatelem s pravidlem min:5 ti ušetří tikety; ponechání samotného startovacího příkazu zamčeného brání lidem v rozbití cesty ke knihovnám.
Valheim nemá konfigurační soubor, takže cokoli egg nezpřístupňuje, nelze změnit bez úpravy eggu. Pokud tvůj egg nemá pole pro crossplay, modifikátory světa nebo interval ukládání, admin pro ně může přidat proměnné, nebo přidat jedinou volnou textovou proměnnou „additional arguments“ na konec startovacího příkazu. Přepínače a jejich výchozí hodnoty jsou v přehledu spouštěcích argumentů Valheimu.
Alokace: správně oba porty UDP#
V Pterodactylu je port alokace: dvojice IP a port vytvořená na nodu a přidělená jednomu serveru. Wings publikuje každou alokaci pro TCP i UDP, takže v panelu není žádné nastavení protokolu, ve kterém by šlo udělat chybu. Chybu jde udělat v počtu.
Valheim se naváže na herní port a na port nad ním. Prvnímu říkáš -port; druhý následuje automaticky a nelze ho nastavit zvlášť. Server Valheimu tedy potřebuje:
- Primární alokaci na herním portu, například
2456. Ta se staneSERVER_PORT. - Další alokaci na hned následujícím portu,
2457, přidělenou stejnému serveru.
Pokud druhá alokace chybí, server se stejně spustí a stejně naváže 2457 uvnitř kontejneru - jenže zvenku se k němu nikdo nedostane, protože ho Docker nikdy nepublikoval. Obvyklý příznak je server, ke kterému se hráči připojí přes IP, ale který se nikdy neobjeví v seznamu komunity, protože seznam komunikuje s dotazovacím portem. Server Valheim se nezobrazuje v seznamu uvádí další příčiny tohoto příznaku.
Pro admina je postup: na záložce Allocation nodu přidej IP a rozsah, například 2456-2465; při vytváření serveru vyber 2456 jako primární a 2457 přidej jako další alokaci. Pro druhý server Valheim na stejném nodu začni na 2458 s 2459 vedle. Dvojici každého serveru drž po sobě jdoucí - alokace na 2460 nedělá nic pro server, jehož herní port je 2458.
Firewall samotného nodu musí tyto porty povolit přes UDP, stejně jako každý firewall cloudového poskytovatele před ním. Jedna past: Docker zapisuje vlastní pravidla iptables pro publikované porty a provoz ke kontejnerům neprochází běžnými vstupními pravidly ufw, takže seznam pravidel ufw, který vypadá zavřeně, zavřený být nemusí, a ten, který vypadá otevřeně, není to, co provoz skutečně pustilo. Testuj zvenku, místo abys věřil seznamu pravidel. Porty Valheimu 2456-2458 vysvětleně popisují počítání portů a testování.
Zastavení, done string a savy#
Dva řádky v konfiguraci eggu rozhodují o tom, jestli si panel a Valheim rozumí.
Stop příkaz je to, co panel pošle, když někdo stiskne Stop nebo Restart. U většiny her je to příkaz konzole jako stop nebo quit. Valheim konzoli na stdin nemá, takže jeho eggy používají ^C, které Wings vyloží jako „pošli procesu SIGINT“. To je signál, který Valheim bere jako čisté vypnutí: uloží svět a skončí. Pokud je stop příkaz eggu cokoli jiného, panel čeká, nic se neděje a nakonec někdo stiskne Kill - což pošle SIGKILL a ztratí se všechno od posledního uložení.
Done string je řádek z výstupu serveru, na který panel čeká, aby přepnul server z „starting“ na „running“. U Valheimu je to obvykle řádek z konce startu, například ten, který hlásí, že herní server se připojil ke Steamu. Pokud nikdy nesedí, server funguje, ale navždy zůstane ve stavu „starting“. Řádky, které Valheim vypisuje, a v jakém pořadí, jsou v článku o logu serveru Valheim.
Každý svět Valheimu se drží v paměti a zapisuje se každých -saveinterval sekund (výchozí 1800). Tlačítka panelu, správně použitá, ti dají čisté uložení:
| Akce v panelu | Signál | Svět uložen |
|---|---|---|
| Stop | Stop příkaz eggu (^C dává SIGINT) | Ano |
| Restart | Stop, pak start | Ano |
| Kill | SIGKILL | Ne |
| Kontejner dosáhne limitu paměti | Zabit jádrem | Ne |
Výchozí nastavení upstreamového Pterodactylu nechá kontejner na limitu paměti swapovat, místo aby ho zastavilo. To udrží proces naživu za cenu serveru, který se plazí; v obou případech paměť dimenzuj tak, aby se k limitu nikdy nedostala. Reálná čísla jsou v článku kolik RAM potřebuje server Valheim.
Soubory: kde ve správci souborů leží svět#
Správce souborů i SFTP ukazují svazek kontejneru, což je z pohledu serveru /home/container. Hra je v té složce. Adresář savů Valheimu je, pokud egg nepředá -savedir, výchozí adresář Unity pod domovským adresářem:
/home/container/.config/unity3d/IronGate/Valheim/ worlds_local/Midgard.db worlds_local/Midgard.fwl adminlist.txt bannedlist.txt permittedlist.txtNěkteré eggy nastavují -savedir na viditelnou složku v kořeni serveru, aby se to hledalo snáz; zkontroluj svůj startovací řádek. Složky začínající tečkou se ve výpisech souborů snadno přehlédnou, a proto lidé někdy usoudí, že svět zmizel, když ve skutečnosti leží v .config.
Nahrání světa z hry pro jednoho hráče: zastav server, nahraj .db i .fwl do worlds_local, nastav proměnnou s názvem světa na název souboru bez přípony, pak server spusť a sleduj v konzoli, jak se svět načte podle jména. Přes SFTP Wings poslouchá ve výchozím stavu na portu 2022 a uživatelské jméno je tvé uživatelské jméno v panelu spojené tečkou s krátkým ID serveru; obojí panel ukazuje na stránce Settings serveru. Celý postup je v článku nahrání lokálního světa Valheimu na server.
Zálohy panelu jsou archivy svazku, takže obsahují adresář savů. Admini mohou cesty vyloučit souborem .pteroignore v kořeni serveru - vyloučením 2 GB herních souborů se zálohy Valheimu zmenší na zlomek, protože je SteamCMD vždy stáhne znovu.
Varianta s BepInEx a mody#
Mody nepotřebují jiný herní server; potřebují jiný způsob jeho spuštění. BepInEx se do Unity zaháčkuje přes loader doorstop, nastavený proměnnými prostředí, které skript start_server_bepinex.sh z BepInExPack nastaví před spuštěním valheim_server.x86_64. Vanilla egg spouští binárku přímo a BepInEx nikdy nenačte, kolik souborů modů nahraješ.
Komunitní egg s BepInEx to řeší: jeho instalační skript stáhne BepInExPack pro Valheim spolu se serverem a jeho start nastaví proměnné doorstopu. Přepnutí existujícího serveru na něj provede admin v nastavení Startup serveru v administraci změnou eggu; zkontroluj, zda změna eggu na tvé verzi panelu spustí reinstalaci, a nejdřív zálohuj.
Jakmile se BepInEx načte - jeho vlastní řádky se objeví nahoře v konzoli - jsou mody soubory .dll vložené do BepInEx/plugins přes správce souborů nebo SFTP a jejich konfigurace se objeví v BepInEx/config po prvním startu. Egg Valheim Plus funguje stejně s přibaleným Valheim Plus; zkontroluj, že build, který stáhne, odpovídá verzi tvé hry, protože Valheim Plus prošel několika forky. Pravidla, které mody patří na server, na klienta, nebo na oba, jsou v článku mody Valheimu s BepInEx na serveru. Na serveru s mody vypni každou proměnnou automatické aktualizace: záplata Valheimu rozbije většinu modů, dokud nejsou znovu sestavené.
Schedules: restarty a zálohy na Pterodactylu#
Schedules v Pterodactylu berou výraz cronu a spouštějí seznam úloh v pořadí, každou s volitelným zpožděním: poslat příkaz do konzole, provést akci napájení nebo vytvořit zálohu.
U Valheimu je úloha s příkazem do konzole téměř k ničemu - server nečte nic ze stdin a ve hře nejde vysílat varování - takže schedule se skládá z akcí napájení a záloh:
| Úloha | Akce | Zpoždění |
|---|---|---|
| 1 | Power action: restart | 0 |
| 2 | Create backup | 120 sekund |
Spouštěj to týdně v klidné hodině - 0 5 * * 1 je pondělí v 05:00 v časovém pásmu panelu. Restart server zastaví čistě, takže záloha o dvě minuty později zachytí čerstvě uložený svět. Druhý schedule jen s úlohou zálohy, denně, pokryje zbylých šest dní. Plány restartů, které pomáhají vysvětlují, proč u Valheimu stačí týdenní, a výrazy cronu vysvětleně popisují syntaxi.
Na RE:NODE#
RE:NODE provozuje vlastní panel nad Pterodactylem a Wings, takže všechno v tomto článku se přímo přenáší. Server Valheim přijde s přidělenými oběma porty UDP, zapnutým crossplayem a vygenerovaným heslem; záložka Startup drží herní proměnné a záložka Network je místo, kde porty přidáváš nebo odebíráš. Mody se nahrávají přes správce souborů nebo SFTP - žádný whitelist neexistuje. Sloty záloh jsou součástí každého plánu a záložka Schedules spouští restarty a zálohy tak, jak je popsáno výše.
FAQ#
Proč se můj server Valheim na Pterodactylu nezobrazuje v seznamu serverů?
Obvykle proto, že je přidělený jen herní port. Valheim potřebuje i port nad ním pro dotazy Steamu, přidělený stejnému serveru jako další alokace. Připoj se přes IP, abys ověřil, že server sám funguje, pak přidej druhou alokaci a restartuj.
Je Stop v panelu bezpečný pro svět?
Ano, pokud je stop příkaz eggu ^C. Wings pak pošle SIGINT a Valheim se před ukončením uloží. Kill uložení přeskočí. Pokud se Stop zdá zaseknutý, zkontroluj stop příkaz eggu, než sáhneš po Kill.
Můžu s běžným eggem zapnout crossplay?
Pokud egg zpřístupňuje proměnnou pro crossplay nebo extra argumenty, ano - přidej -crossplay. Pokud ne, admin ji musí do eggu přidat. Hráči se pak připojují šestimístným kódem vypsaným v konzoli při každém startu.
Kam dát mody Valheimu na serveru Pterodactyl?
Do BepInEx/plugins, ale jen na serveru, který používá egg s BepInEx. Vanilla egg BepInEx nikdy nenačte, takže se soubory ignorují. Nejdřív přepni egg, ověř řádky BepInEx v konzoli a teprve pak nahrávej mody.
Proč se server při každém startu přeinstaluje nebo aktualizuje?
Egg má zapnutou proměnnou pro automatickou aktualizaci a jeho entrypoint spouští SteamCMD před startem. To je pohodlné pro vanilla servery a škodlivé pro servery s mody; pokud ji tvůj egg zpřístupňuje, vypni ji v záložce Startup.


