panel public release

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 01:13:02 -07:00
commit 8a94ffd58f
2165 changed files with 301493 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
# panel-native 7 Days to Die runtime image.
#
# Unlike third-party images (vinanrra/LGSM, didstopia, etc.), this image does
# ONE thing: run a 7DTD dedicated server. Download + validate is handled by
# the panel's SteamCMD updater sidecar, which writes into the same Docker
# volume we mount read/write here. No LGSM, no tmux, no GitHub-fetch on
# start, no backup-before-start "surprises" — just the game.
#
# Expected runtime layout inside the container:
# /game — SteamCMD-installed 7DTD binaries (panel volume)
# /game-saves — save + config data (panel volume)
# /entrypoint.sh — this image's entrypoint (renders serverconfig.xml and
# execs the game with stdout/stderr unbuffered)
FROM debian:12-slim
ENV DEBIAN_FRONTEND=noninteractive \
TZ=Etc/UTC \
LANG=en_US.UTF-8 \
LC_ALL=en_US.UTF-8
# Runtime deps 7DTD's Linux build needs. lib32* for the 32-bit Steam bits,
# libxi/libxrandr for the server's Unity runtime probes, ca-certs so any
# outbound HTTPS (analytics, steam auth) resolves.
RUN dpkg --add-architecture i386 \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
locales \
tini \
lib32gcc-s1 \
lib32stdc++6 \
libc6:i386 \
python3-minimal \
&& sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
&& locale-gen \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Unprivileged user that owns /game. The updater sidecar writes as root, so
# at start time we chown once to panel (cheap since SteamCMD leaves a known
# set of files). This keeps the long-running game process non-root.
RUN groupadd -g 1000 panel \
&& useradd -u 1000 -g 1000 -m -s /bin/bash panel \
&& mkdir -p /game /game-saves \
&& chown -R panel:panel /game /game-saves
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Vendored nim-tools: the in-container decoration remapper used by the cluster
# auto-provision step in entrypoint.sh. Self-contained (nimtool.read_nim inlined),
# python3-minimal (above) is its only dependency. A new clustered world's native
# decorations are remapped to the cluster canonical here so it loads clean.
COPY nim-freeze/remap_7dt.vendored.py /opt/panel-nimtools/remap_7dt.py
# Panel-owned helper mod — exposes blood-moon status as a JSON file the
# scheduler reads to defer restarts through hordes. Lives in /opt so the
# entrypoint can copy it into /game/Mods/ on every boot (so a steam
# validate or operator overwrite re-seeds it).
COPY mod-source/PanelBloodMoonAgent/bin/Release/net48/PanelBloodMoonAgent.dll /opt/panel-mods/PanelBloodMoonAgent/PanelBloodMoonAgent.dll
COPY mod-source/PanelBloodMoonAgent/ModInfo.xml /opt/panel-mods/PanelBloodMoonAgent/ModInfo.xml
# Game UDP ports — published by the panel manifest at run time.
EXPOSE 26900/udp 26901/udp 26902/udp
# Telnet RCON
EXPOSE 8081/tcp
# tini reaps zombies + forwards signals cleanly so our SIGTERM → graceful stop
# actually lands on the 7DTD process (otherwise docker stop becomes kill -9).
ENTRYPOINT ["/usr/bin/tini", "--", "/entrypoint.sh"]