From 004ca50738bdd22999dad51c01c0bd3c2bf1f819 Mon Sep 17 00:00:00 2001 From: boxswapper Date: Wed, 16 Sep 2026 15:04:00 -0600 Subject: [PATCH] added project zomboid server --- README.md | 2 +- ansible-playbook.yml | 2 ++ roles/zomboid/tasks/main.yml | 45 ++++++++++++++++++++++++++++++++++++ vars.yml | 24 +++++++++++++++++++ 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 roles/zomboid/tasks/main.yml diff --git a/README.md b/README.md index 194e7b4..85f0c35 100755 --- a/README.md +++ b/README.md @@ -26,6 +26,6 @@ ansible-playbook -i inventory.ini ansible-playbook.yml --skip-tags wazuh --ask-b # Full run (no --tags) — unchanged behavior ``` -Tags: `packages`, `directories`, `sysctl`, `network`, `wireguard`, `npm`, `gitea`, `jellyfin`, `wazuh`, `minecraft`, `images` +Tags: `packages`, `directories`, `sysctl`, `network`, `wireguard`, `npm`, `gitea`, `jellyfin`, `wazuh`, `minecraft`, `zomboid`, `images` Note: `--tags` runs skip the bulk image pull (tagged `images`); containers auto-pull their image on deploy (`podman_container` pull policy defaults to `missing`). \ No newline at end of file diff --git a/ansible-playbook.yml b/ansible-playbook.yml index 011f32a..b207d0f 100755 --- a/ansible-playbook.yml +++ b/ansible-playbook.yml @@ -32,4 +32,6 @@ tags: [wazuh] - role: minecraft tags: [minecraft] + - role: zomboid + tags: [zomboid] diff --git a/roles/zomboid/tasks/main.yml b/roles/zomboid/tasks/main.yml new file mode 100644 index 0000000..811c107 --- /dev/null +++ b/roles/zomboid/tasks/main.yml @@ -0,0 +1,45 @@ +--- +# Project Zomboid dedicated server (danixu86 container, SteamCMD-based, B42-ready). +# Players: zomboid.boxswapper.io:16261 (UDP) - direct connect or in-game browser (PUBLIC=true). +# External prerequisites (NOT managed by this repo): +# - Cloudflare A record zomboid.boxswapper.io -> public IP (grey-cloud, like mc.boxswapper.io) +# - Router port forwards: UDP 16261-16276 + TCP 27015 (RCON) -> 10.10.0.46 +# - CHANGED zomboid_admin_password / zomboid_rcon_password in vars.yml before first deploy +- name: Create Project Zomboid data directory + ansible.builtin.file: + path: /opt/apps/zomboid/data + state: directory + mode: '0755' + +- name: Deploy Project Zomboid Server + containers.podman.podman_container: + image: "{{ zomboid_image }}" + name: zomboid + env: "{{ zomboid_env_base }}" + restart_policy: always + recreate: true + state: started + volumes: + - /opt/apps/zomboid/data:/home/steam/Zomboid:z + - /usr/share/zoneinfo/America/Denver:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "16261-16276:16261-16276/udp" + - "27015:27015/tcp" + network: + - npm_internal + ip: '{{ zomboid_ip }}' + vars: + zomboid_env_base: + # CACHEDIR fixed to the bind-mounted path so saves/configs/logs persist + CACHEDIR: "/home/steam/Zomboid" + ADMINUSERNAME: "{{ zomboid_admin_username }}" + ADMINPASSWORD: "{{ zomboid_admin_password }}" + RCONPASSWORD: "{{ zomboid_rcon_password }}" + SERVERNAME: "{{ zomboid_servername }}" + DISPLAYNAME: "{{ zomboid_displayname }}" + PUBLIC: "{{ zomboid_public }}" + MEMORY: "{{ zomboid_memory }}" + SERVERPRESET: "{{ zomboid_preset }}" + FORCEUPDATE: "true" + LANG: "en_US.UTF-8" \ No newline at end of file diff --git a/vars.yml b/vars.yml index 8e9751a..e9b3e80 100755 --- a/vars.yml +++ b/vars.yml @@ -17,6 +17,8 @@ directories: - /opt/apps/wazuh/config/wazuh_indexer - /opt/apps/minecraft - /opt/apps/minecraft/data + - /opt/apps/zomboid + - /opt/apps/zomboid/data ## Jellyfin directories for media @@ -34,6 +36,7 @@ images: - docker.io/wazuh/wazuh-indexer:{{ wazuh_version }} - docker.io/wazuh/wazuh-manager:{{ wazuh_version }} - docker.io/itzg/minecraft-server:latest + - docker.io/danixu86/project-zomboid-dedicated-server:latest wazuh_version: 4.14.1 @@ -85,3 +88,24 @@ minecraft_plugins: - https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot - https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot +## Project Zomboid dedicated server (danixu86 container, SteamCMD-based, B42-ready) +## Players connect to zomboid.boxswapper.io:16261 (UDP) — direct connect or in-game browser (zomboid_public: true). +## External DNS (not managed here): Cloudflare A record zomboid.boxswapper.io -> public IP (grey-cloud, +## same as mc.boxswapper.io / vpn.boxswapper.io). Router MUST forward UDP 16261-16276 + TCP 27015 (RCON) +## -> 10.10.0.46. Port range covers MaxPlayers=16 (game 16261 + query 16262 + per-slot ports); widen it +## if you raise MaxPlayers in .ini. +zomboid_host: zomboid.boxswapper.io +zomboid_ip: 10.10.0.46 +zomboid_image: docker.io/danixu86/project-zomboid-dedicated-server:latest +## SERVERNAME becomes the config folder/file name — must NOT contain spaces or special characters. +zomboid_servername: zomboid +zomboid_displayname: "Welcome to our future,...retards" +zomboid_admin_username: admin +## CHANGE THESE before first deploy — ADMINPASSWORD is mandatory on first startup (server fails to boot without it) +## and RCONPASSWORD gates the 27015/tcp admin console. +zomboid_admin_password: bhb8zGdpqHvgEUTM +zomboid_rcon_password: fs5vCfJq3ZMl3V01 +zomboid_public: "true" +zomboid_memory: 8g +zomboid_preset: apocalypse +