🎯 Ce qui a été fait 1. Modèles intégrés dans l'image Docker ✅ Les 5 modèles Essentia (28 MB total) sont maintenant copiés directement dans l'image Pas besoin de volume mount /backend/models:/app/models Dockerfile modifié pour inclure COPY models/ ./models/ 2. Volume models supprimé du docker-compose ✅ Le docker-compose.yml ne monte plus le dossier models/ Seul le dossier audio est monté (pour accès aux fichiers) 3. Dockerignore configuré ✅ Les modèles ne sont plus ignorés Copiés dans l'image lors du build 4. Documentation complète ✅ DEPLOYMENT.md - Guide de déploiement complet README.md - Mise à jour avec instructions autonomes Script check-autonomous.sh - Vérification automatique 📦 Contenu de l'image Modèles Essentia inclus (28 MB) : /app/models/ ├── discogs-effnet-bs64-1.pb (18 MB) ├── genre_discogs400-discogs-effnet-1.pb (2 MB) ├── genre_discogs400-discogs-effnet-1.json (15 KB) ├── mtg_jamendo_instrument-discogs-effnet-1.pb (2.6 MB) └── mtg_jamendo_moodtheme-discogs-effnet-1.pb (2.7 MB) 🚀 Déploiement Autonome Sur N'IMPORTE QUEL serveur avec Docker : # 1. Cloner git clone <repo> cd Audio-Classifier # 2. Configurer (optionnel) echo "AUDIO_LIBRARY_PATH=/path/to/music" > .env # 3. Démarrer docker-compose up -d Aucune action manuelle requise : ✅ Pas de téléchargement de modèles ✅ Pas de configuration complexe ✅ Pas de dépendances externes ✅ Tout est dans l'image Docker ✨ Avantages Portabilité : L'image contient tout ce qu'il faut Rapidité : Pas d'attente pour télécharger 28 MB au démarrage Fiabilité : Pas de risque de modèles manquants ou corrompus Offline : Fonctionne sans connexion internet (après pull de l'image) Reproductibilité : Même version des modèles partout 🔍 Vérification # Vérifier que tout est autonome bash check-autonomous.sh # Vérifier les modèles dans le container docker-compose exec backend ls -lh /app/models # → Doit afficher 28 MB de modèles 📊 Taille de l'image Image backend : ~1.2 GB (avec modèles) Image frontend : ~500 MB Total : ~1.7 GB C'est normal pour une image Python + TensorFlow + Essentia + modèles. Le système est maintenant 100% autonome et prêt pour un déploiement sans intervention !
6.4 KiB
6.4 KiB
Déploiement Audio Classifier
🚀 Déploiement Autonome
Le système est 100% autonome - aucune action manuelle requise ! Les modèles Essentia sont intégrés dans l'image Docker.
Prérequis
- Docker + Docker Compose
- 2 GB RAM minimum
- Port 3000 (frontend) et 8001 (backend) disponibles
Démarrage Rapide
- Cloner le projet :
git clone <votre-repo>
cd Audio-Classifier
- Configurer le chemin audio (optionnel) :
# Créer un fichier .env
echo "AUDIO_LIBRARY_PATH=/chemin/vers/votre/musique" > .env
- Démarrer :
docker-compose up -d
- Accéder à l'interface :
- Frontend : http://localhost:3000
- API : http://localhost:8001
- Docs API : http://localhost:8001/docs
C'est tout ! 🎉
Premier Scan
- Ouvrir http://localhost:3000
- Cliquer sur le bouton "Rescan" dans le header
- Attendre que le scan se termine (progression affichée)
- Profiter !
📦 Ce qui est inclus dans l'image
✅ Modèles Essentia (28 MB) :
discogs-effnet-bs64-1.pb(18 MB) - Embedding modelgenre_discogs400-discogs-effnet-1.pb(2 MB) - Genre classifiermtg_jamendo_moodtheme-discogs-effnet-1.pb(2.7 MB) - Mood classifiermtg_jamendo_instrument-discogs-effnet-1.pb(2.6 MB) - Instrument classifier
✅ Dépendances Python :
- FastAPI, Uvicorn
- Essentia-TensorFlow
- Librosa, SQLAlchemy
- FFmpeg (pour transcodage)
✅ Base de données :
- PostgreSQL avec pgvector
- Migrations Alembic auto-appliquées
⚙️ Configuration
Variables d'environnement (.env)
# Audio Library
AUDIO_LIBRARY_PATH=/chemin/vers/musique # Défaut: ./audio_samples
# Database
POSTGRES_USER=audio_user
POSTGRES_PASSWORD=audio_password
POSTGRES_DB=audio_classifier
# CORS (pour déploiement distant)
CORS_ORIGINS=http://localhost:3000,http://votre-domaine.com
Ports
Par défaut :
- Frontend :
3000 - Backend API :
8001 - PostgreSQL :
5433(mapping host)
Pour changer :
# Dans docker-compose.yml
services:
backend:
ports:
- "VOTRE_PORT:8000"
🔄 Mise à jour
# Arrêter les containers
docker-compose down
# Pull les dernières modifications
git pull
# Rebuild et redémarrer
docker-compose up -d --build
📊 Monitoring
Logs en temps réel
# Tous les services
docker-compose logs -f
# Backend uniquement
docker-compose logs -f backend
# Frontend uniquement
docker-compose logs -f frontend
Statut des containers
docker-compose ps
Santé de l'API
curl http://localhost:8001/health
🗄️ Gestion de la base de données
Backup
docker-compose exec postgres pg_dump -U audio_user audio_classifier > backup.sql
Restore
docker-compose exec -T postgres psql -U audio_user audio_classifier < backup.sql
Reset complet
docker-compose down -v # ATTENTION : supprime toutes les données !
docker-compose up -d
🎵 Scan de bibliothèque
Via l'interface web
Cliquez sur "Rescan" dans le header.
Via l'API
curl -X POST http://localhost:8001/api/library/scan
Via CLI (dans le container)
docker-compose exec backend python -m src.cli.scanner /audio
Statut du scan
curl http://localhost:8001/api/library/scan/status
📁 Structure des fichiers générés
Lors du scan, deux dossiers sont créés automatiquement :
/votre/musique/
├── fichier1.mp3
├── fichier2.flac
├── transcoded/ # MP3 128kbps pour streaming
│ ├── fichier1.mp3
│ └── fichier2.mp3
└── waveforms/ # JSON pré-calculés
├── fichier1.waveform.json
└── fichier2.waveform.json
🚢 Déploiement Production
Sur un serveur distant
-
Installer Docker sur le serveur
-
Cloner et configurer :
git clone <votre-repo>
cd Audio-Classifier
- Configurer .env :
# Chemin vers musique
AUDIO_LIBRARY_PATH=/mnt/musique
# Domaine public
CORS_ORIGINS=http://votre-domaine.com,https://votre-domaine.com
# Credentials BDD (sécurisés !)
POSTGRES_PASSWORD=motdepasse_fort_aleatoire
- Démarrer :
docker-compose up -d
- Configurer reverse proxy (Nginx/Caddy) :
# Exemple Nginx
server {
server_name votre-domaine.com;
location / {
proxy_pass http://localhost:3000;
}
location /api/ {
proxy_pass http://localhost:8001/api/;
}
}
Avec Docker Hub
- Tag et push :
docker tag audio-classifier-backend:latest votrecompte/audio-classifier-backend:latest
docker push votrecompte/audio-classifier-backend:latest
- Sur le serveur :
# docker-compose.yml
services:
backend:
image: votrecompte/audio-classifier-backend:latest
# ... reste de la config
🔒 Sécurité
Recommandations
✅ Changer les mots de passe par défaut ✅ Utiliser HTTPS en production (Let's Encrypt) ✅ Restreindre CORS_ORIGINS aux domaines autorisés ✅ Ne pas exposer PostgreSQL publiquement ✅ Backups réguliers de la BDD
Firewall
# Autoriser uniquement ports nécessaires
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw allow 22/tcp # SSH
ufw enable
❓ Troubleshooting
Les modèles ne se chargent pas
# Vérifier que les modèles sont dans l'image
docker-compose exec backend ls -lh /app/models
# Devrait afficher 28 MB de modèles
Le scan ne démarre pas
# Vérifier les permissions du dossier audio
docker-compose exec backend ls -la /audio
# Devrait être accessible en écriture
Erreur de mémoire
# Augmenter la mémoire Docker
# Docker Desktop > Settings > Resources > Memory : 4 GB minimum
Port déjà utilisé
# Changer le port dans docker-compose.yml
services:
backend:
ports:
- "8002:8000" # Au lieu de 8001
📚 Ressources
💡 Conseil
Pour un déploiement vraiment autonome sur un nouveau serveur :
# Tout en une commande !
git clone <repo> && \
cd Audio-Classifier && \
echo "AUDIO_LIBRARY_PATH=/mnt/musique" > .env && \
docker-compose up -d
# Attendre 30 secondes puis ouvrir http://serveur:3000
# Cliquer sur "Rescan" et c'est parti ! 🚀