diff --git a/docker/Dockerfile.nginx b/docker/Dockerfile.nginx new file mode 100644 index 0000000..c6a08cd --- /dev/null +++ b/docker/Dockerfile.nginx @@ -0,0 +1,21 @@ +# Multi-stage build: compile Vue frontend, serve with nginx +# Stage 1: Build the frontend +FROM node:22-alpine AS builder + +WORKDIR /build + +# Cache dependencies — copy manifests first +COPY package.json package-lock.json* ./ +RUN npm install + +# Copy source and build +COPY . . +RUN npm run build + +# Stage 2: Serve with nginx +FROM nginx:alpine + +# Copy built frontend +COPY --from=builder /build/dist /usr/share/nginx/html + +EXPOSE 80 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index f3639bc..10bf820 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.8' - services: postgres: image: postgres:16-alpine @@ -61,13 +59,14 @@ services: - "8088:3000" nginx: - image: nginx:alpine + build: + context: ../frontend + dockerfile: ../docker/Dockerfile.nginx container_name: corrosion-nginx ports: - "8087:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - - ../frontend/dist:/usr/share/nginx/html:ro - map_data:/data/maps:ro depends_on: - api