mkcart / Dockerfile
Kumar
updated
c2efbe6
# Multi-stage Dockerfile for MKCart Fullstack App
# Optimized for Hugging Face Spaces
# Stage 1: Build Frontend
FROM node:20-alpine AS frontend-builder
WORKDIR /app/frontend
# Copy package files first for better caching
COPY frontend/package*.json ./
RUN npm install
# Copy source and build
COPY frontend/ ./
# Set REACT_APP_API_URL to empty to use relative paths (serving from same origin)
ENV REACT_APP_API_URL=""
RUN npm run build
# Stage 2: Final Runner
FROM node:20-alpine
WORKDIR /app
# Install backend dependencies
COPY backend/package*.json ./backend/
WORKDIR /app/backend
RUN npm install --production
# Copy backend source
COPY backend/ ./
# Copy built frontend from Stage 1
# Backend expects it at ../frontend/build
COPY --from=frontend-builder /app/frontend/build /app/frontend/build
# Environment configuration
ENV NODE_ENV=production
ENV PORT=7860
# HF Spaces expects the app to be reachable on port 7860
EXPOSE 7860
# Health check (optional but good for HF)
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget --quiet --tries=1 --spider http://localhost:7860/api/products || exit 1
# Start the application
CMD ["node", "app.js"]