# EcoBot — Discord-Bot + Webinterface # Stage 1: React-Frontend bauen FROM node:22-slim AS frontend WORKDIR /build COPY frontend/package.json frontend/package-lock.json ./ RUN npm ci COPY frontend ./ RUN npm run build # Stage 2: Runtime (slim statt alpine: better-sqlite3 liefert glibc-Prebuilds) FROM node:22-slim # Fonts für die Willkommens-Karten (sharp/librsvg braucht installierte Schriften), # git für die Repo-Backups (git clone --mirror + bundle) RUN apt-get update && apt-get install -y --no-install-recommends fonts-dejavu-core git \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Erst nur Manifest kopieren → Docker-Layer-Cache für npm ci COPY package.json package-lock.json ./ RUN npm ci --omit=dev COPY src ./src COPY --from=frontend /build/dist ./frontend/dist # Laufzeitdaten (SQLite) landen in /app/data → Volume RUN mkdir -p /app/data ENV NODE_ENV=production CMD ["node", "src/index.js"]