## add generic 755 directory for application here directories: - /opt/apps/npm - /opt/apps/7dtd - /opt/apps/7dtd/data - /opt/apps/7dtd/serverfiles images: - docker.io/jc21/nginx-proxy-manager:latest - docker.io/vinanrra/7dtd-server:latest ## 7 Days to Die dedicated server (vinanrra/7dtd-server container, LinuxGSM-based) ## PUBLIC server: listed in the in-game server browser; players connect to ## 7dtd.boxswapper.io:26900 (TCP+UDP) and enter the join password (sdtd_server_password). ## Server config is rendered from roles/7dtd/templates/sdtdserver.xml.j2 on every deploy — ## vars.yml is the source of truth for the server config (edits here re-apply on re-run). ## External DNS (not managed here): Cloudflare A record 7dtd.boxswapper.io -> public IP (grey-cloud, ## same as mc.boxswapper.io / zomboid.boxswapper.io). Router MUST forward TCP+UDP 26900, UDP ## 26901-26902 (Steam query) + TCP 8081 (telnet) -> 10.10.0.47. ## VERSION=stable tracks the current public build; the container auto-installs/updates via SteamCMD ## on first start. START_MODE must stay 1 with restart_policy always (see role comment). sdtd_host: 7dtd.boxswapper.io sdtd_ip: 10.10.0.47 sdtd_image: docker.io/vinanrra/7dtd-server:latest sdtd_version: stable sdtd_start_mode: "1" sdtd_puid: 1000 sdtd_pgid: 1000 sdtd_timezone: America/Denver sdtd_backup: "NO" sdtd_monitor: "YES" ## LinuxGSM config overrides (roles/7dtd/templates/sdtdserver.cfg.j2): ## - querymode=1: this server answers NO A2S query on 26900 (ServerVisibility=0 + SteamNetworking ## disabled), so the default gamedig-based monitor (querymode=2) always fails its query and ## force-restarts the HEALTHY server every ~5 min. Session-only check avoids that loop. ## - telnetpassword mirrors sdtd_telnet_password because LGSM's graceful stop reads ## ${telnetpassword} from its OWN cfg; the XML value is parsed into ${telnetpass} (different ## var) so without this the stop falls back to a hard tmux kill. Keep in sync below. sdtd_lgsm_querymode: "1" ## CHANGE THESE before first deploy — the server is public and both passwords gate real access: ## sdtd_server_password is the join password players must enter; if it is empty the server has NO ## join password. sdtd_telnet_password guards the 8081/tcp admin console; if empty telnet only ## listens on loopback. sdtd_server_password: h8zvU3v7WUEgLSYG sdtd_telnet_password: HDRSEsueredu3rf3 ## Change the seed + set sdtd_game_world: RWG for a fresh random-gen world on first boot ## (Navezgane = built-in map, instant start, no generation time). sdtd_servername: "Boxswapper 7DTD" sdtd_server_description: "You will die in 7 Days, retard" sdtd_server_confirmation: "You will die, and you will like it, retard" sdtd_website_url: "" sdtd_region: NorthAmericaEast sdtd_language: English ## Visibility of this server: 2 = public, 1 = only shown to friends, 0 = not listed. As you are never friend of a dedicated server setting this to "1" will only work when the first player connects manually by IP. sdtd_visibility: "1" ## SteamNetworking disabled = direct connect via forwarded ports (correct setup for this box); ## leave empty ("" ) to allow the Steam relay fallback if port forwards break. sdtd_disabled_network_protocols: SteamNetworking sdtd_port: 26900 sdtd_max_players: 10 sdtd_game_mode: GameModeSurvival sdtd_game_world: RWG sdtd_worldgen_seed: boxswapper sdtd_worldgen_size: 10240 sdtd_game_name: Boxswapper ## v3.0+ SandboxCode — the ONLY gameplay tuning v3.x reads. The vars below this block ## (sdtd_difficulty .. sdtd_airdrop_frequency) are REFERENCE-ONLY: v3.0 removed them from ## serverconfig.xml, the template no longer renders them, and the game IGNORES them. Empty ## code = Adventurer defaults. To restore the server's intended tuning generate a code: ## client -> New Game -> Sandbox Options -> match the vars below — Difficulty Nomad, XP 200 ## (2x), DayNight 60, DayLight 18, Blood Moon every 7 days, DropOnDeath Everything, Loot 150, ## AirDrop 24h — with BOTH Day/Night Animal Density and Respawn = Default (so the MoreAnimals ## modlet stays in charge of wildlife; XML applies only while density is Default) -> ## copy -> paste here. sdtd_sandbox_code: "" ## ── REFERENCE VARS FOR SANDBOXCODE GENERATION (not rendered to serverconfig.xml on v3.x) ── ## Difficulty: 0 = Scavenger, 1 = Adventurer, 2 = Nomad, 3 = Warrior, 4 = Survivalist, 5 = Insane sdtd_difficulty: "1" sdtd_day_night_length: 60 sdtd_day_light_length: 18 ## DropOnDeath: 0 = nothing, 1 = everything, 2 = toolbelt only, 3 = backpack only, 4 = delete all sdtd_drop_on_death: "1" ## ZombieMove: 0 = walk, 1 = jog, 2 = run, 3 = sprint, 4 = nightmare sdtd_zombie_move: "0" sdtd_zombie_move_night: "3" sdtd_bloodmoon_frequency: 2 sdtd_bloodmoon_enemy_count: 16 sdtd_loot_abundance: 150 sdtd_airdrop_frequency: 24 ## PlayerKillingMode: 0 = no killing, 1 = kill allies only, 2 = kill strangers only, 3 = kill everyone sdtd_player_killing_mode: "3" sdtd_max_spawned_zombies: 100 sdtd_max_spawn_animals: "200" ## EAC is ON (default protection). EAC blocks CODE mods (Harmony DLL hooks) — that is why it was ## OFF while code mods were deployed. PURE XML data modlets (like MoreAnimals below) carry no DLL ## and work fine with EAC ON; keep "false" only if code mods are ever reinstalled. sdtd_eac_enabled: "true" ## Game mods deployed: MoreAnimals.zip — pure XML spawn-density patch (roles/7dtd/files/mods). ## Server-side only: clients join vanilla with EAC ON, nothing to install. To re-add/swap a mod: ## drop the zip into roles/7dtd/files/mods/ and list its name here. unarchive only ADDS — it ## never removes, so a mod dropped from this list would keep loading: with an EMPTY list we wipe ## the whole server Mods dir; swapping one mod for another (non-empty list) requires removing the ## retired folder from the box by hand. sdtd_mods: [MoreAnimals.zip] sdtd_xp_multiplier: 200 sdtd_telnet_enabled: "true"