Spaces:
Sleeping
Sleeping
FROM ghcr.io/astral-sh/uv:python3.10-bookworm-slim as builder | |
WORKDIR /app | |
# Copy project files for dependency installation | |
COPY pyproject.toml /app/ | |
COPY README.md /app/ | |
# Show pyproject.toml content | |
RUN cat pyproject.toml | |
# Create a virtual environment and install dependencies using uv sync | |
RUN uv venv /app/.venv && \ | |
. /app/.venv/bin/activate && \ | |
uv sync | |
# Verify installations with the virtual environment | |
RUN . /app/.venv/bin/activate && \ | |
python -c "import numpy; print(f'NumPy version: {numpy.__version__}')" && \ | |
python -c "import pandas; print(f'Pandas version: {pandas.__version__}')" && \ | |
python -c "import uvicorn; print(f'Uvicorn version: {uvicorn.__version__}')" | |
# Second stage for the final image | |
FROM ghcr.io/astral-sh/uv:python3.10-bookworm-slim | |
# Add user - this is the user that will run the app | |
RUN useradd -m -u 1000 user | |
# Copy the virtual environment from the builder stage | |
COPY --from=builder /app/.venv /home/user/app/.venv | |
# Install Node.js for building the frontend | |
RUN apt-get update && apt-get install -y \ | |
curl \ | |
gnupg \ | |
&& curl -sL https://deb.nodesource.com/setup_18.x | bash - \ | |
&& apt-get install -y nodejs \ | |
&& apt-get clean \ | |
&& rm -rf /var/lib/apt/lists/* | |
# Set up user environment | |
ENV HOME=/home/user \ | |
PATH=/home/user/app/.venv/bin:$PATH \ | |
UVICORN_WS_PROTOCOL=websockets \ | |
FORWARDED_ALLOW_IPS="*" \ | |
HTTPTOOLS_LOG_DEBUG=1 | |
# Verify dependencies are available in the final image | |
RUN python -c "import numpy; print(f'NumPy version: {numpy.__version__}')" && \ | |
python -c "import pandas; print(f'Pandas version: {pandas.__version__}')" && \ | |
python -c "import uvicorn; print(f'Uvicorn version: {uvicorn.__version__}')" | |
# Copy frontend code and build it | |
COPY --chown=user frontend /home/user/app/frontend | |
USER user | |
WORKDIR /home/user/app/frontend | |
RUN npm install && npm run build | |
# Copy backend code | |
WORKDIR /home/user/app | |
COPY --chown=user backend /home/user/app/backend | |
# Copy aimakerspace module | |
COPY --chown=user aimakerspace /home/user/app/aimakerspace | |
# Set the working directory to the backend folder | |
WORKDIR /home/user/app/backend | |
# Expose port for FastAPI on Hugging Face | |
EXPOSE 7860 | |
# Start the FastAPI server with optimized settings for Hugging Face Spaces | |
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860", "--proxy-headers", "--forwarded-allow-ips=*", "--timeout-keep-alive", "75"] |