Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
# Build frontend | |
FROM node:18 as frontend-build | |
WORKDIR /app | |
COPY frontend/package*.json ./ | |
# Configurer le registre npm miroir pour éviter les erreurs 403 | |
RUN npm config set registry https://registry.npmmirror.com/ | |
RUN npm install | |
COPY frontend/ ./ | |
# Set environment variable for production build | |
ENV REACT_APP_NODE_ENV=production | |
RUN npm run build | |
# Build backend | |
FROM python:3.12-slim | |
WORKDIR /app | |
# Install system dependencies required for UV, Git and Node.js | |
RUN apt-get update && apt-get install -y --no-install-recommends \ | |
curl ca-certificates git netcat-openbsd && \ | |
curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ | |
apt-get install -y nodejs && \ | |
rm -rf /var/lib/apt/lists/* | |
# Install UV (fast Python dependency manager) | |
RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \ | |
mv /root/.local/bin/uv /usr/local/bin/uv && chmod +x /usr/local/bin/uv | |
# Verify UV installation | |
RUN uv --version | |
# Create non-root user | |
RUN useradd -m -u 1000 user | |
# Create and configure cache directory | |
RUN mkdir -p /app/.cache && \ | |
chown -R user:user /app | |
# Copy all backend code first | |
COPY backend/ . | |
# Install all dependencies explicitly | |
RUN pip install fastapi uvicorn | |
# Install project dependencies | |
RUN uv pip install -e . --system | |
# Copy frontend server and build | |
COPY --from=frontend-build /app/build ./frontend/build | |
COPY --from=frontend-build /app/package*.json ./frontend/ | |
COPY --from=frontend-build /app/server.js ./frontend/ | |
# Install frontend production dependencies | |
WORKDIR /app/frontend | |
# Configurer le registre npm miroir pour éviter les erreurs 403 | |
RUN npm config set registry https://registry.npmmirror.com/ | |
RUN npm install --production | |
WORKDIR /app | |
# Environment variables | |
ENV HF_HOME=/app/.cache \ | |
HF_DATASETS_CACHE=/app/.cache \ | |
INTERNAL_API_PORT=7861 \ | |
PORT=7860 \ | |
NODE_ENV=production | |
# Note: HF_TOKEN should be provided at runtime, not build time | |
USER user | |
EXPOSE 7860 7861 | |
# Start both servers with wait-for | |
CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port 7861 & while ! nc -z 127.0.0.1 7861; do sleep 1; done && cd frontend && npm run serve"] |