Spaces:
Sleeping
Sleeping
File size: 2,924 Bytes
a934b9c 13458f8 a934b9c 8ce5a19 13458f8 a934b9c fd8bd32 a934b9c 13458f8 a934b9c 8ce5a19 a934b9c 8ce5a19 a934b9c 8ce5a19 a934b9c 8ce5a19 a934b9c 8ce5a19 a934b9c 8ce5a19 a934b9c 13458f8 7c31e8f 13458f8 a934b9c fd8bd32 a934b9c fd8bd32 a934b9c fd8bd32 a934b9c 8ce5a19 a934b9c 7f38fd8 13458f8 8ce5a19 | 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | # syntax=docker/dockerfile:1
# Dockerfile for Hugging Face Spaces (Chainlit + Mini-Transformer)
FROM python:3.11-slim
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1
WORKDIR /home/user/app
# Optional build args to fetch a HF model at build time
ARG HF_MODEL_ID=""
ARG HF_MODEL_NAME=""
ARG HF_MODEL_REVISION=""
ARG HF_MODEL_TOKEN=""
ARG HF_MODEL_REPO_TYPE="model"
# Create non-root runtime user
RUN apt-get update \
&& apt-get install -y --no-install-recommends build-essential git curl \
&& rm -rf /var/lib/apt/lists/* \
&& groupadd -g 1000 appuser || true \
&& useradd -m -u 1000 -g appuser -s /bin/bash appuser || true
# Create runtime dirs now so Chainlit can write config/translations/files
RUN mkdir -p /home/user/app/.files \
/home/user/app/.cache \
/home/user/app/.config \
/home/user/app/.local/share \
/home/user/app/logs \
/home/user/app/trained_models \
/home/user/app/.chainlit/translations
# Copy source with correct ownership (critical fix for your PermissionError)
COPY --chown=appuser:appuser . /home/user/app
# Install deps
RUN python -m pip install --upgrade pip setuptools wheel
RUN if [ -f /home/user/app/req.txt ]; then \
pip install -r /home/user/app/req.txt; \
pip install -e .[server]; \
elif [ -f /home/user/app/requirements.txt ]; then \
pip install -r /home/user/app/requirements.txt; \
pip install -e .[server]; \
else \
pip install -e .[server]; \
fi
# Optional model download from HF Hub
RUN if [ -n "${HF_MODEL_ID}" ]; then \
set -- mini-transformer-fetch "${HF_MODEL_ID}" \
--repo-type "${HF_MODEL_REPO_TYPE}" \
--model-root /home/user/app/trained_models \
--force; \
if [ -n "${HF_MODEL_NAME}" ]; then set -- "$@" --name "${HF_MODEL_NAME}"; fi; \
if [ -n "${HF_MODEL_REVISION}" ]; then set -- "$@" --revision "${HF_MODEL_REVISION}"; fi; \
if [ -n "${HF_MODEL_TOKEN}" ]; then set -- "$@" --token "${HF_MODEL_TOKEN}"; fi; \
"$@"; \
else \
echo "No HF_MODEL_ID provided; skipping model download"; \
fi
# Optional fallback fetch via Makefile (only when HF_MODEL_ID is not set)
RUN if [ -f /home/user/app/Makefile ] && [ -z "${HF_MODEL_ID}" ]; then \
cd /home/user/app && make fetch-small && make fetch-test; \
else \
echo "Skipping make fetch-*"; \
fi
# Ensure all runtime-writable paths are owned by appuser
RUN chown -R appuser:appuser /home/user/app \
&& chmod 700 /home/user/app/.files
USER appuser
ENV HOME=/home/user/app \
XDG_CACHE_HOME=/home/user/app/.cache \
XDG_CONFIG_HOME=/home/user/app/.config \
XDG_DATA_HOME=/home/user/app/.local/share \
CHAINLIT_APP_ROOT=/home/user/app \
CHAINLIT_FILES_DIR=/home/user/app/.files
EXPOSE 7860
CMD ["bash", "-lc", "chainlit run src/mini_transformer/apps/chainlit_app.py --host 0.0.0.0 --port ${PORT:-7860}"]
|