Spaces:
Building
Building
# Stage 1: Build React frontend | |
FROM node:14-alpine AS frontend-builder | |
WORKDIR /app/frontend | |
# Copy frontend code and install dependencies | |
COPY frontend/package*.json ./ | |
RUN npm install | |
COPY frontend/ ./ | |
RUN npm run build | |
# Stage 2: Build FastAPI backend | |
FROM python:3.8-alpine AS backend-builder | |
WORKDIR /app/backend | |
# Install system dependencies (use lightweight alternatives) | |
RUN apk update && apk add --no-cache gcc libpq-dev | |
# Copy backend code and install Python dependencies | |
COPY backend/requirements.txt ./ | |
RUN pip install --no-cache-dir -r requirements.txt | |
COPY backend/ ./ | |
# Stage 3: Final stage | |
FROM python:3.8-alpine | |
WORKDIR /app | |
# Step 1: Install nodejs, npm, and supervisor | |
RUN apk update | |
RUN apk add --no-cache nodejs npm supervisor | |
# Step 2: Install Python dependencies | |
RUN pip install --no-cache-dir uvicorn fastapi tqdm wikitextparser pydantic requests beautifulsoup4 | |
# Step 3: Install serve globally for serving React app | |
RUN npm install -g serve | |
# No need for apk clean, it's not required | |
# Copy supervisord configuration | |
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf | |
# Copy built frontend from the first stage | |
COPY --from=frontend-builder /app/frontend/build /app/frontend/build | |
# Copy backend from the second stage | |
COPY --from=backend-builder /app/backend /app/backend | |
# Expose ports | |
EXPOSE 7860 | |
EXPOSE 8000 | |
# Start supervisord to manage both React frontend and FastAPI backend | |
CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] | |