# Use Node.js base image FROM docker.io/library/node:18-slim # Install pnpm globally RUN npm install -g pnpm && \ pnpm config set fetch-retries 5 && \ pnpm config set fetch-retry-mintimeout 20000 && \ pnpm config set fetch-retry-maxtimeout 120000 # Set working directory WORKDIR /app # Avoid pnpm interactive prompts during container builds ENV CI=true # Copy package files COPY package.json pnpm-lock.yaml ./ COPY .env .env COPY serve.json ./ # Install root dependencies with pnpm RUN pnpm install # Build-time config for Vite (set via docker-compose build args) ARG VITE_API_BASE ARG VITE_CANVA_CLIENT_ID ARG VITE_CANVA_DEFAULT_DESIGN_TYPE ARG VITE_CANVA_PANEL_URL ARG VITE_AUTH0_DOMAIN ARG VITE_AUTH0_CLIENT_ID ARG VITE_AUTH0_AUDIENCE ARG VITE_AUTH0_REDIRECT_URI ENV VITE_API_BASE=${VITE_API_BASE} ENV VITE_CANVA_CLIENT_ID=${VITE_CANVA_CLIENT_ID} ENV VITE_CANVA_DEFAULT_DESIGN_TYPE=${VITE_CANVA_DEFAULT_DESIGN_TYPE} ENV VITE_CANVA_PANEL_URL=${VITE_CANVA_PANEL_URL} ENV VITE_AUTH0_DOMAIN=${VITE_AUTH0_DOMAIN} ENV VITE_AUTH0_CLIENT_ID=${VITE_AUTH0_CLIENT_ID} ENV VITE_AUTH0_AUDIENCE=${VITE_AUTH0_AUDIENCE} ENV VITE_AUTH0_REDIRECT_URI=${VITE_AUTH0_REDIRECT_URI} # Copy frontend directory COPY frontend/ ./frontend/ # Set working directory to frontend and install frontend dependencies WORKDIR /app/frontend RUN pnpm install # Build the frontend application RUN pnpm build # Install serve to serve the static files RUN npm install -g serve # Change back to main directory to serve the dist folder WORKDIR /app # Expose port EXPOSE 8080 # Serve the application CMD ["serve", "-s", "dist", "-l", "8080"]