# === STADIUM 1: BUILD === # Bygger frontend-appen og installerer alle workspace-dependencies for build FROM node:20-slim AS build WORKDIR /app # 1. Kopier kun manifests for å utnytte Docker layer caching COPY package.json package-lock.json ./ COPY frontend/package.json ./frontend/ COPY backend/package.json ./backend/ # 2. Installer ALLE avhengigheter (inkl. dev) basert på lockfilen RUN npm ci # 3. Kopier resten av frontend-kilden og bygg den COPY frontend/ ./frontend/ RUN npm run build --workspace=frontend # === STADIUM 2: RUNTIME === # Bygger et slankt produksjons-image med kun det nødvendigste FROM node:20-slim WORKDIR /app ENV NODE_ENV=production # 1. Kopier kun manifests for en ren produksjonsinstallasjon COPY package.json package-lock.json ./ COPY frontend/package.json ./frontend/ COPY backend/package.json ./backend/ # 2. Installer KUN produksjonsavhengigheter for hele workspacet # --omit=dev skal hindre at frontend dev-dependencies (vite, etc.) installeres RUN npm ci --omit=dev # 3. Kopier backend-kildekoden, eid av non-root 'node'-bruker COPY --chown=node:node backend/ ./backend/ # 4. Kopier det ferdigbygde frontend-resultatet fra BUILD-stadiet COPY --chown=node:node --from=build /app/frontend/dist ./frontend/dist # 5. Bruk non-root bruker for å kjøre applikasjonen USER node # Port-dokumentasjon (Cloud Run vil bruke PORT env var) EXPOSE 8080 # Start backend-serveren CMD ["node", "backend/server.js"]