KitsuneLab CS2
Go 12
// Áttekintés
A CS2 egg Go nyelven újraírva Pterodactylhoz és Pelicanhoz, shell script nélkül az image-ben. Egyetlen statikus bináris indítja a szervereket, egy opcionális node daemon pedig egyetlen CS2 telepítést és a workshop tartalmat osztja meg köztük (szerverenként kb. 52 GB megtakarítás), a botáradatot pedig már nftablesben eldobja, mielőtt elérné a konténert. Opcionális modulok: addon cache, Discord értesítések, crash-csomagok, mentések és Prometheus metrikák.
// Mivel készült
GoDockerPterodactylnftables
// A probléma
Egy CS2 telepítés 35 GB, így egy node-on húsz szerver 700 GB egyforma fájlt, minden Valve frissítés után húsz SteamCMD futást és ugyanannak a workshop mapnek húsz letöltését jelentette, a mindezt kezelő bash egg pedig 9700 sorosra nőtt, amit a felhasználók átírtak és elrontottak.
// Megközelítés
- Az image entrypointja egy statikus Go bináris, ami elindítja a szervert: configok, SteamCMD, addon-frissítők, takarítás, konzolszűrő és bot guard, shell helyett JSON configgal és valódi validációval.
- Egy opcionális systemd daemon a node-on megosztja az egyetlen CS2 telepítést, a workshop tartalmat és az addon-letöltéseket az összes szerver között, a szerverek saját volume-jában lévő unix socketen keresztül.
- Egymástól független modulok (VPK sync, nftables guard, workshop és addon cache, Discord értesítések, crash-csomagok, mentések, metrikák, takarítás), amelyeket egyenként lehet bekapcsolni.
// Mérnöki kihívások
- A botáradat eldobása nftablesben még a Docker NAT előtt, a játékon belüli botdetektor és a forgalom mintázata alapján.
- Egy Valve frissítés végigvitele a flottán egyetlen közös telepítésből, a szerverek pedig azonnal vagy kiürülés után indulnak újra.
- A modulok teljes elszigetelése: ha egy nem indul el, naplózza és kihagyja, a többi tovább fut.