40227-vm/Dockerfile.dev
2026-06-10 18:27:19 +02:00

53 lines
2.1 KiB
Docker

# Staging replica of the VM: production builds of both frontend and backend,
# NODE_ENV=dev_stage (verbose logging + source maps for debuggability), behind
# nginx — exactly like the deployed VM. nginx (8080) routes `/` to the frontend
# (vite preview, 3001) and `/api` to the backend (compiled, 3000 in dev_stage).
# dev_stage forces secure cookies, so run this behind HTTPS (e.g. a tunnel).
# --- Frontend build (production) ---
FROM node:24-alpine AS frontend-builder
RUN apk add --no-cache git
WORKDIR /app/frontend
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend .
RUN npm run build
# --- Backend build (TypeScript -> dist; bcrypt compiles natively) ---
FROM node:24-alpine AS backend-builder
RUN apk add --no-cache python3 make g++
WORKDIR /app/backend
COPY backend/package.json backend/package-lock.json ./
RUN npm ci
COPY backend .
RUN npm run build && npm prune --omit=dev
# --- Runtime: nginx + compiled backend (3000) + frontend prod preview (3001) ---
FROM node:24-alpine
RUN apk add --no-cache nginx
ENV NODE_ENV=dev_stage
ENV FRONT_PORT=3001
# Backend: compiled output + production-only deps (no native recompile here).
WORKDIR /app/backend
COPY --from=backend-builder /app/backend/node_modules ./node_modules
COPY --from=backend-builder /app/backend/dist ./dist
COPY --from=backend-builder /app/backend/package.json ./package.json
# Frontend: built assets + deps/config needed to serve them via `vite preview`.
WORKDIR /app/frontend
COPY --from=frontend-builder /app/frontend/node_modules ./node_modules
COPY --from=frontend-builder /app/frontend/dist ./dist
COPY --from=frontend-builder /app/frontend/package.json ./package.json
COPY --from=frontend-builder /app/frontend/vite.config.ts ./vite.config.ts
COPY nginx.conf /etc/nginx/nginx.conf
COPY 502.html /usr/share/nginx/html/502.html
RUN chown nginx:nginx /usr/share/nginx/html/502.html && \
chmod 644 /usr/share/nginx/html/502.html
EXPOSE 8080
# Backend (migrate + seed + serve on 3000), frontend preview (3001), nginx (8080).
CMD ["sh", "-c", "(cd /app/backend && npm run start:production) & (cd /app/frontend && npm run start) & nginx -g 'daemon off;'"]