mirror of
https://github.com/IliesAllali/parenthese.git
synced 2026-11-08 15:42:42 +00:00
Utilisateurs - Suppression de compte depuis l'écran « Votre compte », confirmée par mot de passe : arbres possédés et médias effacés, email retiré des contributions, sessions fermées partout. - Suppression d'arbre définitive, en base et sur le disque. - Ajout d'un frère ou d'une sœur relié aux parents existants ; relations parent et enfant corrigées en mode démo. - Liste d'attente retirée (route, envoi d'emails, dépendance Resend). Projet ouvert - CI : front, landing, backend avec vérification des migrations, test Docker de bout en bout. - Déploiement lancé seulement après une CI réussie sur main. - Image API : CLI Prisma installée à part pour que les migrations tournent au démarrage. - SECURITY.md, CONTRIBUTING.md, modèles d'issue et de pull request. - Migration renommée avec un nom descriptif, contenu identique. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
68 lines
2.3 KiB
Docker
68 lines
2.3 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# API Parenthèse (Fastify + Prisma). Contexte de build : le dossier backend/.
|
|
# Étape 1 : dépendances complètes, client Prisma, compilation TypeScript.
|
|
# Étape 2 : image finale avec les seules dépendances de production, plus la CLI Prisma
|
|
# installée à part (nécessaire à `prisma migrate deploy` au démarrage).
|
|
|
|
FROM node:24-bookworm-slim AS build
|
|
|
|
# openssl : requis par les moteurs Prisma (cible debian-openssl-3.0.x).
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends openssl ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package.json package-lock.json ./
|
|
COPY prisma ./prisma
|
|
RUN npm ci --no-audit --no-fund
|
|
RUN npx prisma generate
|
|
|
|
COPY tsconfig.json ./
|
|
COPY src ./src
|
|
RUN npm run build
|
|
|
|
|
|
FROM node:24-bookworm-slim AS runtime
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends openssl ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
# Dépendances de production seules.
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci --omit=dev --no-audit --no-fund \
|
|
&& npm cache clean --force
|
|
|
|
# CLI Prisma : c'est une devDependency, donc absente de l'installation précédente. Elle est installée
|
|
# dans un dossier séparé, à la version exacte du package-lock, pour ne pas toucher à node_modules
|
|
# (un `npm install --omit=dev prisma` dans /app l'ignorerait, puisqu'elle est déclarée en dev).
|
|
RUN PRISMA_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/prisma'].version")" \
|
|
&& mkdir -p /opt/prisma \
|
|
&& cd /opt/prisma \
|
|
&& echo '{"private":true}' > package.json \
|
|
&& npm install --no-audit --no-fund "prisma@${PRISMA_VERSION}" \
|
|
&& npm cache clean --force
|
|
|
|
# Client Prisma généré à l'étape 1 (même image de base, même cible de moteur).
|
|
COPY --from=build /app/node_modules/.prisma ./node_modules/.prisma
|
|
# Schéma + migrations : indispensables à `prisma migrate deploy`.
|
|
COPY prisma ./prisma
|
|
COPY --from=build /app/dist ./dist
|
|
|
|
RUN mkdir -p /app/storage/media && chown -R node:node /app/storage
|
|
|
|
ENV NODE_ENV=production \
|
|
PORT=4000 \
|
|
MEDIA_STORAGE_PATH=/app/storage/media \
|
|
CHECKPOINT_DISABLE=1 \
|
|
PATH=/opt/prisma/node_modules/.bin:$PATH
|
|
|
|
USER node
|
|
EXPOSE 4000
|
|
|
|
# Applique les migrations en attente puis démarre l'API.
|
|
CMD ["sh", "-c", "prisma migrate deploy && exec node dist/server.js"]
|