Architecture en 2 images: - Image base (audio-classifier-base): deps système + Python (~15min, 1x/semaine) - Image app (audio-classifier-backend): code uniquement (~30s-2min, chaque commit) Fichiers ajoutés: - backend/Dockerfile.base: Image de base avec toutes les dépendances - .gitea/workflows/docker-base.yml: CI pour build de l'image de base - backend/DOCKER_BUILD.md: Documentation complète Fichiers modifiés: - backend/Dockerfile: Utilise l'image de base (FROM audio-classifier-base) - .gitea/workflows/docker.yml: Passe BASE_IMAGE en build-arg Gains de performance: - Build normal: 15-25min → 30s-2min (90-95% plus rapide) - Trigger auto du build base: quand requirements.txt change - Trigger manuel: via interface Gitea Actions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
24 lines
670 B
Docker
24 lines
670 B
Docker
# Use pre-built base image with all dependencies
|
|
# Base image includes: Python 3.9, system deps, numpy, scipy, essentia-tensorflow, all pip deps
|
|
# Only rebuild base when requirements.txt changes
|
|
ARG BASE_IMAGE=git.benoitsz.com/benoit/audio-classifier-base:latest
|
|
FROM ${BASE_IMAGE}
|
|
|
|
# Working directory already set in base image
|
|
WORKDIR /app
|
|
|
|
# Copy application code
|
|
COPY backend/src/ ./src/
|
|
COPY backend/alembic.ini .
|
|
|
|
# Copy Essentia models into image (28 MB total)
|
|
COPY backend/models/ ./models/
|
|
RUN ls -lh /app/models
|
|
|
|
# Expose port
|
|
EXPOSE 8000
|
|
|
|
# Run migrations and start server
|
|
CMD alembic upgrade head && \
|
|
uvicorn src.api.main:app --host 0.0.0.0 --port 8000
|