# Shattered Void MMO - backend (Express + WebSocket) # bookworm-slim rather than alpine: bcrypt ships glibc prebuilds, musl would force a source build. FROM node:20-bookworm-slim AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci FROM node:20-bookworm-slim AS runtime WORKDIR /app RUN apt-get update \ && apt-get install -y --no-install-recommends curl \ && rm -rf /var/lib/apt/lists/* COPY --from=deps /app/node_modules ./node_modules COPY . . # winston-daily-rotate-file writes here but does not create the directory itself RUN mkdir -p logs && chown -R node:node /app USER node EXPOSE 3000 HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=5 \ CMD curl -fsS http://localhost:3000/health || exit 1 CMD ["node", "src/server.js"]