RE:NODE

Návody14 min čtení

Server Don't Starve Together: Caves a módy

Správné nastavení dedikovaného clusteru DST: token Klei, cluster.ini a server.ini, shardy Master a Caves, porty, admini, rollbacky a módy z workshopu.

10 čtenářů

Dedikovaný server Don't Starve Together není jeden program. Je to cluster: složka se sdílenou konfigurací plus jeden serverový proces pro každý svět. Skoro každý chce dva - Forest jako shard Master a Caves jako sekundární shard - a právě to je jediný fakt, kvůli kterému se hosting DST liší od všech ostatních her na tomto blogu. Dva procesy, dva porty, dvě sady módů, jedno uložení. Přidej si zdarma token clusteru od Klei, který ti nikdo jiný nevygeneruje, a máš celý obrys. Tento průvodce probírá každý soubor, každé nastavení a chyby, kvůli kterým lidé zírají na server, který se spustí a nikdy se neobjeví.

Co je cluster: shardy, Master a Caves#

Shard je jeden serverový proces, na kterém běží jeden svět. Cluster je sada shardů, které sdílejí název, heslo, seznam adminů a uložení. Právě jeden shard je Master; ostatní se k němu připojují. Podle zvyku Master provozuje Forest a jeden sekundární shard Caves, a proto se složky obvykle jmenují Master a Caves.

Když hráč sleze do propadliny, nenačítá novou oblast stejného světa. Odpojuje se od jednoho serverového procesu a připojuje k jinému a jeho postava se předá přes spojení mezi shardy. To vysvětluje spoustu chování DST:

  • Caves mají vlastní počítadlo dnů, vlastní stav ročního období a vlastní nastavení světa.
  • Shard Caves běží pořád, ať už tam dole někdo je, nebo ne.
  • Pokud proces Caves neběží, propadliny hlásí, že jeskyně nejsou dostupné, a Forest si poklidně běží dál.
  • Rollback se týká jednoho shardu, pokud nevrátíš oba najednou, a tak lidé skončí s Forestem v den 210 a Caves v den 195.
joinUDP 10889autosaveautosaveHráčijedna adresa, dva světyMaster shardForest, UDP 10999Caves shardCaves, UDP 10998Uložení clusterusložka session
Cluster jsou dva serverové procesy se sdíleným uložením

Můžeš provozovat cluster jen s Forestem a funguje dobře; shard Caves je volitelný. Je tam ale většina pozdní hry, takže ho ber jako standard a od začátku počítej s kapacitou pro dva procesy.

Požadavky a spotřeba zdrojů#

Každý shard je samostatný, převážně jednovláknový proces. Dva shardy tedy potřebují dvě jádra, ne jedno rychlé, což je opak rady pro většinu survivalových her.

KonfiguraceRAMCPUPoznámky
Jen Forest, 1-4 hráči1 GB0.75-1 jádroJeden proces, malý svět
Forest a Caves, do 62 GB1-1.5 jádraBěžný případ
Forest a Caves, 8-10, nějaké módy3-4 GB2 jádraOba shardy zaměstnané současně
Dlouhý svět, 500+ dní, náročné módy4-6 GB2+ jádraPočet entit roste se vším, co se postaví
  • Paměť se mezi shardy dělí, na vyspělém světě zhruba rovným dílem. Samotný shard Forest se zpočátku pohodlně vejde do 512-700 MB a roste s tím, jak se mapa prozkoumává a zastavuje.
  • CPU se spotřebovává na simulaci entit a světy DST entity neúnavně hromadí - každý odhozený předmět, každý zasazený strom, každá loď. Svět ve třetím létě stojí znatelně víc než čerstvý.
  • Disk je malý. Instalace má pár gigabajtů a data uložení jsou megabajty, ne gigabajty.
  • Síť je skromná a roste s tick_rate a počtem hráčů.

pause_when_empty = true je nastavení, které dělá malé plány použitelnými: když není nikdo připojen, simulace se zastaví a oba shardy téměř nic nespotřebovávají.

Instalace, token Klei a rozložení složek#

Dedikovaný server je zdarma ke stažení přes anonymní SteamCMD, app id 343050. Hru na účtu, přes který instaluješ, vlastnit nemusíš.

bash
$ steamcmd +force_install_dir /home/dst/server +login anonymous \    +app_update 343050 validate +quit

Binární soubory jsou bin64/dontstarve_dedicated_server_nullrenderer_x64 a 32bitový bin/dontstarve_dedicated_server_nullrenderer. Očekávají, že se spouštějí z vlastního adresáře.

Konfigurace nesídlí u instalace. Je ve složce clusteru pod adresářem Klei uživatele:

code
~/.klei/DoNotStarveTogether/MyDediServer/  cluster.ini              settings shared by every shard  cluster_token.txt        your Klei token, nothing else in the file  adminlist.txt            one Klei user id per line  whitelist.txt  blocklist.txt  Master/    server.ini    worldgenoverride.lua    modoverrides.lua    save/  Caves/    server.ini    worldgenoverride.lua    modoverrides.lua    save/

Token je část, kterou nelze přeskočit. Přihlas se na webu účtů Klei, otevři sekci serverů Don't Starve Together, přidej server a zkopíruj vydaný token. Vlož ho do cluster_token.txt jako jediný obsah souboru - bez uvozovek, bez textu navíc. Je zdarma, je vázaný na tvůj účet Klei a Klei odmítne každý token, který nevydal, a proto ho za tebe nemůže vytvořit žádný hosting. Provoz dvou živých clusterů na stejný token jeden z nich vyřadí z provozu, takže si vygeneruj jeden na každý server.

RE:NODE si o něj říká ještě před spuštěním instalace: řada Don't Starve Together je jedna z mála, která potřebuje tvoje vlastní přihlašovací údaje, server se vytvoří, jakmile se platba zpracuje, a instalace čeká na kartě Setup, dokud token nevložíš.

Pak spusť oba shardy. Na vlastním stroji to jsou dva příkazy, obvykle dvě služby:

bash
$ cd /home/dst/server/bin64$ ./dontstarve_dedicated_server_nullrenderer_x64 \    -console -cluster MyDediServer -shard Master$ ./dontstarve_dedicated_server_nullrenderer_x64 \    -console -cluster MyDediServer -shard Caves

Užitečné přepínače: -console zapíná vstup do konzole, -cluster vybírá složku clusteru, -shard vybírá složku shardu v ní, -persistent_storage_root přesune celý adresář Klei jinam a -monitor_parent_process způsobí, že se shard ukončí spolu se svým správcem, což brání osiřelým procesům Caves.

Shardu Caves je třeba říct, aby vygeneroval jeskynní svět, a ne další les. To zařídí soubor worldgenoverride.lua ve složce Caves:

Caves/worldgenoverride.lua
return {  override_enabled = true,  preset = "DST_CAVE",}

Ekvivalent pro Master používá preset = "SURVIVAL_TOGETHER". Pokud to uděláš špatně, budeš mít cluster se dvěma lesy a bez jeskyní, což nejde opravit bez znovuvygenerování světa Caves.

cluster.ini, nastavení po nastavení#

Jeden soubor, čtyři nebo pět sekcí, sdílený všemi shardy v clusteru.

cluster.ini
[GAMEPLAY]game_mode = survivalmax_players = 6pvp = falsepause_when_empty = truevote_enabled = true[NETWORK]cluster_name = The Long Wintercluster_description = Cooperative, mods on, no griefingcluster_password = hollow-stalagmitecluster_intention = cooperativelan_only_cluster = falseoffline_cluster = falsetick_rate = 15whitelist_slots = 0autosaver_enabled = true[MISC]console_enabled = truemax_snapshots = 6[SHARD]shard_enabled = truebind_ip = 127.0.0.1master_ip = 127.0.0.1master_port = 10889cluster_key = a-long-random-string[STEAM]steam_group_only = falsesteam_group_id = 0steam_group_admins = false
NastaveníVýchozíCo dělá
game_modesurvivalsurvival, endless nebo wilderness
max_players6Celkem v clusteru, ne na shard
pvpfalseZranění mezi hráči
pause_when_emptyfalseZastaví simulaci, když nikdo není online
vote_enabledtrueHlasování ve hře o vyhození a rollbacku
cluster_intention-cooperative, social, competitive nebo madness
cluster_password-Prázdné znamená, že se může připojit kdokoli
offline_clusterfalseŽádné služby Klei, žádný záznam v prohlížeči, žádné módy
lan_only_clusterfalseJen místní síť
tick_rate15Aktualizací serveru za sekundu
whitelist_slots0Sloty rezervované pro hráče na whitelistu
autosaver_enabledtrueUkládat při každém soumraku
console_enabledtruePovolí herní konzoli i konzoli serveru
max_snapshots6Kolik bodů pro rollback se uchovává
shard_enabledfalsePro cluster o dvou shardech musí být true
master_port10889Spojení mezi shardy, ne port pro hráče
cluster_key-Sdílené tajemství mezi shardy, libovolný řetězec

U čtyř z nich stojí za to říct pár vět.

`shard_enabled`. Pokud je false, shard Caves se spustí, nenajde Master a jen tam čeká. Je to nejčastější důvod, proč proces Caves běží a propadliny přesto hlásí, že jeskyně nejsou dostupné.

`cluster_key` a `master_port`. Shardy se mezi sebou ověřují klíčem a komunikují přes master_port na adrese master_ip. Když jsou oba shardy na jednom stroji, nech tyto hodnoty na 127.0.0.1 a 10889; tento provoz nikdy nepotřebuje opustit stroj a neměl by být vystaven ven.

`tick_rate`. Patnáct je výchozí hodnota a pro kooperativní skupinu stačí. Zvýšení na 30 zpříjemní souboje a zhruba zdvojnásobí jak náklady CPU na hráče, tak šířku pásma. Na malém plánu ten obchod obvykle nestojí za to.

`offline_cluster`. Nastavení na true odpojí cluster od Klei úplně - není potřeba token, žádný záznam v seznamu serverů a žádné módy z workshopu. Je to pro LAN party, ne pro server, který mají lidé najít.

server.ini a porty, které každý shard potřebuje#

Každá složka shardu má vlastní server.ini a hodnoty se mezi shardy musí lišit:

Master/server.ini
[NETWORK]server_port = 10999[SHARD]is_master = true[STEAM]master_server_port = 27018authentication_port = 8768[ACCOUNT]encode_user_path = true
Caves/server.ini
[NETWORK]server_port = 10998[SHARD]is_master = falsename = Cavesid = 2[STEAM]master_server_port = 27019authentication_port = 8769[ACCOUNT]encode_user_path = true
PortProtokolÚčel
10999UDPShard Master, port, na který se hráči připojují
10998UDPShard Caves
27018 / 27019UDPSteam master server, jeden na shard
8768 / 8769UDPOvěřování Steam, jedno na shard
10889UDPSpojení mezi shardy, jen loopback

Všechno, co DST používá, je UDP. Každý shard potřebuje vlastní server_port, vlastní master_server_port a vlastní authentication_port, všechny odlišné od hodnot ostatních shardů - sdílení kteréhokoli ze tří je důvod, proč jeden shard naběhne a druhý tiše ne. Pokud chceš, aby fungovalo objevování v LAN, drž server_port v rozsahu 10998-11018; pro hru přes internet postačí jakýkoli volný port. Proč vůbec existují porty pro dotazy, vysvětluje Porty herních serverů vysvětleny.

is_master dělá ze shardu Master. Dva shardy s is_master = true ve stejném clusteru jsou cluster, který se nepropojí. id musí být pro každý shard jedinečné a name je popisek, který hra pro ten svět ukazuje.

V panelu je nemusíš upravovat ručně tak často, jak by sis myslel - porty ti přidělí panel. Plány Don't Starve Together na RE:NODE mají dvě přidělení a další porty se přidávají a odebírají na kartě Network, pokud chceš třetí shard.

Hráči najdou server v herním prohlížeči, filtrovaném podle názvu. Funguje i přímé připojení: otevři ve hře konzoli klávesou zpětný apostrof a spusť c_connect("203.0.113.10", 10999, "hollow-stalagmite"). Je to spolehlivá cesta, když je prohlížeč pomalý, a jediná cesta, pokud se záznam ještě neobnovil.

Admini, whitelist a seznam banů#

Tři prosté textové soubory ve složce clusteru, jedno ID uživatele Klei na řádek. ID Klei vypadají jako KU_aB3dEf7h a jsou pro daný účet stálá.

adminlist.txt
KU_aB3dEf7hKU_9zQ2mNp1

whitelist.txt funguje spolu s whitelist_slots: pokud nastavíš whitelist_slots = 2 na šestihráčovém serveru, čtyři sloty jsou otevřené komukoli a dva jsou drženy pro hráče ze seznamu i tehdy, když server vypadá plný. blocklist.txt je seznam banů a zapisuje do něj server, když ve hře někoho zabanuješ.

Spolehlivý způsob, jak zjistit ID hráče, je nechat ho jednou se připojit a v konzoli spustit c_listallplayers(), což vypíše všechny připojené hráče s jejich ID. Hráči si své ID mohou přečíst i na stránce svého účtu Klei. Soubory se čtou při startu shardu, takže ID přidej a restartuj, nebo povyš hráče ve hře a nech server zapsat soubor sám.

Konzolové příkazy, rollbacky a snapshoty#

Konzole DST je Lua. Příkazy se zadávají do konzole shardu - do pole konzole v panelu, nebo do herní konzole otevřené klávesou zpětný apostrof, pokud jsi admin. Ve hře má konzole lokální a vzdálený režim; vzdálený posílá příkaz serveru a mezi režimy přepínáš klávesami Control a zpětný apostrof. Spuštění serverového příkazu v lokálním režimu je důvodem, proč se zdá, že se nic nestalo.

PříkazCo dělá
c_save()Okamžitě zapíše uložení
c_shutdown()Uloží a zastaví shard
c_shutdown(false)Zastaví bez uložení
c_rollback(1)Vrátí tento shard o jeden snapshot
c_regenerateworld()Smaže tento svět a vygeneruje nový
c_reset()Znovu načte shard z posledního uložení
c_announce("text")Zpráva serveru všem
c_listallplayers()Všichni připojení hráči s jejich ID Klei
TheNet:Kick("KU_aB3dEf7h")Vyhodí
TheNet:Ban("KU_aB3dEf7h")Zabanuje a zapíše do seznamu banů
c_spawn("deerclops")Vytvoří prefab na kurzoru
c_give("goldnugget", 10)Dá předměty vybranému hráči
c_freecrafting()Přepne volné vyrábění pro vybraného hráče

Snapshoty jsou vlastní body pro rollback v DST, omezené max_snapshots a uložené ve složce save shardu. c_rollback(2) se vrátí o dva z nich. Lidi tu překvapují dvě věci. Snapshoty jsou pro každý shard zvlášť, takže vrácení Forestu bez Caves nechá oba světy v různých dnech - vrať oba, rychle po sobě. A snapshoty leží na stejném disku jako uložení, takže chrání před špatným rozhodnutím, ne před ztraceným serverem.

Skutečné backupy patří jinam. Na RE:NODE každý plán Don't Starve Together zahrnuje sloty pro backupy, uložené mimo stroj, který chrání, a obnovované tlačítkem, a karta Schedules ho vytvoří podle výrazu cron - rozumný vzor je noční kopie plus jedna před instalací módu. Proč je důležitější ta obnovovací polovina, vysvětluje Backupy, které se opravdu obnoví a další vzory k okopírování nabízí Naplánované úlohy, které stojí za to mít.

Módy na dedikovaném clusteru#

Workshopové módy na dedikovaném serveru jsou dvoukroková práce a vynechání kteréhokoli kroku je důvod, proč většině lidí módy nenaběhnou.

Krok první: řekni serveru, ať je stáhne. V instalačním adresáři hry soubor mods/dedicated_server_mods_setup.lua uvádí, co má SteamCMD při startu stáhnout:

mods/dedicated_server_mods_setup.lua
ServerModSetup("1595631294")ServerModSetup("375850593")ServerModCollectionSetup("1234567890")

Čísla jsou ID souborů z workshopu, vzatá z konce URL módu ve workshopu. ServerModCollectionSetup bere ID kolekce a stáhne vše, co v ní je, což se u dlouhého seznamu udržuje mnohem snáz.

Krok druhý: zapni je pro každý shard. modoverrides.lua v každé složce shardu rozhoduje, které stažené módy jsou skutečně zapnuté, a nese jejich konfiguraci:

Master/modoverrides.lua
return {  ["workshop-1595631294"] = {    enabled = true,    configuration_options = {      ["language"] = "en",    },  },  ["workshop-375850593"] = {    enabled = true,  },}

Klíč je doslovný řetězec workshop- následovaný ID. Cokoli, co mění svět, potřebuje stejný záznam v Master/modoverrides.lua i Caves/modoverrides.lua, se shodným nastavením - mód zapnutý na jednom shardu a ne na druhém způsobuje chybějící prefaby a pády, když hráč přechází mezi nimi. Nejjednodušší disciplína je držet jeden soubor a kopírovat ho do obou složek.

Klienti si při připojení stahují odpovídající módy automaticky, a proto modovaný cluster potřebuje offline_cluster = false. Módy se ve workshopu aktualizují, kdykoli je autoři vydají, a aktualizace DST část z nich rozbije, takže cluster před záplatou hry zálohuj a nediv se, když první start po ní selže. Obecnou mechaniku workshopového obsahu na serverech popisuje Módy ze Steam Workshopu na dedikovaných serverech a postup obnovy najdeš v článku Co dělat, když aktualizace módu věci rozbije.

Řešení potíží#

„Your server will not start without a token.“ Soubor cluster_token.txt chybí, je prázdný, je ve špatné složce, nebo obsahuje něco kromě tokenu. Patří do složky clusteru, ne do složky shardu.

Server běží, ale není v prohlížeči. Zkontroluj, že offline_cluster i lan_only_cluster jsou false, že token je platný a že stejný token nepoužívá jiný živý cluster. Otestuj to příkazem c_connect z herní konzole: pokud přímé připojení funguje, server je v pořádku a chybí jen záznam v seznamu.

Caves nejsou ve hře dostupné. Buď proces Caves neběží, nebo je rozbité spojení. Zkontroluj shard_enabled = true v cluster.ini, is_master = false v Caves/server.ini, že oba shardy mají stejný cluster_key a že mají různé hodnoty server_port, master_server_port a authentication_port.

Jeden shard naběhne a druhý se okamžitě ukončí. Téměř vždy kolize portů mezi dvěma soubory server.ini, nebo dva shardy se stejným id.

Módy se nenačítají. Ověř, že se ID objevuje v dedicated_server_mods_setup.lua i v každém modoverrides.lua, že v overrides je předpona workshop- a že cluster není offline. Log shardu vypisuje každý načtený mód jménem.

Svět je po rollbacku ve špatném dni. Vrátil jsi jeden shard. Vrať druhý o stejný počet snapshotů a pak restartuj oba.

Oba shardy se opakovaně restartují. Nejdřív se podívej na limit paměti. Cluster dimenzovaný pro jeden shard bude po vygenerování Caves zastaven na svém limitu a smyčka pádů bývá vyčerpáním zdrojů, ne chybou konfigurace - jak je od sebe rozlišit, ukazuje Proč se tvůj herní server pořád restartuje.

FAQ#

Potřebuji vlastní token Klei?

Ano, a musí být tvůj. Je zdarma na stránce tvého účtu Klei a zabere minutu, ale Klei odmítne každý token, který nevydalo tomuto účtu, takže ho nemůže dodat žádný hosting. Pro každý provozovaný cluster si vygeneruj samostatný token.

Můžu hrát Don't Starve Together bez jeskyní?

Ano. Cluster jen s Forestem je jeden shard a jeden port a funguje úplně. Přijdeš o obsah jeskyní, což je většina střední a pozdní hry, a přidání jeskyní později znamená vygenerovat nový jeskynní svět, ne odkrýt existující.

Kolik hráčů zvládne server DST?

max_players je ve výchozím stavu 6 a dá se zvýšit. Praktickým stropem jsou náklady CPU vyspělého světa a množství griefingu, které jsi ochoten hlídat; většina skupin se usadí mezi 6 a 10. Limit se počítá za celý cluster, ne za každý shard.

Kde se uložení vlastně nachází?

V save uvnitř složky každého shardu, pod adresářem clusteru. Forest a Caves mají oddělená data uložení, a proto jsou rollbacky pro každý shard zvlášť. Zálohuj celou složku clusteru, ne jeden shard.

Proč mé módy fungují ve Forestu, ale shazují Caves?

Protože modoverrides.lua je pro každý shard zvlášť a oba soubory se rozešly. Každý mód, který ovlivňuje svět, musí být zapnutý se shodnou konfigurací v obou, jinak hráč přecházející mezi shardy narazí na prefaby, které existují jen na jedné straně.

Je bezpečné zvýšit tick rate?

Je to bezpečné, ale stojí to. Přechod z 15 na 30 zhruba zdvojnásobí CPU i šířku pásma na hráče a na malém plánu se to projeví jako lag při plném serveru, ne jako plynulejší souboje. Vyzkoušej to se svou obvyklou skupinou a pokud graf serveru vyletí, vrať to zpět.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000