File size: 1,496 Bytes
131da12 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # --- Stage 1: Build the frontend ---
FROM node:20-alpine AS frontend-builder
WORKDIR /app/frontend
COPY frontend/package*.json ./
RUN npm install
COPY frontend/ ./
RUN npm run build
# --- Stage 2: Build the backend & package the app ---
FROM python:3.11-slim
WORKDIR /app
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV HF_HOME=/tmp/hf_cache
ENV PORT=7860
# Create writable cache directory for Hugging Face models
RUN mkdir -p /tmp/hf_cache && chmod 777 /tmp/hf_cache
# Copy backend requirements and install dependencies
COPY backend/requirements.txt ./backend/
RUN pip install --no-cache-dir -r backend/requirements.txt
# Pre-download the Hugging Face models during Docker build time
# so the Space starts up instantly without timeout.
RUN python -c "from transformers import pipeline; \
pipeline('text-classification', model='j-hartmann/emotion-english-distilroberta-base', top_k=None); \
pipeline('ner', model='dslim/distilbert-NER', aggregation_strategy='simple')"
# Copy built frontend assets from stage 1
COPY --from=frontend-builder /app/frontend/dist ./frontend/dist
# Copy backend source code
COPY backend/ ./backend/
# Make the backend directory writable (needed for writing sentiment logs)
RUN chmod -R 777 /app/backend
# Expose port 7860 (Hugging Face Spaces default port)
EXPOSE 7860
# Run uvicorn server, binding to the port specified by Hugging Face Spaces
CMD ["sh", "-c", "uvicorn backend.main:app --host 0.0.0.0 --port ${PORT}"]
|