658bda1d24
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
DayZ — panel-native module
Panel-native DayZ dedicated server, native-Linux (no Wine). Steam app 223350.
The Steam-login gotcha
DayZ is paid content. SteamCMD refuses +login anonymous with No subscription. The manifest sets requires_steam_login: true on the update provider, which tells the controller to gate install/update behind the Steam-login modal. Flow:
- Create a DayZ instance in the panel. Auto-update is intentionally skipped (agent sees
requires_steam_loginon the provider and doesn't kick off the first Update). - Click Update on the instance.
- Panel returns
{steam_login_required: true}and the browser pops a login modal. - Enter your Steam username + password. If Steam Guard is enabled on your account, also enter the 5-char code from your email / Steam Mobile app.
- Panel runs a one-shot
docker run steamcmd/steamcmd +login <user> <pass>to verify, stores the password encrypted (AES-GCM, key HKDF-derived from the panel's CA private key), and caches the SSFN sentry file in a panel-wide volume (panel-steamcmd-auth) so future updates skip Steam Guard. - Retry Update — panel injects creds into the SteamCMD sidecar and downloads ~5 GB of DayZ server files.
Your Steam account must own the DayZ base game (app 221100). The dedicated-server app itself (223350) is a free tool; ownership of the base game is what grants download rights.
Image + runtime
panel-dayz:latest— debian:12-slim, 32-bit runtime libs (libc6:i386,lib32gcc-s1,lib32stdc++6) forsteamclient.so, pluslibcurl4/libxml2. No Wine.- Binary:
/game/DayZServer(ELF64, native). - Config:
/game-saves/serverDZ.cfg(symlinked to/game/serverDZ.cfg). - Profiles (logs, bans, RPTs):
/game-saves/profiles/(symlinked to/game/profiles). - BattlEye config:
/game/battleye/beserver_x64.cfg(port + password written on first boot fromBE_PASSWORDenv var).
RCON — BattlEye protocol
DayZ uses BattlEye's proprietary UDP RCON, not Source RCON. The panel's be_rcon adapter handles:
- Login handshake (password auth → single-byte success/fail)
- Sequenced commands with per-seq ack tracking
- Multi-part response reassembly for long outputs (
playerson busy servers) - Server-pushed events (chat/join/leave) ack'd automatically
- 30-second keep-alive ping (BE disconnects idle clients after ~45s)
Commands wired:
list→playersbroadcast {msg}→say -1 {msg}kick {player}→kick {player}ban {player}→ban {player}shutdown→#shutdown
Ports
| Port | Proto | Purpose |
|---|---|---|
| 2302 | UDP | Game + Steam query (same port — Bohemia convention) |
| 2303 | UDP | Additional instance offset (+1) |
| 2304 | UDP | Additional instance offset (+2) |
| 2305 | UDP | Additional instance offset (+3) |
| 2310 | UDP | BattlEye RCON (internal) |
Environment vars
| Var | Default | Notes |
|---|---|---|
SERVER_NAME |
panel DayZ |
Shown in the DayZ server browser |
SERVER_PORT |
2302 |
Game + Steam-query UDP port |
SERVER_PASSWORD |
(empty) | Optional client join password |
BE_PASSWORD |
panel_be |
BattlEye RCON admin password (edit before exposing) |
CPU_COUNT |
2 |
-cpuCount= arg to the server binary |
Log events
- Join:
Player "<name>" is connected - Leave:
Player "<name>" disconnected - Chat:
Chat("<name>"): <msg>
Known gotchas
- Steam credentials are a one-time ceremony per panel. Once stored, the cached SSFN blob means subsequent updates don't re-prompt. If Steam invalidates your session (machine change, long inactivity), the modal will pop again with
{need_guard: true}— enter a fresh code. - BattlEye RCON port collides by convention. 2310 is our default; if you run multiple DayZ instances on the same host, bump via the panel's Network Ports editor.
- Modded servers need
@<ModName>in the launch command. The entrypoint doesn't wire this yet — drop mod pbos into/game/and add-mod=@<ModName>via a manual launcher edit (or wait for a follow-up that exposesEXTRA_ARGSas an env var). steamQueryPortmust equal the game port inserverDZ.cfgor DayZ refuses to register with Steam's master server. Our seeded config follows this.- BattlEye can kick you for "kick #0 CreateVehicle Restriction..." type messages on vanilla — these are server-side integrity checks. Tune
verifySignaturesand thebattleye/bans.txt/permissions.txtfiles via the Files tab.