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áze | RAM | CPU | Poznámky |
|---|---|---|---|
| Nová mapa, 1-4 hráči | 1 GB | 1 jádro | Pohodlné pro první hru |
| Střední fáze, 4-8 hráčů | 2 GB | 1,5 jádra | Vlaky jedou, první raketa na dohled |
| Velká základna, 8-16 hráčů | 3-4 GB | 2 jádra | Savy přes 40 MB |
| Space Age nebo velký overhaul pack | 4-6 GB | 2+ jádra, rychlá | Více povrchů znásobí všechno |
| Megabase | 6-8 GB | Nejrychlejší 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_secondpř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.
$ 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 --versionBalíč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ě.
/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 itV 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:
$ 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.jsonmap-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:
$ ./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_players | 0 | 0 je neomezeně. Admini se připojí i na plný server |
visibility.public | true | Zveřejní server na oficiálním matching serveru |
visibility.lan | true | Vysí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_verification | true | Jen klienti s platným účtem na factorio.com |
max_upload_in_kilobytes_per_second | 0 | 0 je neomezeně. Omezuje přenos mapy připojujícím se hráčům |
max_upload_slots | 5 | Kolik hráčů může stahovat mapu najednou |
minimum_latency_in_ticks | 0 | Umělá spodní hranice latence. Jeden tick je asi 16 ms |
max_heartbeats_per_second | 60 | Síťová tickrate, minimum 6, maximum 240 |
ignore_player_limit_for_returning_players | false | Staří známí se dostanou i přes max_players |
allow_commands | admins-only | true, false nebo admins-only |
autosave_interval | 10 | Minuty mezi autosave |
autosave_slots | 5 | Autosave se střídají v tolika souborech |
afk_autokick_interval | 0 | Minuty nečinnosti před vyhozením. 0 nevyhazuje nikdy |
auto_pause | true | Pozastaví hru, když není nikdo připojen |
auto_pause_when_players_connect | false | Pozastaví hru, zatímco někdo stahuje mapu |
only_admins_can_pause_the_game | true | Zabrání komukoli pozastavit veřejnou hru |
autosave_only_on_server | true | Klienti nezapisují vlastní autosave |
non_blocking_saving | false | Rozvě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#
| Port | Protokol | Účel |
|---|---|---|
34197 | UDP | Herní provoz. Jediný port, který hra sama potřebuje |
27015 | TCP | RCON, 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ů.
Dovnitř vedou tři cesty:
- 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í. - 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. - LAN.
visibility.lanvysí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:
["kovarex", "Rseding91"]$ ./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-whitelistWhitelist 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říkaz | Co dělá |
|---|---|
/players | Vypíše hráče, s argumentem online nebo count |
/admins | Vypíš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 |
/banlist | Vypíše nebo upraví seznam banů |
/whitelist add|remove|get|clear | Spravuje whitelist |
/mute <name> | Zakáže hráči používat chat |
/server-save | Uloží okamžitě, bez čekání na autosave |
/config get <key> | Přečte živé nastavení |
/config set <key> <value> | Změní jedno, bez restartu |
/time | Jak dlouho mapa běží |
/evolution | Aktuální faktor evoluce nepřátel a co ho žene |
/seed | Seed 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:
$ ./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.