582b5a6b08
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
72 lines
3.1 KiB
Docker
72 lines
3.1 KiB
Docker
# 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"]
|