refactor: update Dockerfile stages for improved build process and add converter dependency
This commit is contained in:
+30
-5
@@ -274,7 +274,11 @@ Flöde i Next.js:
|
|||||||
|
|
||||||
### Docker-bygget
|
### 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
|
```dockerfile
|
||||||
# Stage 1: Bygg converter-biblioteket
|
# Stage 1: Bygg converter-biblioteket
|
||||||
@@ -286,13 +290,34 @@ COPY recipe-document-converter/src ./src
|
|||||||
COPY recipe-document-converter/tsconfig.json ./
|
COPY recipe-document-converter/tsconfig.json ./
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Stage 2: Installera backend-beroenden (converter kopieras in)
|
# Stage 2: Bygg applikationen
|
||||||
FROM node:22-alpine AS deps
|
FROM node:22-alpine AS builder
|
||||||
WORKDIR /app
|
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:
|
Bygga om backend efter ändringar:
|
||||||
```bash
|
```bash
|
||||||
docker compose build recipe-api
|
docker compose build recipe-api
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"prisma:deploy": "prisma migrate deploy"
|
"prisma:deploy": "prisma migrate deploy"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"recipe-document-converter": "file:../recipe-document-converter",
|
||||||
"@nestjs/common": "^10.3.0",
|
"@nestjs/common": "^10.3.0",
|
||||||
"@nestjs/core": "^10.3.0",
|
"@nestjs/core": "^10.3.0",
|
||||||
"@nestjs/platform-express": "^10.3.0",
|
"@nestjs/platform-express": "^10.3.0",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ RUN npm run build
|
|||||||
FROM node:22-alpine AS runner
|
FROM node:22-alpine AS runner
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
ENV HOSTNAME=0.0.0.0
|
||||||
|
|
||||||
COPY --from=builder /app/.next/standalone ./
|
COPY --from=builder /app/.next/standalone ./
|
||||||
COPY --from=builder /app/.next/static ./.next/static
|
COPY --from=builder /app/.next/static ./.next/static
|
||||||
|
|||||||
Reference in New Issue
Block a user