leechard / Dockerfile
nenae18's picture
Deploy LeeChard
34ed622 verified
Raw
History Blame Contribute Delete
2.01 kB
# Hugging Face Space (Docker SDK) image for LeeChard.
# Engine = nanobanana_fal (heavy AI runs remotely on fal); this box runs the API +
# InsightFace (CPU) for gender/face QC. FAL_KEY and ACCESS_CODE come from Space secrets.
FROM python:3.12-slim
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
HOME=/root \
AI_PROVIDER=nanobanana_fal \
FAL_NANOBANANA_MODEL=fal-ai/nano-banana-pro/edit \
FAL_KLING_MODEL=fal-ai/bytedance/seedance/v1/pro/fast/image-to-video \
CELERY_TASK_ALWAYS_EAGER=true \
CELERY_TASK_EAGER_PROPAGATES=true \
CELERY_BROKER_URL=memory:// \
CELERY_RESULT_BACKEND=cache+memory:// \
DATABASE_URL=sqlite:////tmp/leechard.db \
SQLALCHEMY_DATABASE_URI=sqlite:////tmp/leechard.db \
STORAGE_BACKEND=local \
LOCAL_STORAGE_DIR=/tmp/leechard-storage
# NOTE: set FAL_KEY and ACCESS_CODE as *Space secrets* (Settings -> Variables and secrets).
WORKDIR /app
# Build + runtime libs: build-essential/cmake for insightface; libglib/libgomp for opencv/onnxruntime.
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential gcc g++ cmake \
libpq-dev libjpeg-dev zlib1g-dev libglib2.0-0 libgomp1 libgl1 \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . .
# Pre-download the InsightFace buffalo_l model (~280MB) so the first request does not
# pay the fetch. Non-fatal: if the network is unavailable at build time it downloads
# at first use instead.
RUN python -c "from insightface.app import FaceAnalysis; a=FaceAnalysis(name='buffalo_l'); a.prepare(ctx_id=-1, det_size=(640,640))" || true
EXPOSE 7860
HEALTHCHECK --interval=30s --timeout=5s --start-period=90s --retries=3 \
CMD python -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:7860/health', timeout=4).status==200 else 1)" || exit 1
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]