# ───────────────────────────────────────────────────────────────────────────── # REBOUR — Dockerfile # Runtime : Bun + Elysia (pas de SSR, le HTML est statique dans public/) # Stratégie : multi-stage pour image finale la plus légère possible # ───────────────────────────────────────────────────────────────────────────── # ── Stage 1 : installation des dépendances ──────────────────────────────────── FROM oven/bun:1.3-alpine AS deps WORKDIR /app COPY package.json bun.lock ./ RUN bun install --frozen-lockfile --production # ── Stage 2 : image de production ───────────────────────────────────────────── FROM oven/bun:1.3-alpine AS runner WORKDIR /app # Dépendances uniquement runtime COPY --from=deps /app/node_modules ./node_modules # Code serveur COPY server.ts ./ # Fichiers publics (HTML statique + assets + CSS/JS) # Le HTML est pré-écrit, pas de build step nécessaire (pas de SSR/bundler) COPY public/ ./public/ # Utilisateur non-root (sécurité) USER bun EXPOSE 3000 ENV NODE_ENV=production HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget -qO- http://localhost:3000/robots.txt || exit 1 CMD ["bun", "run", "server.ts"]