From 5c5177432def8b3aa6371da188f881896b24a544 Mon Sep 17 00:00:00 2001 From: Nils-Johan Gynther Date: Sat, 11 Apr 2026 17:43:34 +0200 Subject: [PATCH] refactor: update Dockerfile stages for improved build process and add converter dependency --- TEKNISK_BESKRIVNING.md | 35 ++++++++++++++++++++++++++++++----- backend/package.json | 1 + frontend/Dockerfile | 1 + 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/TEKNISK_BESKRIVNING.md b/TEKNISK_BESKRIVNING.md index fce000d2..19574a9b 100644 --- a/TEKNISK_BESKRIVNING.md +++ b/TEKNISK_BESKRIVNING.md @@ -274,7 +274,11 @@ Flöde i Next.js: ### Docker-bygget -Backend-Dockerfilen använder nu projektets rot (`.`) som byggkontext. Converter-biblioteket kompileras i en separat stage: +Backend-Dockerfilen använder projektets rot (`.`) som byggkontext. Bygget sker i tre steg: + +1. **converter-build** — Kompilerar `recipe-document-converter` till JavaScript + typdeklarationer +2. **builder** — Installerar backend-beroenden, kopierar in den kompilerade convertern till `node_modules/`, genererar Prisma-klient och bygger NestJS-appen +3. **runner** — Minimal produktionsimage med enbart `dist/`, `node_modules/` och `prisma/` ```dockerfile # Stage 1: Bygg converter-biblioteket @@ -286,13 +290,34 @@ COPY recipe-document-converter/src ./src COPY recipe-document-converter/tsconfig.json ./ RUN npm run build -# Stage 2: Installera backend-beroenden (converter kopieras in) -FROM node:22-alpine AS deps +# Stage 2: Bygg applikationen +FROM node:22-alpine AS builder WORKDIR /app -COPY --from=converter-build /converter /recipe-document-converter -... +COPY backend/package.json ./ +COPY backend/prisma ./prisma +COPY backend/src ./src +COPY backend/tsconfig.json ./ +COPY backend/nest-cli.json ./ +RUN npm install +# Kopiera in det kompilerade converter-biblioteket efter npm install +COPY --from=converter-build /converter ./node_modules/recipe-document-converter +RUN npx prisma generate +RUN npm run build + +# Stage 3: Kör applikationen +FROM node:22-alpine AS runner +WORKDIR /app +ENV NODE_ENV=production +COPY --from=builder /app/package.json ./package.json +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/prisma ./prisma +COPY --from=builder /app/dist ./dist +EXPOSE 8080 +CMD ["node", "dist/main"] ``` +> **OBS:** `backend/package.json` har `"recipe-document-converter": "file:../recipe-document-converter"` för lokal utveckling. I Docker-bygget ignoreras den file-referensen — convertern kopieras in manuellt från converter-build-steget. + Bygga om backend efter ändringar: ```bash docker compose build recipe-api diff --git a/backend/package.json b/backend/package.json index b7ac7a32..651b87f5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,6 +11,7 @@ "prisma:deploy": "prisma migrate deploy" }, "dependencies": { + "recipe-document-converter": "file:../recipe-document-converter", "@nestjs/common": "^10.3.0", "@nestjs/core": "^10.3.0", "@nestjs/platform-express": "^10.3.0", diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 07c5786a..7a53ba4f 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -12,6 +12,7 @@ RUN npm run build FROM node:22-alpine AS runner WORKDIR /app ENV NODE_ENV=production +ENV HOSTNAME=0.0.0.0 COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static