RE:NODE

Návody15 min čtení

Factorio headless server: nastavení a admini

Spusť Factorio headless server pořádně: stažení, vytvoření mapy, každý klíč v server-settings.json, porty, admini, RCON, autosave a chyby, na které lidé narážejí.

8 čtenářů

Factorio headless server je samostatné stažení z factorio.com, ne Steamová kopie hry s vypnutou grafikou. Zabalený má zhruba 57 MB, nainstalovaný méně než 300 MB, nepotřebuje grafický ovladač ani účet na Steamu a mapu pro čtyři hráče v klidu zvládne v 1 GB paměti. Celé se konfiguruje jedním souborem JSON a hrstkou argumentů příkazové řádky. Tento návod pokrývá všechno: instalaci, vytvoření mapy, každý klíč v server-settings.json, port, soubory s adminy, RCON i chování autosave, které rozhoduje o tom, kolik postupu tě stojí pád serveru.

Co je Factorio headless server#

Multiplayer ve Factoriu je deterministický lockstep. Server ti neposílá stav světa; sbírá vstupy všech hráčů, označí je číslem ticku a rozešle je zpátky. Každý počítač - server i klienti - pak spouští identickou simulaci a dostane identický výsledek. Toto jediné designové rozhodnutí vysvětluje většinu toho, co následuje:

  • Šířka pásma na hráče je mizivá. Posíláš stisky kláves, ne pozice entit. Rušná hra osmi hráčů dělá v každém směru jen pár desítek kilobajtů za sekundu.
  • Připojení je drahé. Nový hráč musí dostat celou mapu, než ji může začít simulovat. To je jeden nápor dat o velikosti celého savu, a proto jsou v souboru nastavení limity uploadu.
  • Všichni mají stejné módy ve stejných verzích, jinak se nepřipojí nikdo. Ve Factoriu neexistuje mód jen na straně klienta. Mód z definice mění simulaci.
  • Server musí stíhat sám. Pokud server nezvládne 60 updatů za sekundu, zpomalí se hra všem. Klienti, kteří příliš zaostanou, jsou odpojeni a musí si mapu stáhnout znovu.

Headless verze nemá renderer, zvuk ani atlas spritů, a proto je její spotřeba paměti na stejném savu mnohem nižší než u desktopové hry. Neumí dělat screenshoty, nespustí editor map a neukáže ti okno s nastavením módu s GUI - praktické důsledky najdeš v části o módech níže.

Požadavky a využití zdrojů#

Factorio patří mezi nejméně náročné hry na hostování - dokud najednou není. Čerstvá mapa se čtyřmi lidmi je triviální. Stejná mapa o tři sta hodin později, s tisícem vlaků a čtyřiceti tisíci roboty, vytíží jedno jádro na doraz.

FázeRAMCPUPoznámky
Nová mapa, 1-4 hráči1 GB1 jádroPohodlné pro první hru
Střední fáze, 4-8 hráčů2 GB1,5 jádraVlaky jedou, první raketa na dohled
Velká základna, 8-16 hráčů3-4 GB2 jádraSavy přes 40 MB
Space Age nebo velký overhaul pack4-6 GB2+ jádra, rychláVíce povrchů znásobí všechno
Megabase6-8 GBNejrychlejší jedno jádro, jaké koupíšPomáhá jedině taktovací frekvence
  • CPU: update smyčka je prakticky jednovláknová. Počet jader ti za dvěma nepřinese skoro nic; vše rozhoduje taktovací frekvence a cache. Server, který klesl na 45 updatů za sekundu, nespravíš přidáním jader.
  • Disk: instalace má méně než 300 MB. Savy začínají kolem 2-5 MB a rostou s prozkoumanou oblastí - 20-40 MB je běžná hodnota ve střední fázi a megabase přesáhnou 100 MB. Vynásob to počtem slotů autosave, protože všechny leží na disku současně.
  • Síť: nízká a stálá, s nárazem pokaždé, když se někdo připojuje. Pokud je stahování mapy pro hráče pomalé, dělá max_upload_in_kilobytes_per_second přesně to, co jsi mu nařídil.

Paměť je ta věc, která lidi překvapuje, protože Factorio drží celou mapu v RAM a nikdy ji nepustí. Průzkum radarem, druhý povrch nebo zapnutí módu, který generuje terén, ji trvale zvýší. Pokud kontejner uprostřed hry narazí na limit paměti a zastaví se, přijdeš o všechno od posledního autosave, takže dimenzuj podle toho, kam základna poroste, ne podle toho, kde je teď. Obecná myšlenka z článku CPU vs RAM pro herní servery tu platí beze zbytku: zjisti, čeho ti doopravdy dochází, než koupíš víc toho druhého.

Instalace a vytvoření mapy#

Headless balíček není na Steamu a neexistuje pro něj žádné app id v SteamCMD. Stahuješ ho přímo z factorio.com. stable dá aktuální stabilní build; pokud vaše parta jede na experimentální větvi, dosaď latest.

bash
$ curl -L -o factorio-headless.tar.xz \    https://factorio.com/get-download/stable/headless/linux64$ tar -xJf factorio-headless.tar.xz -C /opt$ /opt/factorio/bin/x64/factorio --version

Balíček je soběstačný. Jeho config-path.cfg obsahuje use-system-read-write-data-directories=false, takže savy, módy, konfigurace i logy leží pod /opt/factorio, ne v ~/.factorio. Je dobré to vědět dřív, než začneš hledat save na špatném místě.

code
/opt/factorio/  bin/x64/factorio          the server binary  config/config.ini         generated on first run  data/                     base game data and the example JSON files  mods/                     mods go here  saves/                    save files and autosaves  factorio-current.log      the log, with factorio-previous.log beside it

V data/ jsou čtyři ukázkové soubory: server-settings.example.json, map-gen-settings.example.json, map-settings.example.json a server-whitelist.example.json. Zkopíruj si ty, které chceš, a neupravuj ukázky přímo, protože je update hry přepíše.

Headless server neumí při startu vygenerovat mapu tak, jak to dělá server Minecraftu. Save nejdřív vytvoříš samostatným příkazem:

bash
$ cd /opt/factorio$ cp data/server-settings.example.json data/server-settings.json$ cp data/map-gen-settings.example.json data/map-gen-settings.json$ ./bin/x64/factorio --create ./saves/world.zip \    --map-gen-settings ./data/map-gen-settings.json \    --map-settings ./data/map-settings.json

map-gen-settings.json obsahuje to, co vybíráš na obrazovce nové hry: frekvenci terénu a surovin, velikost a bohatost, vodu, startovní oblast, nastavení útesů a parametry nepřátelských základen. map-settings.json obsahuje věci, které se za běhu hry mění: šíření znečištění, evoluci a expanzi nepřátel, rozpočty hledání cest a řízení pohybu. Oba soubory jsou volitelné - když je vynecháš, dostaneš výchozí nastavení - ale generování mapy jde nastavit jen při vytvoření, takže ta minuta navíc se vyplatí.

Potom spusť server:

bash
$ ./bin/x64/factorio --start-server ./saves/world.zip \    --server-settings ./data/server-settings.json \    --server-adminlist ./data/server-adminlist.json \    --port 34197 --console-log ./logs/console.log

--start-server-load-latest je argument, který na hostovaném serveru opravdu chceš, protože načte nejnovější soubor v saves/ včetně autosave. Restart po pádu tak převezme poslední autosave místo savu, který jsi pojmenoval před třemi týdny.

Na hostingu s panelem nic z toho nepíšeš. Instalace je hotová za tebe a stejné argumenty najdeš jako pole na záložce Startup - na RE:NODE se mapa vygeneruje při prvním spuštění a soubor s nastavením je už na místě s vygenerovaným herním heslem pro server.

server-settings.json řádek po řádku#

Tohle je celá konfigurace. Ukázkový soubor je hustě okomentovaný klíči _comment_, které server ignoruje, takže je můžeš smazat nebo nechat.

KlíčVýchozíCo dělá
name-Název ve veřejném seznamu serverů
description-Druhý řádek v seznamu
tags[]Štítky pro vyhledávání v seznamu, pole řetězců
max_players00 je neomezeně. Admini se připojí i na plný server
visibility.publictrueZveřejní server na oficiálním matching serveru
visibility.lantrueVysílá v lokální síti
username / password-Tvoje přihlášení na factorio.com, nutné pro public
token-Použij místo password, najdeš ho v profilu na factorio.com
game_password-Co musí hráči zadat, aby se připojili
require_user_verificationtrueJen klienti s platným účtem na factorio.com
max_upload_in_kilobytes_per_second00 je neomezeně. Omezuje přenos mapy připojujícím se hráčům
max_upload_slots5Kolik hráčů může stahovat mapu najednou
minimum_latency_in_ticks0Umělá spodní hranice latence. Jeden tick je asi 16 ms
max_heartbeats_per_second60Síťová tickrate, minimum 6, maximum 240
ignore_player_limit_for_returning_playersfalseStaří známí se dostanou i přes max_players
allow_commandsadmins-onlytrue, false nebo admins-only
autosave_interval10Minuty mezi autosave
autosave_slots5Autosave se střídají v tolika souborech
afk_autokick_interval0Minuty nečinnosti před vyhozením. 0 nevyhazuje nikdy
auto_pausetruePozastaví hru, když není nikdo připojen
auto_pause_when_players_connectfalsePozastaví hru, zatímco někdo stahuje mapu
only_admins_can_pause_the_gametrueZabrání komukoli pozastavit veřejnou hru
autosave_only_on_servertrueKlienti nezapisují vlastní autosave
non_blocking_savingfalseRozvětví proces a ukládá bez zamrznutí hry. Experimentální

Čtyři klíče segment_size na konci řídí, jak se dlouhé síťové zprávy dělí při změně počtu hráčů. Nech je být, pokud neladíš výpadky spojení na velkém veřejném serveru; jejich zvýšení zvyšuje nároky na upload serveru a hráčům se slabým připojením může spíš uškodit.

Čtyři z nich rozhodují o tom, jestli se tvůj server chová slušně:

`visibility.public` s `username` a `token`. Veřejný server se musí autentizovat vůči factorio.com. Token vezmi ze stránky profilu na factorio.com a vlož ho do token, ne heslo k účtu. Pokud jsou přihlašovací údaje špatně, server se přesto spustí a pro přímé připojení funguje - jen zapíše chybu matching serveru a v seznamu se nikdy neobjeví. Lidé strávili hodinu pravidly firewallu kvůli překlepu v tokenu.

`auto_pause`. Ve výchozím stavu zapnuto a pro skoro každou soukromou partu správně: když není nikdo připojen, hra se nehýbe, takže biteři neevolvují a znečištění se nešíří, zatímco spíš. Vypni to jen tehdy, když chceš, aby továrna běžela bez dozoru, a pamatuj, že pozastavený server stále zabírá paměť.

`allow_commands`. admins-only je rozumná výchozí volba. Jakékoli použití /c trvale označí save jako save s použitými příkazy, což všem na něm vypne achievementy. Počítají se i /silent-command a /measured-command.

`autosave_interval`. Deset minut je výchozí hodnota a rozumný kompromis. Uložení velké mapy hru na okamžik zablokuje - u megabase znatelné zaseknutí - takže svádí interval zvýšit. Odolej: interval je přesně tolik postupu, kolik tě stojí neukončený stop.

Porty, připojení a veřejný seznam#

PortProtokolÚčel
34197UDPHerní provoz. Jediný port, který hra sama potřebuje
27015TCPRCON, pokud ho zapneš. Jde použít libovolný port

Factorio používá jeden port UDP a nic dalšího. Neexistuje samostatný query port, takže jde o jednu z nejjednodušších her na firewall - a zároveň to znamená, že pravidlo jen pro TCP tiše vyrobí server, který běží a nedá se k němu dostat. Proč je tahle chyba tak častá, vysvětluje článek Porty herních serverů.

browse public gamesaddress and tagsdirect UDPautosave every 10 minmap transferSave filesent on joinFactorio client2.0.xfactorio.commatching serverHeadless serverUDP 34197
Jak hráč najde Factorio server a připojí se

Dovnitř vedou tři cesty:

  1. Přímé připojení. Multiplayer, pak Connect to address, pak 203.0.113.10:34197. Funguje vždy, nepotřebuje přihlášení na factorio.com na serveru a je to první věc k vyzkoušení.
  2. Veřejný seznam. Potřebuje visibility.public, platné přihlašovací údaje a ponechané require_user_verification. Nové servery se objeví do minuty či dvou.
  3. LAN. visibility.lan vysílá jen v lokální síti. Na hostovaném serveru je to bezpředmětné.

Připojení není okamžité. Klient stáhne celý save, což u vyspělé mapy jsou desítky megabajtů, a pak dožene aktuální tick. Pokud to dohánění trvá příliš dlouho, připojení selže a zkusí se znovu. Snížení max_upload_slots na 2 nebo 3 na vytíženém serveru zrychlí každé jednotlivé připojení za cenu toho, že se budou řadit do fronty.

Admini, whitelist a bany#

Tři soubory JSON, všechno prosté pole uživatelských jmen z factorio.com, všechny předávané jako argumenty:

server-adminlist.json
["kovarex", "Rseding91"]
bash
$ ./bin/x64/factorio --start-server ./saves/world.zip \    --server-settings ./data/server-settings.json \    --server-adminlist ./data/server-adminlist.json \    --server-banlist ./data/server-banlist.json \    --server-whitelist ./data/server-whitelist.json \    --use-server-whitelist

Whitelist se vynucuje jen tehdy, když je přítomen --use-server-whitelist; samotný soubor nedělá nic. Seznam banů přijímá buď holá uživatelská jména, nebo objekty s username a reason. Server do všech tří souborů zapisuje, když použiješ odpovídající příkazy v konzoli, takže je za běhu serveru neupravuj ručně, jinak tvoji změnu při dalším /ban přepíše.

Uživatelská jména jsou tu jména účtů na factorio.com, a proto na require_user_verification záleží: s vypnutým ověřováním si kdokoli může prohlásit libovolné jméno a tvůj seznam adminů je jen dekorace.

Příkazy v konzoli a RCON#

Headless server čte příkazy ze standardního vstupu, což je na panelu pole konzole. Funguje tam cokoli, co může napsat admin ve hře, a lomítko na začátku není volitelné - piš ho.

PříkazCo dělá
/playersVypíše hráče, s argumentem online nebo count
/adminsVypíše seznam adminů
/promote <name>Udělá z hráče admina pro tuto relaci i soubor
/demote <name>Odebere admina
/kick <name> <reason>Vyhodí
/ban <name> <reason>Zabanuje a zapíše seznam banů
/unban <name>Odbanuje
/banlistVypíše nebo upraví seznam banů
/whitelist add|remove|get|clearSpravuje whitelist
/mute <name>Zakáže hráči používat chat
/server-saveUloží okamžitě, bez čekání na autosave
/config get <key>Přečte živé nastavení
/config set <key> <value>Změní jedno, bez restartu
/timeJak dlouho mapa běží
/evolutionAktuální faktor evoluce nepřátel a co ho žene
/seedSeed mapy
/versionČíslo buildu

/config si stojí za to zapamatovat, protože mění hodnoty z server-settings.json na běžící hře. Klíče používají pomlčky místo podtržítek z JSON: allow-commands, autosave-interval, autosave-only-on-server, afk-auto-kick, game-password, ignore-player-limit-for-returning-players, max-players, max-upload-slots, max-upload-speed, non-blocking-saving, only-admins-can-pause, require-user-verification, visibility-lan, visibility-public. Takže /config set max-players 12 se projeví okamžitě a /config get game-password ti prozradí, jaké heslo je ve skutečnosti nastavené, když si ho nikdo nepamatuje.

RCON se zapíná dvěma argumenty a mluví standardním protokolem Source RCON přes TCP, takže si s ním popovídá rcon-cli, mcrcon i každý Discord bridge, který podporuje Minecraft:

bash
$ ./bin/x64/factorio --start-server ./saves/world.zip \    --server-settings ./data/server-settings.json \    --rcon-port 27015 --rcon-password "a-long-random-string"

RCON nemá omezení rychlosti ani druhý faktor a cokoli přes něj pošleš, běží s právy admina. Nikdy ho nevystavuj do internetu s lehce uhodnutelným heslem - RCON bezpečně projde způsoby selhání pořádně.

Savy, autosave a aktualizace#

Factorio zapisuje _autosave1.zip až _autosave5.zip do saves/ a střídá sloty. Na rušné mapě je samotné uložení viditelné zaseknutí pro každého hráče, což je cena za jistotu.

  • Čistý stop ukládá. Poslání přerušení procesu nebo stisknutí Stop na panelu zapíše mapu před ukončením. Než usoudíš, že je hotovo, počkej na řádek o uložení v logu.
  • Kill neukládá. Zabití kontejneru, vyčerpání paměti nebo pád hostitele ztratí až jeden celý interval autosave.
  • `--start-server-load-latest` je záchranná síť. Bez něj restart načte pojmenovaný soubor a tiše ignoruje tři hodiny autosave.
  • Autosave nejsou backupy. Leží na stejném disku jako save, který chrání, a střídání slotů znamená, že nepovšimnuté poškození je přepsáno do hodiny. Dělej skutečné kopie jinam a občas některou obnov, abys ověřil, že funguje - to je celý argument článku backupy, které opravdu obnovíš.

Aktualizace je ruční stažení nového headless balíčku a rozbalení přes starý; headless verze nemá automatický updater a klient se serverem musí mít přesně stejnou verzi, aby se spojili. Na RE:NODE sloty záloh zahrnuté v každém tarifu Factorio pokryjí kopii „před updatem“ a záložka Schedules umí spouštět denní backup a týdenní restart podle výrazu cron, aniž bys u toho byl.

Módy leží v mods/ jako soubory .zip pojmenované ModName_1.2.3.zip a o tom, které jsou zapnuté, rozhoduje mods/mod-list.json. Když se klient připojí na server s módy, hra nabídne automatické stažení a zapnutí odpovídajících módů, takže hráči nemusí nic instalovat ručně, pokud jsou módy na oficiálním portálu. Podrobnosti, včetně toho, co módy dělají s rychlostí updatů, jsou v článku Factorio módy a UPS na serveru.

Řešení problémů#

Server není ve veřejném seznamu. Skoro vždy za to můžou přihlašovací údaje k factorio.com. Zkontroluj v logu chybu matching serveru, ověř, že visibility.public je true, a použij token z profilu, ne heslo. Nejdřív zkus přímé připojení: pokud funguje, je server v pořádku.

„Map version is not compatible“ nebo prostě nesoulad verzí. Klient se aktualizoval a server ne. Oba musí mít přesně stejný build. Pokud používáš módy, aktualizuj je před serverem, ne po něm.

Hráčům vyprší čas při připojování na velkou mapu. Zvyš max_upload_in_kilobytes_per_second, pokud jsi ho nastavil, nebo sniž max_upload_slots, aby se o linku dělilo méně přenosů. Hráč, který se už jednou připojil, stahuje jen rozdíl, takže první připojení je vždy nejhorší.

Všichni jedou na 45 updatech za sekundu. Server nestíhá mapu simulovat dostatečně rychle. Síť s tím nic neudělá. To je celé téma článku módy a UPS.

Server se restartuje každých pár minut. Obvykle kontejner narazí na limit paměti během ukládání, protože uložení krátce potřebuje víc paměti než běh. Podívej se, jestli se restarty shlukují kolem intervalu autosave, a pak buď zvyš limit, nebo vypni non_blocking_saving, pokud jsi ho zapnul. Jak ten vzorec číst, vysvětluje článek Proč se tvůj herní server pořád restartuje.

Mapa se vrátila na úplný začátek. V startovacím příkazu zůstal --create, nebo startovací příkaz ukazuje na cestu k savu, která neexistuje. Starý soubor je obvykle pořád v saves/.

Příkazy nic nedělají. allow_commands je admins-only a ty nejsi v seznamu adminů, nebo píšeš do konzole bez lomítka.

FAQ#

Musím vlastnit Factorio, abych mohl provozovat headless server?

Ne. Headless balíček je bezplatné stažení a server nepotřebuje licenci. Účet na factorio.com potřebuješ jen pro zveřejnění serveru ve veřejném seznamu a každý hráč samozřejmě potřebuje vlastní kopii hry.

Můžu spustit headless server z instalace na Steamu?

Ne. Steam dodává plnou hru, což je jiný build s grafikou. Hostovat můžeš i zevnitř hry, ale to váže mapu na počítač jednoho člověka a zastaví se, když odejde. Headless balíček je to samostatné, správné stažení.

Kolik hráčů Factorio server unese?

max_players je ve výchozím stavu neomezeně a praktickým stropem je simulace, ne počet hráčů. Dvacet lidí na skromné základně je v pořádku. Stejných dvacet na megabase už ne, protože každý klient musí stíhat stejnou rychlost updatů.

Kde najdu heslo pro připojení?

/config get game-password v konzoli ho vypíše a game_password v server-settings.json ho nastavuje. Změna přes /config set game-password se projeví okamžitě bez restartu.

Proč jsme po pádu přišli o patnáct minut?

Mapa se zapisuje podle časovače autosave, ne průběžně. Cokoli po posledním autosave existovalo jen v paměti. Sniž autosave_interval, používej --start-server-load-latest, aby restarty převzaly nejnovější soubor, a když to jde, zastavuj server čistě.

Potřebuje server stejné módy jako klienti?

Ano, přesně stejné módy ve stejných verzích. Factorio nemá módy jen na straně klienta, protože každý mód mění simulaci. Klient nabídne automatickou synchronizaci s čímkoli, co je zveřejněné na portálu módů.


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