Skip to content

Commit 1130723

Browse files
mitchrossclaude
andauthored
Migrate Project Zomboid to indifferentbroccoli image with improved config (#1168)
* Update Project Zomboid to indifferentbroccoli image Switch from danixu86 to indifferentbroccoli/projectzomboid-server-docker which provides built-in RCON (rcon-cli), graceful shutdown via RCON save+quit, automatic SteamCMD updates on start, and container health checks. - Split storage: zomboid-data (config+saves, daily backup) + zomboid-server-files (game install, no backup) - Updated env vars to match new image conventions (PUID/PGID, SERVER_NAME, SERVER_BRANCH, etc.) - Keep GENERATE_SETTINGS=false to preserve custom vanillax.ini via ConfigMap - initContainer copies config to /project-zomboid-config/Server/ https://claude.ai/code/session_01FNYCPSa4yr9KkHZJ4fST38 * Update OpenWolf tracking files https://claude.ai/code/session_01FNYCPSa4yr9KkHZJ4fST38 * Add Kubernetes probes and graceful shutdown for zomboid - startupProbe: 10min window (30s delay + 60x10s) for SteamCMD download + world gen - livenessProbe: pgrep ProjectZomboid every 30s (mirrors Docker HEALTHCHECK) - terminationGracePeriodSeconds: 120s for RCON save+quit on large worlds Without these, K8s kills the pod during first boot before the game downloads, and Docker HEALTHCHECKs are ignored by Kubernetes. https://claude.ai/code/session_01FNYCPSa4yr9KkHZJ4fST38 * Update OpenWolf tracking files https://claude.ai/code/session_01FNYCPSa4yr9KkHZJ4fST38 * Update OpenWolf tracking files https://claude.ai/code/session_01FNYCPSa4yr9KkHZJ4fST38 --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 8bfb299 commit 1130723

8 files changed

Lines changed: 179 additions & 79 deletions

File tree

.wolf/anatomy.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# anatomy.md
22

3-
> Auto-maintained by OpenWolf. Last scanned: 2026-04-07T04:10:10.194Z
4-
> Files: 509 tracked | Anatomy hits: 0 | Misses: 0
3+
> Auto-maintained by OpenWolf. Last scanned: 2026-04-07T20:47:49.679Z
4+
> Files: 511 tracked | Anatomy hits: 0 | Misses: 0
55
66
## ./
77

@@ -843,4 +843,6 @@
843843

844844
## my-apps/home/project-zomboid/
845845

846-
- `deployment.yaml` — K8s Deployment (~894 tok)
846+
- `deployment.yaml` — K8s Deployment (~1207 tok)
847+
- `pvc.yaml` — K8s PersistentVolumeClaim (~155 tok)
848+
- `README.md` — Project documentation (~495 tok)

.wolf/buglog.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,22 @@
6464
"related_bugs": [],
6565
"occurrences": 1,
6666
"last_seen": "2026-04-06T20:15:55.859Z"
67+
},
68+
{
69+
"id": "bug-005",
70+
"timestamp": "2026-04-07T20:47:44.914Z",
71+
"error_message": "Wrong reference: initContainers should be terminationGracePeriodSeconds",
72+
"file": "my-apps/home/project-zomboid/deployment.yaml",
73+
"root_cause": "Used \"initContainers\" instead of \"terminationGracePeriodSeconds\"",
74+
"fix": "Changed initContainers → terminationGracePeriodSeconds",
75+
"tags": [
76+
"auto-detected",
77+
"wrong-reference",
78+
"yaml"
79+
],
80+
"related_bugs": [],
81+
"occurrences": 1,
82+
"last_seen": "2026-04-07T20:47:44.914Z"
6783
}
6884
]
6985
}

.wolf/hooks/_session.json

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,11 @@
11
{
2-
"session_id": "session-2026-04-07-2338",
3-
"started": "2026-04-07T03:38:18.624Z",
4-
"files_read": {
5-
"/home/vanillax/programming/talos-argocd-proxmox/my-apps/home/project-zomboid/vanillax.ini": {
6-
"count": 1,
7-
"tokens": 0,
8-
"first_read": "2026-04-07T03:42:16.441Z"
9-
},
10-
"/home/vanillax/Downloads/zomboid2.log": {
11-
"count": 1,
12-
"tokens": 0,
13-
"first_read": "2026-04-07T04:07:10.999Z"
14-
},
15-
"/home/vanillax/programming/talos-argocd-proxmox/my-apps/home/project-zomboid/deployment.yaml": {
16-
"count": 1,
17-
"tokens": 0,
18-
"first_read": "2026-04-07T04:07:35.106Z"
19-
}
20-
},
21-
"files_written": [
22-
{
23-
"file": "/home/vanillax/programming/talos-argocd-proxmox/my-apps/home/project-zomboid/vanillax.ini",
24-
"action": "create",
25-
"tokens": 4310,
26-
"at": "2026-04-07T03:44:14.966Z"
27-
},
28-
{
29-
"file": "/home/vanillax/programming/talos-argocd-proxmox/my-apps/home/project-zomboid/deployment.yaml",
30-
"action": "edit",
31-
"tokens": 121,
32-
"at": "2026-04-07T04:10:10.202Z"
33-
}
34-
],
35-
"edit_counts": {
36-
"my-apps/home/project-zomboid/vanillax.ini": 1,
37-
"my-apps/home/project-zomboid/deployment.yaml": 1
38-
},
2+
"session_id": "session-2026-04-07-2057",
3+
"started": "2026-04-07T20:57:59.467Z",
4+
"files_read": {},
5+
"files_written": [],
6+
"edit_counts": {},
397
"anatomy_hits": 0,
40-
"anatomy_misses": 3,
8+
"anatomy_misses": 0,
419
"repeated_reads_warned": 0,
4210
"cerebrum_warnings": 0,
4311
"stop_count": 3

.wolf/memory.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
> Chronological action log. Hooks and AI append to this file automatically.
44
> Old sessions are consolidated by the daemon weekly.
55
6+
| Time | Description | File(s) | Outcome | ~Tokens |
7+
|------|-------------|---------|---------|---------|
8+
| 2026-04-07 | Migrated Project Zomboid from danixu86 to indifferentbroccoli image | deployment.yaml, pvc.yaml, README.md | Committed + pushed to claude/update-zomboid-deployment-zo2qC | ~3000 |
9+
610
## Session: 2026-04-05 01:29
711

812
| Time | Action | File(s) | Outcome | ~Tokens |
@@ -97,3 +101,24 @@
97101
| 23:45 | Session end: 1 writes across 1 files (vanillax.ini) | 1 reads | ~4310 tok |
98102
| 00:10 | Edited my-apps/home/project-zomboid/deployment.yaml | 2→6 lines | ~121 |
99103
| 00:10 | Session end: 2 writes across 2 files (vanillax.ini, deployment.yaml) | 3 reads | ~4431 tok |
104+
105+
## Session: 2026-04-07 20:26
106+
107+
| Time | Action | File(s) | Outcome | ~Tokens |
108+
|------|--------|---------|---------|--------|
109+
| 20:29 | Created my-apps/home/project-zomboid/deployment.yaml || ~1067 |
110+
| 20:29 | Created my-apps/home/project-zomboid/pvc.yaml || ~155 |
111+
| 20:29 | Created my-apps/home/project-zomboid/README.md || ~528 |
112+
113+
## Session: 2026-04-07 20:46
114+
115+
| Time | Action | File(s) | Outcome | ~Tokens |
116+
|------|--------|---------|---------|--------|
117+
| 20:47 | Edited my-apps/home/project-zomboid/deployment.yaml | 2→3 lines | ~21 |
118+
| 20:47 | Edited my-apps/home/project-zomboid/deployment.yaml | expanded (+17 lines) | ~186 |
119+
| 20:48 | Session end: 2 writes across 1 files (deployment.yaml) | 1 reads | ~1274 tok |
120+
121+
## Session: 2026-04-07 20:57
122+
123+
| Time | Action | File(s) | Outcome | ~Tokens |
124+
|------|--------|---------|---------|--------|

.wolf/token-ledger.json

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
"version": 1,
33
"created_at": "2026-04-05T03:39:06.883Z",
44
"lifetime": {
5-
"total_tokens_estimated": 78347,
6-
"total_reads": 143,
7-
"total_writes": 364,
8-
"total_sessions": 6,
9-
"anatomy_hits": 79,
5+
"total_tokens_estimated": 79621,
6+
"total_reads": 144,
7+
"total_writes": 366,
8+
"total_sessions": 9,
9+
"anatomy_hits": 80,
1010
"anatomy_misses": 64,
1111
"repeated_reads_blocked": 10,
12-
"estimated_savings_vs_bare_cli": 17164
12+
"estimated_savings_vs_bare_cli": 17364
1313
},
1414
"sessions": [
1515
{
@@ -3366,6 +3366,39 @@
33663366
"repeated_reads_blocked": 0,
33673367
"anatomy_lookups": 0
33683368
}
3369+
},
3370+
{
3371+
"id": "session-2026-04-07-2046",
3372+
"started": "2026-04-07T20:46:53.116Z",
3373+
"ended": "2026-04-07T20:48:05.472Z",
3374+
"reads": [
3375+
{
3376+
"file": "/home/user/talos-argocd-proxmox/my-apps/home/project-zomboid/deployment.yaml",
3377+
"tokens_estimated": 1067,
3378+
"was_repeated": false,
3379+
"anatomy_had_description": false
3380+
}
3381+
],
3382+
"writes": [
3383+
{
3384+
"file": "/home/user/talos-argocd-proxmox/my-apps/home/project-zomboid/deployment.yaml",
3385+
"tokens_estimated": 21,
3386+
"action": "edit"
3387+
},
3388+
{
3389+
"file": "/home/user/talos-argocd-proxmox/my-apps/home/project-zomboid/deployment.yaml",
3390+
"tokens_estimated": 186,
3391+
"action": "edit"
3392+
}
3393+
],
3394+
"totals": {
3395+
"input_tokens_estimated": 1067,
3396+
"output_tokens_estimated": 207,
3397+
"reads_count": 1,
3398+
"writes_count": 2,
3399+
"repeated_reads_blocked": 0,
3400+
"anatomy_lookups": 1
3401+
}
33693402
}
33703403
],
33713404
"daemon_usage": [],

my-apps/home/project-zomboid/README.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ From local network, you can also connect via `192.168.10.51:16261`.
1010

1111
## Architecture
1212

13-
- **Image:** `danixu86/project-zomboid-dedicated-server:latest-unstable`
13+
- **Image:** `indifferentbroccoli/projectzomboid-server-docker:latest`
1414
- **Branch:** Build 42 multiplayer (unstable)
1515
- **Service:** LoadBalancer on `192.168.10.51` (UDP 16261-16262, TCP 27015)
16-
- **Storage:** 20Gi Longhorn PVC with daily VolSync backups
16+
- **Storage:**
17+
- `zomboid-data` — 20Gi Longhorn PVC with daily VolSync backups (config + world saves)
18+
- `zomboid-server-files` — 15Gi Longhorn PVC (game installation, no backup — re-downloadable)
1719
- **Memory:** 2-10GB JVM, 12GB container limit
20+
- **Features:** Built-in RCON (rcon-cli), graceful shutdown via RCON, automatic game updates on start, health checks
1821

1922
## Networking
2023

@@ -34,10 +37,15 @@ Item `project-zomboid` in `homelab-prod` vault:
3437
| `server-password` | Password players need to join |
3538
| `rcon-password` | RCON remote admin password |
3639

37-
## First Boot
40+
## Server Config
3841

39-
First boot takes 5-10 minutes as the server loads all B42 assets and generates the world. The `sed` warnings about missing `.ini` are normal on first boot — the file is created after the JVM starts.
42+
Server config is managed via GitOps:
43+
- `vanillax.ini` — main server settings (injected via ConfigMap)
44+
- `vanillax_SandboxVars.lua` — sandbox/gameplay settings (injected via ConfigMap)
45+
- `GENERATE_SETTINGS=false` — prevents the image from overwriting the ini with env var templates
4046

41-
## Server Config
47+
Config files are copied to `/project-zomboid-config/Server/` on each start by an initContainer. The image force-sets `RCONPassword` from the `RCON_PASSWORD` env var.
48+
49+
## First Boot
4250

43-
Server config is stored on the PVC at `/home/steam/Zomboid/Server/VanillaX.ini`. Changes to this file persist across restarts.
51+
First boot takes 5-10 minutes as SteamCMD downloads the game and the server generates the world.

my-apps/home/project-zomboid/deployment.yaml

Lines changed: 59 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,39 @@ spec:
1515
labels:
1616
app: project-zomboid
1717
spec:
18+
terminationGracePeriodSeconds: 120
1819
initContainers:
1920
- name: copy-config
2021
image: busybox
2122
command:
2223
- sh
2324
- -c
2425
- |
25-
mkdir -p /data/Server
26-
cp /config/vanillax.ini /data/Server/vanillax.ini
27-
cp /config/vanillax_SandboxVars.lua /data/Server/vanillax_SandboxVars.lua
28-
echo "Config files copied"
26+
mkdir -p /project-zomboid-config/Server
27+
cp /config/vanillax.ini /project-zomboid-config/Server/vanillax.ini
28+
cp /config/vanillax_SandboxVars.lua /project-zomboid-config/Server/vanillax_SandboxVars.lua
29+
echo "Config files copied to /project-zomboid-config/Server/"
2930
volumeMounts:
30-
- name: data
31-
mountPath: /data
31+
- name: config-data
32+
mountPath: /project-zomboid-config
3233
- name: config
3334
mountPath: /config
3435
containers:
3536
- name: project-zomboid
36-
image: danixu86/project-zomboid-dedicated-server:latest-unstable
37+
image: indifferentbroccoli/projectzomboid-server-docker:latest
3738
env:
38-
- name: SERVERNAME
39+
- name: PUID
40+
value: "1000"
41+
- name: PGID
42+
value: "1000"
43+
- name: SERVER_NAME
3944
value: "vanillax"
40-
- name: ADMINUSERNAME
45+
- name: ADMIN_USERNAME
4146
valueFrom:
4247
secretKeyRef:
4348
name: zomboid-secrets
4449
key: admin-username
45-
- name: ADMINPASSWORD
50+
- name: ADMIN_PASSWORD
4651
valueFrom:
4752
secretKeyRef:
4853
name: zomboid-secrets
@@ -52,26 +57,32 @@ spec:
5257
secretKeyRef:
5358
name: zomboid-secrets
5459
key: server-password
55-
- name: RCONPASSWORD
60+
- name: RCON_PASSWORD
5661
valueFrom:
5762
secretKeyRef:
5863
name: zomboid-secrets
5964
key: rcon-password
60-
- name: STEAMAPPBRANCH
65+
- name: SERVER_BRANCH
6166
value: "unstable"
62-
- name: PUBLIC
63-
value: "true"
64-
- name: DISPLAYNAME
65-
value: "VanillaX Zomboid"
66-
- name: MIN_MEMORY
67-
value: "2048m"
68-
- name: MAX_MEMORY
69-
value: "10240m"
70-
- name: PORT
67+
- name: DEFAULT_PORT
7168
value: "16261"
72-
- name: MOD_IDS
69+
- name: UDP_PORT
70+
value: "16262"
71+
- name: RCON_PORT
72+
value: "27015"
73+
- name: MEMORY_XMX_GB
74+
value: "10"
75+
- name: MEMORY_XMS_GB
76+
value: "2"
77+
- name: UPDATE_ON_START
78+
value: "true"
79+
- name: GENERATE_SETTINGS
80+
value: "false"
81+
- name: STEAM_VAC
82+
value: "true"
83+
- name: MODS
7384
value: "SkillRecoveryJournal;ChuckleberryFinnAlertSystem;errorMagnifier;lgd_antibodies;RealisticDash;ArmorMakesSense;B42Horticulture;ArcheryNexus;PHLockpicking"
74-
- name: WORKSHOP_IDS
85+
- name: WORKSHOP_ITEMS
7586
value: "2503622437;2896041179;3077900375;2392676812;3635591071;3677430162;3650168851;3653092321;3617854007;3687010721"
7687
ports:
7788
- name: game
@@ -83,9 +94,28 @@ spec:
8394
- name: rcon
8495
containerPort: 27015
8596
protocol: TCP
97+
startupProbe:
98+
exec:
99+
command:
100+
- pgrep
101+
- -f
102+
- ProjectZomboid
103+
initialDelaySeconds: 30
104+
periodSeconds: 10
105+
failureThreshold: 60
106+
livenessProbe:
107+
exec:
108+
command:
109+
- pgrep
110+
- -f
111+
- ProjectZomboid
112+
periodSeconds: 30
113+
failureThreshold: 3
86114
volumeMounts:
87-
- name: data
88-
mountPath: /home/steam/Zomboid
115+
- name: server-files
116+
mountPath: /project-zomboid
117+
- name: config-data
118+
mountPath: /project-zomboid-config
89119
resources:
90120
requests:
91121
memory: 2Gi
@@ -94,7 +124,10 @@ spec:
94124
memory: 12Gi
95125
cpu: "4"
96126
volumes:
97-
- name: data
127+
- name: server-files
128+
persistentVolumeClaim:
129+
claimName: zomboid-server-files
130+
- name: config-data
98131
persistentVolumeClaim:
99132
claimName: zomboid-data
100133
- name: config

my-apps/home/project-zomboid/pvc.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,18 @@ spec:
1313
requests:
1414
storage: 20Gi
1515
storageClassName: longhorn
16+
---
17+
apiVersion: v1
18+
kind: PersistentVolumeClaim
19+
metadata:
20+
name: zomboid-server-files
21+
namespace: project-zomboid
22+
labels:
23+
app: project-zomboid
24+
spec:
25+
accessModes:
26+
- ReadWriteOnce
27+
resources:
28+
requests:
29+
storage: 15Gi
30+
storageClassName: longhorn

0 commit comments

Comments
 (0)