OSVauco/opax-web/Dockerfile

51 lines
1.4 KiB
Docker

# === 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"]