tfrere HF Staff commited on
Commit
8d7ed3d
·
1 Parent(s): beaac45

fix: use multi-stage Docker build for backend compilation

Browse files

TypeScript is a devDependency, so npx tsc failed when installed
with --omit=dev. Now using a dedicated backend-build stage that
installs all deps, compiles TS, then only the dist/ output is
copied into the final production image.

Made-with: Cursor

Files changed (1) hide show
  1. Dockerfile +16 -4
Dockerfile CHANGED
@@ -1,3 +1,4 @@
 
1
  FROM node:20-slim AS frontend-build
2
 
3
  WORKDIR /app/frontend
@@ -6,6 +7,16 @@ RUN npm install
6
  COPY frontend/ ./
7
  RUN npm run build
8
 
 
 
 
 
 
 
 
 
 
 
9
  FROM node:20-slim
10
 
11
  RUN apt-get update && apt-get install -y --no-install-recommends \
@@ -33,15 +44,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
33
  && rm -rf /var/lib/apt/lists/*
34
 
35
  WORKDIR /app
 
 
36
  COPY backend/package.json backend/package-lock.json* ./
37
  RUN npm install --omit=dev
 
38
 
39
- # Install Playwright Chromium (optional, controlled by ENABLE_PDF)
40
  RUN npx playwright install chromium || echo "Playwright install skipped"
41
 
42
- COPY backend/ ./
43
- RUN npx tsc
44
-
45
  COPY --from=frontend-build /app/frontend/dist ./frontend-dist
46
 
47
  # Copy CSS source files for the HTML renderer
 
1
+ # --- Stage 1: Build frontend ---
2
  FROM node:20-slim AS frontend-build
3
 
4
  WORKDIR /app/frontend
 
7
  COPY frontend/ ./
8
  RUN npm run build
9
 
10
+ # --- Stage 2: Build backend ---
11
+ FROM node:20-slim AS backend-build
12
+
13
+ WORKDIR /app
14
+ COPY backend/package.json backend/package-lock.json* ./
15
+ RUN npm install
16
+ COPY backend/ ./
17
+ RUN npx tsc
18
+
19
+ # --- Stage 3: Production image ---
20
  FROM node:20-slim
21
 
22
  RUN apt-get update && apt-get install -y --no-install-recommends \
 
44
  && rm -rf /var/lib/apt/lists/*
45
 
46
  WORKDIR /app
47
+
48
+ # Copy compiled backend + prod dependencies
49
  COPY backend/package.json backend/package-lock.json* ./
50
  RUN npm install --omit=dev
51
+ COPY --from=backend-build /app/dist ./dist
52
 
53
+ # Install Playwright Chromium
54
  RUN npx playwright install chromium || echo "Playwright install skipped"
55
 
56
+ # Copy frontend build
 
 
57
  COPY --from=frontend-build /app/frontend/dist ./frontend-dist
58
 
59
  # Copy CSS source files for the HTML renderer