# ============================================ # CrownCode Backend - Hugging Face Spaces # ============================================ # SDK: Docker | Hardware: CPU Basic (Free) # ============================================ # Python 3.11 slim imajını kullan FROM python:3.11-slim # Çalışma dizini WORKDIR /app # Ortam değişkenleri ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ TRANSFORMERS_CACHE=/app/.cache/huggingface \ HF_HOME=/app/.cache/huggingface \ TORCH_HOME=/app/.cache/torch # Sistem bağımlılıkları + FFmpeg RUN apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ libsndfile1 \ git \ curl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Cache dizinleri RUN mkdir -p /app/.cache/huggingface /app/.cache/torch \ && chmod -R 777 /app/.cache # Requirements (önce kopyala - Docker cache için) COPY requirements.txt . # PyTorch CPU versiyonu + diğer paketler RUN pip install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu \ && pip install --no-cache-dir -r requirements.txt \ && pip install --no-cache-dir "huggingface-hub>=0.20.0" # Hugging Face Spaces için non-root kullanıcı (güvenlik) RUN useradd -m -u 1000 user \ && mkdir -p /app/models \ && chown -R user:user /app USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH \ AURIS_MODELS_REPO=Rthur2003/auris-models \ MODELS_DIR=/app/models \ AURIS_WARMUP=1 \ NUMBA_CACHE_DIR=/tmp/numba-cache # Model ağırlıkları imaja gömülür: Space uykudan her uyandığında ~415 MB # AURIS modelini ve wav2vec2-base'i yeniden indirmek yerine hazır bulur. # Kod değişince bu katmanlar önbellekten gelir (yalnızca startup.py değişirse yeniden iner). COPY --chown=user:user startup.py . RUN python startup.py \ && python -c "from transformers import Wav2Vec2Model; Wav2Vec2Model.from_pretrained('facebook/wav2vec2-base')" # Uygulama kodu COPY --chown=user:user app ./app # Hugging Face Spaces varsayılan port: 7860 EXPOSE 7860 # Health check — modeller imajda, açılış kısa HEALTHCHECK --interval=30s --timeout=10s --start-period=90s --retries=5 \ CMD curl -f http://localhost:7860/api/health || exit 1 # startup.py dosyalar mevcutsa hiçbir şey indirmez; eksik kalan olursa tamamlar. CMD ["sh", "-c", "python startup.py && uvicorn app.main:app --host 0.0.0.0 --port 7860"]