# ============================================================================= # FASHIONISTAR — Celery Worker Dockerfile (Hugging Face Spaces) # ============================================================================= # Target: huggingface.co/spaces/fashionistar/fashionistar-celery-queues # Port: 7860 (HF mandatory, served by background health server) # UID: 1000 (HF mandatory) # # HF Spaces Dev Mode requirements (PRO plan): # ✓ bash, git, git-lfs, curl, wget, procps installed # ✓ /app owned by UID 1000 # ✓ CMD instruction present # ============================================================================= # ── Stage 1: uv binary ─────────────────────────────────────────────────────── # Versions are hardcoded (NOT ARG) because HF Spaces injects Space secrets as # Docker build args, overriding ARG defaults and causing build failures. FROM ghcr.io/astral-sh/uv:0.8.22 AS uvbin # ── Stage 2: dependency builder ────────────────────────────────────────────── FROM python:3.13-slim AS builder ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ UV_COMPILE_BYTECODE=1 \ UV_LINK_MODE=copy \ UV_PROJECT_ENVIRONMENT=/opt/venv \ VIRTUAL_ENV=/opt/venv RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ libpq-dev \ && rm -rf /var/lib/apt/lists/* COPY --from=uvbin /uv /uvx /bin/ WORKDIR /app COPY pyproject.toml uv.lock ./ # Install dependencies, then remove heavy ML/CUDA packages to keep image lean RUN uv sync --frozen --no-dev --no-editable --no-install-project && \ uv pip uninstall --python /opt/venv \ torch torchvision mediapipe open-clip-torch sentence-transformers \ opencv-python-headless opencv-contrib-python \ nvidia-cuda-nvrtc-cu12 nvidia-cuda-runtime-cu12 nvidia-cuda-cupti-cu12 \ nvidia-cudnn-cu12 nvidia-cublas-cu12 nvidia-cufft-cu12 nvidia-curand-cu12 \ nvidia-cusolver-cu12 nvidia-cusparse-cu12 nvidia-nccl-cu12 \ nvidia-nvtx-cu12 nvidia-nvjitlink-cu12 triton 2>/dev/null || true # ── Stage 3: runtime ────────────────────────────────────────────────────────── FROM python:3.13-slim AS runner ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ UV_LINK_MODE=copy \ UV_PROJECT_ENVIRONMENT=/opt/venv \ PATH="/opt/venv/bin:$PATH" \ DJANGO_SETTINGS_MODULE=backend.config.production \ WORKING_ENVIRONMENT=production \ PORT=7860 \ CELERY_CONCURRENCY=4 \ CELERY_LOG_LEVEL=info \ CELERY_QUEUES=default,ai_tasks,measurements,analytics,notifications,webhooks # Runtime system dependencies # IMPORTANT: bash, git, git-lfs, wget, procps are REQUIRED for HF Spaces Dev Mode (PRO plan). RUN apt-get update && apt-get install -y --no-install-recommends \ libpq5 \ curl \ wget \ zstd \ bash \ git \ git-lfs \ procps \ && git lfs install \ && rm -rf /var/lib/apt/lists/* COPY --from=uvbin /uv /uvx /bin/ COPY --from=builder /opt/venv /opt/venv # Create non-root app user (UID 1000 — MANDATORY for HF Spaces) RUN useradd --create-home --uid 1000 --shell /bin/bash appuser && \ mkdir -p /app/staticfiles /app/media /app/logs && \ chown -R appuser:appuser /app /home/appuser WORKDIR /app COPY --chown=appuser:appuser . . COPY --chown=appuser:appuser entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh USER appuser EXPOSE 7860 HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD curl -fsS "http://127.0.0.1:7860/health" || exit 1 ENTRYPOINT ["/entrypoint.sh"] CMD ["celery-worker"]