68 lines
1.6 KiB
Docker
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"]
|