diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..fc78615 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,11 @@ +# Frontend .dockerignore +node_modules/ +.git/ +.gitignore +*.md +.vscode/ +.idea/ +dist/ +.env +.env.local +*.log diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..d06da24 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,42 @@ +# Frontend Dockerfile for Cosmo (Multi-stage build) + +# Stage 1: Build +FROM node:22-alpine AS builder + +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm install + +# Copy source code +COPY . . + +# Build argument for API URL +ARG VITE_API_BASE_URL=http://localhost/api +ENV VITE_API_BASE_URL=$VITE_API_BASE_URL + +# Build the application +RUN npm run build + +# Stage 2: Production with Nginx +FROM nginx:1.25-alpine + +# Copy built files from builder +COPY --from=builder /app/dist /usr/share/nginx/html + +# Copy nginx configuration (will be mounted from host) +# RUN rm /etc/nginx/nginx.conf +# COPY nginx.conf /etc/nginx/nginx.conf + +# Expose port +EXPOSE 80 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --retries=3 \ + CMD wget --quiet --tries=1 --spider http://localhost/ || exit 1 + +# Start nginx +CMD ["nginx", "-g", "daemon off;"]