# Build stage FROM node:22-alpine AS builder WORKDIR /app # Accept build arguments for VITE environment variables ARG VITE_DEMO_MODE=false ARG VITE_API_URL=http://localhost:8080 # Copy package files COPY frontend/package*.json ./frontend/ RUN cd frontend && npm install --include=dev # Copy frontend source code only COPY frontend/ ./frontend/ # Create a .env.production file with build arguments RUN cd frontend && echo "VITE_DEMO_MODE=${VITE_DEMO_MODE}" >> .env.production && \ echo "VITE_API_URL=${VITE_API_URL}" >> .env.production # Build the application (frontend only) RUN cd frontend && npm run build # Production stage FROM nginx:alpine # Copy built assets from builder stage COPY --from=builder /app/frontend/dist /usr/share/nginx/html # Fallback branding assets from repo root for clean-clone builds COPY trackeep.svg /usr/share/nginx/html/trackeep.svg COPY trackeepfavi.png /usr/share/nginx/html/trackeepfavi.png COPY trackeepfavi_bg.png /usr/share/nginx/html/trackeepfavi_bg.png # Copy the entrypoint script COPY frontend/docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh # Copy nginx configuration COPY frontend/nginx.conf /etc/nginx/nginx.conf # Make a backup of the original index.html for runtime substitution RUN cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # Expose port (will be dynamically set by entrypoint) EXPOSE 80 # Start the entrypoint script ENTRYPOINT ["/docker-entrypoint.sh"]