64 lines
2.1 KiB
Docker
64 lines
2.1 KiB
Docker
# Multi-stage build for the acc-server-manager Go backend.
|
|
# CGO_ENABLED=1 is required for mattn/go-sqlite3 (uses cgo).
|
|
# The binary is compiled for Linux (Docker mode default).
|
|
|
|
# ─── Builder ──────────────────────────────────────────────────────────────────
|
|
FROM golang:1.25-bookworm AS builder
|
|
|
|
WORKDIR /build
|
|
|
|
# Install build dependencies for CGO + sqlite3.
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
gcc \
|
|
libc6-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Download Go modules first (layer cache).
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
|
|
# Copy source and build.
|
|
COPY . .
|
|
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
|
|
go build -ldflags="-s -w" -o /acc-server-manager ./cmd/api
|
|
|
|
# ─── Runtime ──────────────────────────────────────────────────────────────────
|
|
FROM debian:bookworm-slim AS runtime
|
|
|
|
# Install runtime dependencies and SteamCMD.
|
|
# steamcmd is not in the standard Debian repo — download directly from Valve.
|
|
RUN dpkg --add-architecture i386 && \
|
|
apt-get update && \
|
|
apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
curl \
|
|
lib32gcc-s1 \
|
|
&& \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN mkdir -p /usr/games && \
|
|
curl -sSL --retry 3 --retry-delay 5 \
|
|
-o /tmp/steamcmd.tar.gz \
|
|
"https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" && \
|
|
tar -xzf /tmp/steamcmd.tar.gz -C /usr/games && \
|
|
rm /tmp/steamcmd.tar.gz && \
|
|
chmod +x /usr/games/steamcmd.sh && \
|
|
ln -sf /usr/games/steamcmd.sh /usr/games/steamcmd
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=builder /acc-server-manager /app/acc-server-manager
|
|
|
|
# Persistent data directories.
|
|
RUN mkdir -p /data/servers /data/db
|
|
|
|
ENV PLATFORM=docker
|
|
ENV PORT=3000
|
|
ENV DB_NAME=/data/db/acc.db
|
|
ENV STEAMCMD_LINUX_PATH=/usr/games/steamcmd
|
|
ENV ACC_SERVERS_PATH=/data/servers
|
|
|
|
EXPOSE 3000
|
|
|
|
ENTRYPOINT ["/app/acc-server-manager"]
|