chk-intranet/Dockerfile

68 lines
1.6 KiB
Docker

# ============================================================
# Dockerfile — Intranet CHK 2.0
# Build multi-étapes : build React + serve via Node/Express
# ============================================================
# ---- Étape 1 : Build de l'application React ----
FROM node:22-alpine AS builder
# Installer pnpm
RUN npm install -g pnpm@10.4.1
WORKDIR /app
# Copier les fichiers de dépendances
COPY package.json pnpm-lock.yaml ./
COPY patches/ ./patches/
# Installer les dépendances
RUN pnpm install --frozen-lockfile
# Copier le reste du code source
COPY . .
# Variables d'environnement de build (surchargeables via --build-arg)
ARG VITE_APP_TITLE="Intranet CHK — Centre Hospitalier de Kourou"
ARG VITE_APP_ID="chk-intranet"
ENV VITE_APP_TITLE=$VITE_APP_TITLE
ENV VITE_APP_ID=$VITE_APP_ID
# Build de production
RUN pnpm build
# ---- Étape 2 : Image de production légère ----
FROM node:22-alpine AS production
WORKDIR /app
# Installer pnpm
RUN npm install -g pnpm@10.4.1
# Copier uniquement les fichiers nécessaires à l'exécution
COPY package.json pnpm-lock.yaml ./
COPY patches/ ./patches/
RUN pnpm install --frozen-lockfile --prod
# Copier le build et le serveur
COPY --from=builder /app/dist ./dist
COPY server/ ./server/
COPY tsconfig.json tsconfig.node.json ./
# Compiler le serveur Express
RUN pnpm esbuild server/index.ts \
--platform=node \
--packages=external \
--bundle \
--format=esm \
--outdir=dist
# Exposer le port
EXPOSE 3000
# Variables d'environnement de runtime
ENV NODE_ENV=production
ENV PORT=3000
# Démarrer le serveur
CMD ["node", "dist/index.js"]