RE:NODE

Instalace dedikovaného Valheim serveru na Windows

Text: Tým RE:NODE
11 min čtení


Na Windows existují dva způsoby, jak získat dedikovaný server Valheimu: nainstalovat „Valheim Dedicated Server“ z části Tools ve své knihovně Steamu, nebo stáhnout app 896660 přes SteamCMD do složky podle svého výběru. V obou případech pak zkopíruješ start_headless_server.bat, v kopii nastavíš název serveru, svět a heslo, povolíš valheim_server.exe ve Windows Defender Firewall na UDP 2456-2458 a spustíš ho. Na cokoli delšího než jeden večer ho provozuj jako službu Windows přes NSSM, nastavenou tak, aby při zastavení poslala Ctrl+C a svět se uložil. Úskalí jsou specifická pro Windows: zavření okna konzole křížkem zabije server bez uložení, dotaz firewallu se snadno zodpoví špatně a služba běžící pod účtem SYSTEM ukládá světy na místo, kde je nikoho nenapadne hledat.

Samotné argumenty spuštění jsou rozebrané jeden po druhém v přehledu argumentů Valheim serveru; tenhle článek je o instalaci na Windows a službě kolem ní.

Steam Tools nebo SteamCMD: co použít#

Obě cesty dodají identické soubory serveru. Rozdíl je v tom, kdo je aktualizuje a kde leží.

Kopie ze Steam ToolsSteamCMD
Potřebuje klienta SteamuAno, přihlášenéhoNe
Umístění instalacesteamapps\common\Valheim dedicated serverLibovolná složka podle tebe
AktualizaceSteam, automaticky, když klient běžíKdyž spustíš příkaz k aktualizaci
Hodí se proServer na herním PC na jeden večerStroj, na kterém server běží trvale

Kopie ze Steam Tools je rychlá cesta. V knihovně Steamu přepni filtr tak, aby zahrnoval Tools, najdi „Valheim Dedicated Server“ a nainstaluj ho. Při výchozí instalaci skončí v C:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server. Háček je v tom, že ho Steam aktualizuje, kdy se mu zachce, což je pohodlné pro vanilla server a problém pro modovaný, a že server svazuje s desktopovou relací, ve které běží Steam.

SteamCMD je cesta pro stroj, který nedělá nic jiného. Stáhni steamcmd.zip z vývojářského webu Valve, rozbal ho do složky jako C:\steamcmd a spusť:

code
C:\steamcmd\steamcmd.exe +force_install_dir C:\valheim\server +login anonymous +app_update 896660 validate +quit

První spuštění aktualizuje samotný SteamCMD a pak stáhne server. Valheim vlastnit nemusíš; aplikace serveru se stahuje anonymně. +force_install_dir musí být před +login a cesta by měla být taková, kam tvůj uživatel smí zapisovat - vyhni se Program Files, kde každý zápis vyžaduje zvýšená práva a bez nich tiše skončí ve virtualizované složce. SteamCMD vysvětlený popisuje stavbu příkazu a jeho chybové kódy.

Stejným příkazem se server později aktualizuje. Nejdřív server zastav; SteamCMD nemůže nahradit soubory, které drží otevřené běžící proces, a dostaneš napůl aktualizovanou instalaci.

Co je ve složce serveru#

Po obou instalacích složka obsahuje:

  • valheim_server.exe - samotný server.
  • valheim_server_Data - datová složka Unity. Nikdy tu nic neupravuj.
  • start_headless_server.bat - ukázkový startovací skript.
  • steam_appid.txt, steamclient64.dll a související soubory Steam API, které server potřebuje k registraci.
  • Dokumentace, například krátký průvodce v PDF od Iron Gate, podle buildu.

Světy v této složce nejsou. Server je ve výchozím stavu ukládá pod profil uživatele, který ho spouští, do %USERPROFILE%\AppData\LocalLow\IronGate\Valheim, přičemž světy jsou v worlds_local a adminlist.txt, bannedlist.txt a permittedlist.txt leží vedle té složky. Tahle skutečnost určuje část o službě níže. Umístění souborů Valheimu uvádí každou cestu na Windows i Linuxu.

Bezpečná úprava start_headless_server.bat#

Dodávaný skript vypadá takto, až na komentáře a na to, zda je -crossplay už v ukázkovém řádku, což záleží na buildu:

start_headless_server.bat (as shipped)
@echo offset SteamAppId=892970echo "Starting server PRESS CTRL-C to exit"REM Tip: Make a local copy of this script to avoid it being overwritten by steam.REM NOTE: Minimum password length is 5 characters & Password cant be in the server name.REM NOTE: You need to make sure the ports 2456-2458 is being forwarded to your servervalheim_server -nographics -batchmode -name "My server" -port 2456 -world "Dedicated" -password "secret"

Řiď se tou radou. Každá aktualizace - automatická ze Steamu i validate - tenhle soubor obnoví a s ním i název serveru a heslo. Zkopíruj ho do start_valheim.bat ve stejné složce a uprav kopii:

start_valheim.bat
@echo offcd /d "%~dp0"set SteamAppId=892970valheim_server.exe -nographics -batchmode -name "Longship Crew" -port 2456 ^  -world "Midgard" -password "herring-barrel-42" -public 1 ^  -saveinterval 900 -backups 4

Co která změna dělá:

  • cd /d "%~dp0" přepne do složky, kde skript leží, takže funguje ze zástupce, z naplánované úlohy i ze služby. Bez toho dvojklik z Průzkumníka funguje, ale spuštění odjinud nemusí najít valheim_server.exe ani jeho data.
  • set SteamAppId=892970 zůstává. Je to id herního klienta a server se jím ohlašuje Steamu. Neměň ho na id serveru.
  • ^ na konci řádku pokračuje příkaz v dávkovém souboru a dlouhý příkaz zůstane čitelný. Za stříškou nesmí být nic, ani mezera.
  • -saveinterval 900 ukládá každých 15 minut místo 30, takže pád ztratí poloviční množství dat.

-crossplay přidej, jen pokud se mají připojit hráči z Xboxu nebo Game Passu; kompromisy jsou v článku Valheim crossplay a hráči na Xboxu.

První start a čisté zastavení#

Dvakrát klikni na svou kopii. Otevře se okno konzole a v něm běží log. Při prvním startu se vygeneruje a uloží nový svět, což trvá znatelně déle než pozdější starty. Hledej Load world: s názvem tvého světa a Game server connected, což znamená, že Steam registraci přijal. S -crossplay následuje řádek se šestimístným kódem pro připojení.

Server zastavíš tak, že klikneš do okna, stiskneš Ctrl+C a počkáš. Server uloží svět a skončí; u některých buildů se okno poté zeptá Terminate batch job (Y/N)?, což se Windows ptají na skript, ne na server - uložení už proběhlo a obě odpovědi jsou v pořádku.

Nezavírej okno křížkem. Tím se proces ukončí bez ukončovací sekvence a všechno od posledního uložení je pryč - při výchozím intervalu až třicet minut. Totéž udělá odhlášení z Windows, vynucený restart kvůli aktualizacím nebo ukončení úlohy ve Správci úloh. To je nejsilnější argument pro službu, které se dá říct, aby poslala Ctrl+C.

Pokud se nenačte svět, který jsi čekal, a vygeneruje se místo něj nový, název v -world neodpovídá názvu souboru v worlds_local. Tvůj starý svět je nedotčený; oprav název a restartuj. Selhání při startu podle hlášek v logu shrnuje článek pády Valheim serveru při startu.

Windows Defender Firewall a přesměrování portů#

Když valheim_server.exe poprvé otevře síťový port, Windows Defender Firewall zobrazí dotaz, na kterých sítích ho povolit. Dva způsoby, jak to dopadne špatně:

  1. Dotaz se objeví za oknem konzole, nikdo na něj neodpoví a příchozí provoz je blokovaný.
  2. Je zaškrtnuté jen „Soukromé sítě“, zatímco Windows považují tvé připojení za veřejné - časté na čerstvě nainstalovaném stroji nebo serveru v datacentru - a pravidlo se nikdy neuplatní.

Místo spoléhání na dotaz vytvoř explicitní pravidla z PowerShellu s právy správce:

code
New-NetFirewallRule -DisplayName "Valheim UDP" -Direction Inbound `  -Protocol UDP -LocalPort 2456-2458 -Action Allow -Profile Any

UDP 2456 nese herní provoz a 2457 odpovídá na dotazy Steamu; třetí port v rozsahu je ten, který zmiňuje komentář v ukázkovém skriptu, a jeho otevření nic nestojí. Na protokolu záleží: pravidlo pro TCP pro Valheim nedělá nic. Pokud jsi dříve v dotazu zvolil „Storno“, Windows vytvořily blokovací pravidlo pro valheim_server.exe a blokovací pravidla mají přednost před povolovacími. Najdeš ho ve Windows Defender Firewall s upřesněným zabezpečením, v příchozích pravidlech, a smaž ho.

Doma přesměruj stejný rozsah UDP na routeru na adresu PC v LAN a přiděl tomu PC pevnou adresu (rezervaci DHCP), aby se přesměrování nerozbilo, když dostane novou. Na cloudovém serveru s Windows potřebuje stejné pravidlo i síťový firewall poskytovatele. Porty Valheimu vysvětlené popisují změnu -port, provoz dvou serverů na jednom stroji i testování, zda je port skutečně otevřený.

Otestuj to připojením přes IP ze stroje mimo tvoji síť: Join Game, Add Server, your.public.ip:2456. Pokud to funguje a seznam komunitních serverů server stále neukazuje, počkej - seznam může trvat několik minut - a podívej se na Valheim server se nezobrazuje v seznamu.

Provoz serveru jako služby přes NSSM#

Server v okně konzole se zastaví, když se někdo odhlásí, okno zavře nebo stroj restartuje Windows Update. NSSM, Non-Sucking Service Manager, obalí libovolný program jako službu Windows: spustí se při startu systému, i když není nikdo přihlášený, po pádu se znovu nastartuje a - to je pro Valheim podstatné - umí program zastavit přes Ctrl+C místo jeho zabití.

Stáhni NSSM, dej nssm.exe někam do PATH a z Příkazového řádku s právy správce spusť:

code
nssm install Valheim C:\valheim\server\valheim_server.exenssm set Valheim AppDirectory C:\valheim\servernssm set Valheim AppParameters -nographics -batchmode -name "Longship Crew" -port 2456 -world "Midgard" -password "herring-barrel-42" -public 1 -saveinterval 900 -savedir C:\valheim\savenssm set Valheim AppEnvironmentExtra SteamAppId=892970nssm set Valheim AppStopMethodConsole 60000nssm set Valheim AppStdout C:\valheim\logs\valheim.lognssm set Valheim AppStderr C:\valheim\logs\valheim.lognssm set Valheim AppRotateFiles 1nssm set Valheim Start SERVICE_AUTO_STARTnssm start Valheim

Služba spouští přímo valheim_server.exe, ne dávkový soubor, takže zastavovací signál NSSM jde rovnou do serveru. Řádek po řádku ty, které nejsou zřejmé:

  • AppEnvironmentExtra SteamAppId=892970 nahrazuje řádek set z dávkového souboru. Bez něj se server u Steamu nezaregistruje.
  • AppStopMethodConsole 60000 říká NSSM, aby při zastavení poslal Ctrl+C a čekal až 60 sekund, než proces skončí, než přejde k tvrdším metodám. Velký svět ten čas potřebuje na zápis. Ověř, že metoda zastavení „Console“ není vypnutá v AppStopMethodSkip; ve výchozím stavu je zapnutá.
  • AppStdout a AppStderr zachycují log, protože služba nemá okno. Složku logs nejdřív vytvoř. AppRotateFiles 1 soubor otočí při startu služby, aby nerostl donekonečna.
  • -savedir C:\valheim\save je řádek, který ti ušetří ztracené odpoledne. Přečti si další odstavec.

Služba ve výchozím stavu běží jako LocalSystem. Profil LocalSystem je C:\Windows\System32\config\systemprofile, takže bez -savedir server ukládá do C:\Windows\System32\config\systemprofile\AppData\LocalLow\IronGate\Valheim - a vygeneruje tam nový svět, protože tvůj stávající svět je v tvém vlastním profilu. Buď předej -savedir na obyčejnou složku, jako výše, a přesuň do ní složku worlds_local a soubory seznamů, nebo spusť službu pod běžným uživatelským účtem příkazem nssm set Valheim ObjectName .\valheim "password". Nejuklizenější je kombinace vyhrazeného místního uživatele s nízkými oprávněními a -savedir.

Spravuj ji jako každou službu: nssm restart Valheim, sc query Valheim nebo konzolí Služby. nssm edit Valheim otevře grafické okno se všemi nastaveními, pokud radši klikáš. Při aktualizaci službu zastav, spusť příkaz SteamCMD a službu znovu nastartuj.

Aktualizace, restarty a zálohy na Windows#

Plánovač úloh může každou noc nebo týden spouštět malý skript, který službu zastaví, provede aktualizaci přes SteamCMD a službu znovu spustí:

C:\valheim\update.bat
nssm stop ValheimC:\steamcmd\steamcmd.exe +force_install_dir C:\valheim\server +login anonymous +app_update 896660 +quitnssm start Valheim

Nenaplánuj to pro modovaný server. Patch Valheimu rozbije mody BepInEx, dokud je autoři nedohoní, a automatická aktualizace ti tu poruchu přinese ve čtyři ráno. Aktualizace Valheim serveru popisuje, kdy aktualizovat a co znamená chyba Incompatible version.

Vlastní kopie -backups serveru leží ve stejné složce worlds_local jako svět, na stejném disku. Skutečné zálohy kopíruj jinam - na jiný disk, NAS, objektové úložiště - podle plánu, nejlépe hned po plánovaném restartu, kdy byl svět právě čistě uložen. Zálohy Valheim serveru a poškození světa obsahují strategii i postup obnovy.

Poslední past je samotný Windows. Windows Update restartuje, kdy chce, pokud nenastavíš aktivní hodiny nebo okno údržby. S NSSM a zastavením přes Ctrl+C je restart čisté zastavení, ale server je stále vypnutý, dokud se nevrátí. Provoz herního serveru na tvém běžném herním PC také znamená, že server soupeří o stejný CPU s tvou hrou; Linux vs Windows herní servery a vlastní hosting doma vs pronájem popisují, kdy se vyplatí přejít jinam.

Na RE:NODE otázky služby, firewallu a aktualizací odpadají: server běží ve vlastním kontejneru, oba porty UDP jsou součástí tarifu, Restart pošle čisté zastavení, aby se svět uložil, a argumenty spuštění jsou pole v záložce Startup, ne dávkový soubor, jehož kopii musíš hlídat.

FAQ#

Můžu hrát na stejném PC, na kterém běží server?

Ano. Spusť server, pak hru a připoj se přes 127.0.0.1:2456 nebo adresu v LAN. Server a hra soupeří o CPU, takže středně výkonné PC zvládne několik kamarádů líp než deset. Všichni ostatní se připojují přes tvoji veřejnou adresu.

Proč mi po nastavení služby zmizel svět?

Skoro jistě služba běží pod jiným účtem, než jsi testoval, takže ukládá do profilu toho účtu a vygenerovala tam nový svět. Tvůj starý svět je pořád ve tvém vlastním AppData\LocalLow\IronGate\Valheim\worlds_local. Nasměruj -savedir na pevnou složku a přesuň svět tam.

Musí běžet klient Steamu?

U kopie ze Steam Tools musí Steam běžet kvůli aktualizacím, ale server nastartuje i bez něj, pokud je nastavené SteamAppId. Instalace přes SteamCMD klienta nikdy nepotřebuje.

Je bezpečné zavřít okno serveru?

Ne. Zavření okna zabije proces bez uložení. Stiskni v něm Ctrl+C a počkej na uložení, nebo zastav službu NSSM, která Ctrl+C pošle za tebe.

Můžu na jednom stroji s Windows provozovat dva Valheim servery?

Ano, s oddělenými názvy světů, oddělenými hodnotami -port aspoň o tři od sebe (běžné je 2456 a 2466) a oddělenými rozsahy ve firewallu. Zbytek vyřeší dvě služby NSSM s různými jmény.