Spaces:
Sleeping
Sleeping
Enhance Docker setup: update docker-entrypoint.sh to set PYTHONPATH, modify Dockerfile to create a proper package structure and adjust permissions for storage and migrations directories; update migrations/env.py to include application root in Python path.
6712559
| # Multi-stage build for authenticated model downloads | |
| FROM python:3.10-slim AS model-downloader | |
| # Install huggingface-cli | |
| RUN pip install huggingface_hub | |
| # Set working directory | |
| WORKDIR /model-downloader | |
| # Create directory for downloaded models | |
| RUN mkdir -p /model-downloader/models | |
| # This will run when building the image | |
| # You'll need to pass your Hugging Face token at build time | |
| ARG HF_TOKEN | |
| ENV HF_TOKEN=${HF_TOKEN} | |
| # Login and download model | |
| RUN if [ -n "$HF_TOKEN" ]; then \ | |
| huggingface-cli login --token ${HF_TOKEN}; \ | |
| huggingface-cli download sesame/csm-1b ckpt.pt --local-dir /model-downloader/models; \ | |
| else echo "No HF_TOKEN provided, model download will be skipped"; fi | |
| # Now for the main application stage | |
| FROM python:3.10-slim | |
| # Install system dependencies | |
| RUN apt-get update && apt-get install -y \ | |
| build-essential \ | |
| ffmpeg \ | |
| git \ | |
| netcat-openbsd \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Set working directory | |
| WORKDIR /app | |
| # Install Python dependencies | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # Install additional dependencies for database and storage | |
| RUN pip install --no-cache-dir \ | |
| sqlalchemy==2.0.27 \ | |
| aiofiles==23.2.1 \ | |
| psycopg2-binary==2.9.9 \ | |
| alembic==1.13.1 | |
| # Create necessary directories with proper package structure | |
| RUN mkdir -p /app/storage/audio \ | |
| /app/storage/text \ | |
| /app/models \ | |
| /app/tokenizers \ | |
| /app/voice_memories \ | |
| /app/voice_references \ | |
| /app/voice_profiles \ | |
| /app/cloned_voices \ | |
| /app/audio_cache \ | |
| /app/static \ | |
| /app/logs \ | |
| /app/migrations/versions \ | |
| /app/app/models | |
| # Create Python package structure | |
| RUN touch /app/app/__init__.py \ | |
| /app/app/models/__init__.py | |
| # Copy the model from the model-downloader stage | |
| COPY --from=model-downloader /model-downloader/models /app/models | |
| # Copy application code | |
| COPY . . | |
| # Copy and set up entrypoint script | |
| COPY docker-entrypoint.sh /usr/local/bin/ | |
| RUN chmod +x /usr/local/bin/docker-entrypoint.sh | |
| # Create volume mount points | |
| VOLUME ["/app/storage", "/app/models", "/app/logs"] | |
| # Set environment variables | |
| ENV PYTHONPATH=/app \ | |
| DATABASE_URL=sqlite:///app/storage/audiobooks.db \ | |
| STORAGE_PATH=/app/storage | |
| # Set permissions for all directories | |
| RUN chown -R nobody:nogroup /app && \ | |
| chmod -R 755 /app && \ | |
| # Make migrations directory writable | |
| chmod -R 777 /app/migrations && \ | |
| chmod -R 777 /app/storage | |
| # Switch to non-root user | |
| USER nobody | |
| # Expose port | |
| EXPOSE 7860 | |
| # Set the entrypoint | |
| ENTRYPOINT ["docker-entrypoint.sh"] |