43 lines
1.6 KiB
Docker
43 lines
1.6 KiB
Docker
# ── Stage 1 : build ──────────────────────────────────────────────────────────
|
|
FROM node:20-alpine AS builder
|
|
WORKDIR /workspace
|
|
|
|
RUN corepack enable && corepack prepare pnpm@9.12.0 --activate
|
|
|
|
# package.json seuls d'abord (layer cache pnpm install)
|
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
|
|
COPY apps/api/package.json apps/api/
|
|
COPY packages/shared/package.json packages/shared/
|
|
COPY packages/db/package.json packages/db/
|
|
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
# Sources complètes
|
|
COPY . .
|
|
|
|
# Build dans l'ordre des dépendances
|
|
RUN pnpm --filter @ordinarthur-os/shared build
|
|
RUN pnpm --filter @ordinarthur-os/db build
|
|
RUN pnpm --filter @ordinarthur-os/api build
|
|
|
|
# Deploy propre : pnpm résout les workspace packages compilés vers /deploy/api
|
|
RUN pnpm --filter @ordinarthur-os/api deploy --prod /deploy/api
|
|
|
|
# ── Stage 2 : runtime ────────────────────────────────────────────────────────
|
|
FROM node:20-alpine AS runtime
|
|
WORKDIR /app
|
|
ENV NODE_ENV=production
|
|
|
|
# Deps de prod isolées (inclut @ordinarthur-os/shared+db compilés)
|
|
COPY --from=builder /deploy/api/node_modules ./node_modules
|
|
COPY --from=builder /deploy/api/package.json ./
|
|
|
|
# Code compilé de l'API
|
|
COPY --from=builder /workspace/apps/api/dist ./dist
|
|
|
|
# Migrations SQL (pour le job K3s migrate)
|
|
COPY --from=builder /workspace/packages/db/migrations ./packages/db/migrations
|
|
|
|
EXPOSE 3000
|
|
CMD ["node", "dist/main.js"]
|