41 lines
1.6 KiB
Docker
41 lines
1.6 KiB
Docker
# ─────────────────────────────────────────────────────────────────────────────
|
|
# 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"]
|