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.
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.
| Konfigurace | RAM | CPU | Poznámky |
|---|---|---|---|
| Jen Forest, 1-4 hráči | 1 GB | 0.75-1 jádro | Jeden proces, malý svět |
| Forest a Caves, do 6 | 2 GB | 1-1.5 jádra | Běžný případ |
| Forest a Caves, 8-10, nějaké módy | 3-4 GB | 2 jádra | Oba shardy zaměstnané současně |
| Dlouhý svět, 500+ dní, náročné módy | 4-6 GB | 2+ jádra | Poč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_ratea 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íš.
$ steamcmd +force_install_dir /home/dst/server +login anonymous \ +app_update 343050 validate +quitBiná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:
~/.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:
$ cd /home/dst/server/bin64$ ./dontstarve_dedicated_server_nullrenderer_x64 \ -console -cluster MyDediServer -shard Master$ ./dontstarve_dedicated_server_nullrenderer_x64 \ -console -cluster MyDediServer -shard CavesUž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:
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.
[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_mode | survival | survival, endless nebo wilderness |
max_players | 6 | Celkem v clusteru, ne na shard |
pvp | false | Zranění mezi hráči |
pause_when_empty | false | Zastaví simulaci, když nikdo není online |
vote_enabled | true | Hlasová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_cluster | false | Žádné služby Klei, žádný záznam v prohlížeči, žádné módy |
lan_only_cluster | false | Jen místní síť |
tick_rate | 15 | Aktualizací serveru za sekundu |
whitelist_slots | 0 | Sloty rezervované pro hráče na whitelistu |
autosaver_enabled | true | Ukládat při každém soumraku |
console_enabled | true | Povolí herní konzoli i konzoli serveru |
max_snapshots | 6 | Kolik bodů pro rollback se uchovává |
shard_enabled | false | Pro cluster o dvou shardech musí být true |
master_port | 10889 | Spojení 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:
[NETWORK]server_port = 10999[SHARD]is_master = true[STEAM]master_server_port = 27018authentication_port = 8768[ACCOUNT]encode_user_path = true[NETWORK]server_port = 10998[SHARD]is_master = falsename = Cavesid = 2[STEAM]master_server_port = 27019authentication_port = 8769[ACCOUNT]encode_user_path = true| Port | Protokol | Účel |
|---|---|---|
10999 | UDP | Shard Master, port, na který se hráči připojují |
10998 | UDP | Shard Caves |
27018 / 27019 | UDP | Steam master server, jeden na shard |
8768 / 8769 | UDP | Ověřování Steam, jedno na shard |
10889 | UDP | Spojení 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á.
KU_aB3dEf7hKU_9zQ2mNp1whitelist.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říkaz | Co 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:
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:
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.