Spaces:
Sleeping
Sleeping
# syntax=docker/dockerfile:1 | |
ARG PYTHON_VERSION=3.12.3 | |
FROM python:${PYTHON_VERSION}-slim as base | |
# Prevents Python from writing pyc files. | |
ENV PYTHONDONTWRITEBYTECODE=1 | |
# Keeps Python from buffering stdout and stderr to avoid situations where | |
# the application crashes without emitting any logs due to buffering. | |
ENV PYTHONUNBUFFERED=1 | |
# Set the working directory | |
WORKDIR /app | |
# Create a non-privileged user that the app will run under. | |
ARG UID=10001 | |
RUN adduser \ | |
--disabled-password \ | |
--gecos "" \ | |
--home "/nonexistent" \ | |
--shell "/sbin/nologin" \ | |
--no-create-home \ | |
--uid "${UID}" \ | |
appuser | |
# Copy requirements.txt before other files to leverage Docker's caching mechanism | |
COPY requirements.txt . | |
# Install dependencies | |
RUN --mount=type=cache,target=/root/.cache/pip \ | |
python -m pip install --no-cache-dir -r requirements.txt | |
# Create necessary directories with appropriate permissions | |
RUN mkdir -p /data /app/.cache/huggingface && \ | |
chown -R appuser:appuser /data /app/.cache/huggingface && \ | |
chmod -R 777 /data /app/.cache/huggingface | |
# Set the TRANSFORMERS_CACHE and HF_HOME environment variables | |
ENV TRANSFORMERS_CACHE=/app/.cache/huggingface | |
ENV HF_HOME=/app/.cache/huggingface | |
# Switch to the non-privileged user to run the application. | |
USER appuser | |
# Copy the source code into the container. | |
COPY . . | |
# Expose the ports that the application listens on. | |
EXPOSE 7860 | |
EXPOSE 8501 | |
# Run the application. | |
CMD ["bash", "-c", "uvicorn app:app --host 0.0.0.0 --port 7860 & streamlit run frontend.py --server.port 8501 --server.enableXsrfProtection false"] |