# ── Build-Stage: TypeScript kompilieren ─────────────────────────── FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --omit=dev && npm ci COPY tsconfig.server.json ./ COPY src/server/ ./src/server/ RUN npx tsc -p tsconfig.server.json # ── Production-Stage: Nur das Nötigste ───────────────────────────── FROM node:20-alpine WORKDIR /app # Runtime-User (nicht root) RUN addgroup -S logviewer && adduser -S logviewer -G logviewer # Nur production dependencies COPY package*.json ./ RUN npm ci --omit=dev && npm cache clean --force # Kompilierte Server-Dateien COPY --from=builder /app/dist-server/ ./dist-server/ # Web-UI (statische Assets) COPY src/web/ ./src/web/ # Persistenz-Volume RUN mkdir -p /app/collector-data /app/monitor-data && \ chown -R logviewer:logviewer /app # Default-CMD (beide Modi aktiv) EXPOSE 8080 ENV HOST=0.0.0.0 PORT=8080 LOG_MODE=both USER logviewer CMD ["node", "dist-server/server.js"] # Mögliche Overrides: # Collector: -e LOG_MODE=collector -e COLLECTOR_UDP_PORT=5140 # Viewer: -e LOG_MODE=viewer -p 9090:9090 # Monitor: -e LOG_MODE=monitor -e MONITOR_RULES='[...]'