FROM golang:1.25-alpine AS backend WORKDIR /src COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ . RUN CGO_ENABLED=0 go build -o /server ./cmd/server/ FROM node:22-alpine AS frontend WORKDIR /src COPY frontend/package.json frontend/package-lock.json ./ RUN npm ci COPY frontend/ . RUN npm run build FROM alpine:3.21 RUN apk add --no-cache ca-certificates tzdata RUN apk add --no-cache steamcmd libstdc++ libgcc || true COPY --from=backend /server /usr/local/bin/arma3-web-server COPY --from=frontend /src/dist /usr/share/arma3-web-server/frontend EXPOSE 8080 VOLUME ["/data", "/servers"] # Expected mount structure under /servers: # /servers/ ← SERVERFILE_DIR (arma3server_x64 binary, userconfig/) # /servers/steamapps/workshop/content/107410/ ← workshop mods (downloaded via SteamCMD) # /servers/mods/ ← MODS_DIR (@modname mod folders) # /servers/cfg/ ← CFG_DIR (.cfg files) # /servers/profiles/ ← PROFILES_DIR (logs, .rpt, server profile) ENV DATA_DIR=/data ENV SERVERFILE_DIR=/servers ENV MODS_DIR=/servers/mods ENV CFG_DIR=/servers/cfg ENV PROFILES_DIR=/servers/profiles ENV LISTEN=:8080 ENV FRONTEND_DIR=/usr/share/arma3-web-server/frontend ENV GIN_MODE=release ENTRYPOINT ["arma3-web-server"]