Spaces:
Sleeping
Sleeping
| # ============================================ | |
| # MiroFish - HuggingFace Spaces Production Build | |
| # Multi-stage: Vue frontend build + Python backend + nginx | |
| # ============================================ | |
| # --- Stage 1: Build Vue.js frontend --- | |
| FROM node:20-alpine AS frontend-build | |
| WORKDIR /build/frontend | |
| COPY frontend/package.json frontend/package-lock.json ./ | |
| RUN npm ci | |
| COPY frontend/ ./ | |
| # Set empty base URL so production build uses relative URLs (nginx proxies to Flask) | |
| ENV VITE_API_BASE_URL="" | |
| RUN npm run build | |
| # --- Stage 2: Production runtime --- | |
| FROM python:3.11-slim | |
| # Install nginx and required system packages | |
| RUN apt-get update \ | |
| && apt-get install -y --no-install-recommends nginx curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /app | |
| # Install Python dependencies (CPU-only torch to save ~1.5GB) | |
| COPY backend/requirements.txt ./backend/requirements.txt | |
| RUN pip install --no-cache-dir \ | |
| --extra-index-url https://download.pytorch.org/whl/cpu \ | |
| -r backend/requirements.txt | |
| # Copy backend source | |
| COPY backend/ ./backend/ | |
| # Copy built Vue frontend to nginx serve directory | |
| COPY --from=frontend-build /build/frontend/dist /usr/share/nginx/html | |
| # Copy deployment configs | |
| COPY deploy/nginx.conf /etc/nginx/nginx.conf | |
| COPY deploy/start.sh /app/start.sh | |
| RUN chmod +x /app/start.sh | |
| # Create uploads directory for simulation data | |
| RUN mkdir -p /app/backend/uploads/projects \ | |
| /app/backend/uploads/simulations \ | |
| /app/backend/uploads/reports | |
| # HuggingFace Spaces requires user with uid 1000 | |
| RUN useradd -m -u 1000 appuser \ | |
| && chown -R appuser:appuser /app \ | |
| && chown -R appuser:appuser /usr/share/nginx/html \ | |
| && chown -R appuser:appuser /var/log/nginx \ | |
| && chown -R appuser:appuser /var/lib/nginx \ | |
| && chown -R appuser:appuser /etc/nginx \ | |
| && touch /run/nginx.pid && chown appuser:appuser /run/nginx.pid | |
| USER appuser | |
| EXPOSE 7860 | |
| CMD ["/app/start.sh"] | |