# Build stage FROM debian:bookworm-20260623@sha256:30482e873082e906a4908c10529180aefb6f77620aea7404b909829fadc5d168 AS builder RUN apt-get update && apt-get install -y \ build-essential \ cmake \ git \ libcurl4-gnutls-dev \ liblzma-dev \ liblzo2-dev \ libpng-dev \ libzstd-dev \ zlib1g-dev \ pkg-config \ && rm -rf /var/lib/apt/lists/* WORKDIR /src COPY OpenTTD-patches /src/OpenTTD-patches WORKDIR /src/OpenTTD-patches/build RUN cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DOPTION_DEDICATED=ON \ -DOPTION_INSTALL_HTML_DOCS=OFF \ -DOPTION_USE_ASSERTS=OFF \ && make -j$(nproc) install # Runtime stage FROM debian:bookworm-slim RUN apt-get update && apt-get install -y \ libcurl3-gnutls \ liblzma5 \ liblzo2-2 \ libpng16-16 \ libzstd1 \ zlib1g \ ca-certificates \ openttd-opengfx \ && rm -rf /var/lib/apt/lists/* # Copy binaries from builder COPY --from=builder /usr/local/games/openttd /usr/local/bin/openttd COPY --from=builder /usr/local/share/games/openttd /usr/local/share/games/openttd # Ensure base graphics are in a path openttd searches RUN mkdir -p /usr/local/share/games/openttd/baseset && \ cp -r /usr/share/games/openttd/baseset/* /usr/local/share/games/openttd/baseset/ # Create openttd user RUN useradd -m -u 1000 openttd USER openttd WORKDIR /home/openttd # Create config directory RUN mkdir -p /home/openttd/.local/share/openttd/save EXPOSE 3979/tcp 3979/udp 3977/tcp CMD ["openttd", "-D"]