| FROM python:3.11-slim | |
| ENV PYTHONUNBUFFERED=1 \ | |
| PIP_NO_CACHE_DIR=1 \ | |
| HF_HOME=/home/user/app/.models \ | |
| HF_HUB_DISABLE_TELEMETRY=1 \ | |
| NUKKI_HOST=0.0.0.0 \ | |
| NUKKI_PORT=7860 | |
| # opencv / pillow 런타임 의존 | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libgl1 libglib2.0-0 && rm -rf /var/lib/apt/lists/* | |
| RUN useradd -m -u 1000 user | |
| USER user | |
| ENV PATH=/home/user/.local/bin:$PATH | |
| WORKDIR /home/user/app | |
| # CPU 전용 torch 먼저 (Spaces 무료는 GPU 없음 → CUDA 빌드 불필요) | |
| COPY --chown=user requirements.txt . | |
| RUN pip install --upgrade pip && \ | |
| pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu && \ | |
| pip install -r requirements.txt | |
| COPY --chown=user . . | |
| # 모델을 이미지에 미리 구워넣어 cold start 시 재다운로드 방지 (실패해도 런타임에 받음) | |
| RUN python -c "from app.registry import REGISTRY; REGISTRY.segmenter('general'); REGISTRY.matte('small'); print('prewarm ok')" || echo "prewarm skipped" | |
| EXPOSE 7860 | |
| CMD ["uvicorn", "app.server:app", "--host", "0.0.0.0", "--port", "7860"] | |