Aller au contenu

docker-lmelp

Stack Docker complète pour déployer LMELP (Le Masque et La Plume) avec MongoDB, Back-Office, et système de backup automatisé.

Déployable facilement via Docker Compose ou Portainer sur NAS (Synology, QNAP) ou PC personnel.

✨ Fonctionnalités

  • Stack complète : MongoDB + LMELP App + Back-Office (Frontend + Backend)
  • Intégration Calibre : Accès optionnel à votre bibliothèque Calibre existante depuis le back-office
  • Export Android : Synchronisation automatique vers téléphone Android via ADB (optionnel)
  • Backups automatisés : Sauvegardes hebdomadaires de MongoDB avec anacron (adapté aux NAS/PC non 24/7)
  • Rotation des logs : Rotation automatique quotidienne des logs MongoDB
  • Image MongoDB personnalisée : Disponible sur ghcr.io avec backup et rotation intégrés
  • Scripts de restauration : Restauration facile depuis n'importe quel backup
  • Prêt pour Portainer : Déploiement en un clic via interface graphique
  • Watchtower ready : Mises à jour automatiques des images Docker
  • Multi-LLM : Support de plusieurs fournisseurs (Gemini, OpenAI, Azure, LiteLLM)

🚀 Démarrage rapide

Prérequis

  • Docker et Docker Compose installés

Installation

# 1. Cloner le repository (la structure data/ est créée automatiquement)
git clone https://github.com/castorfou/docker-lmelp.git
cd docker-lmelp

# 2. Créer le répertoire de logs MongoDB avec les bonnes permissions
mkdir -p data/logs/mongodb
sudo chown -R 999:999 data/logs/mongodb
# Alternative sans sudo : chmod 777 data/logs/mongodb

# 3. Configurer les variables d'environnement
cp .env.example .env
nano .env  # Ajouter au moins GEMINI_API_KEY ou OPENAI_API_KEY

# 4. Démarrer la stack
docker compose up -d

# 5. Vérifier l'état (attendez que tous les services soient "healthy")
docker compose ps

Note : Les services incluent des health checks automatiques. Attendez 30-60 secondes pour que tous les services affichent "Up (healthy)" au lieu de simplement "Up".

Accès aux services

📦 Services inclus

Service Image Port Description
mongo ghcr.io/castorfou/lmelp-mongo:latest 27018 MongoDB + backup + rotation logs (anacron)
lmelp ghcr.io/castorfou/lmelp:latest 8501 Application Streamlit
backoffice-backend ghcr.io/castorfou/lmelp-backend:latest 8000 API Backend
backoffice-frontend ghcr.io/castorfou/lmelp-frontend:latest 8080 Interface web
lmelp-export (optionnel) ghcr.io/castorfou/lmelp-mobile-export:latest - Export vers Android via ADB

📚 Documentation complète

La documentation complète est disponible sur castorfou.github.io/docker-lmelp

🔧 Configuration minimale

Fichier .env minimal pour démarrer :

# 1. Au moins une clé LLM requise (choisir selon votre préférence)
GEMINI_API_KEY=votre_cle_gemini_ici
# OU
OPENAI_API_KEY=votre_cle_openai_ici

# 2. Configuration MongoDB (valeurs par défaut fonctionnelles)
# ⚠️ Les variables sont dupliquées pour compatibilité entre images
MONGO_HOST=localhost
MONGO_PORT=27018
MONGO_DATABASE=masque_et_la_plume
DB_HOST=localhost
DB_NAME=masque_et_la_plume
MONGODB_URL=mongodb://localhost:27018/masque_et_la_plume

# Chemins des volumes (valeurs par défaut)
MONGO_DATA_PATH=./data/mongodb
BACKUP_PATH=./data/backups
AUDIO_PATH=./data/audios
LOG_PATH=./data/logs
MONGO_LOG_PATH=./data/logs/mongodb

Notes importantes : - Les variables MongoDB apparaissent plusieurs fois car différentes images Docker utilisent des noms différents. À terme, cela sera rationalisé dans les applications sources. - Sur Portainer : Utilisez des chemins absolus pour tous les volumes. Les chemins relatifs sont transformés par Portainer.

🗂️ Structure du projet

docker-lmelp/
├── docker-compose.yml      # Configuration Docker Compose
├── .env.example            # Template de configuration
├── mongodb.Dockerfile      # Image MongoDB custom avec anacron
├── config/                 # Configuration MongoDB
│   └── mongod.conf         # Configuration avec rotation logs
├── scripts/                # Scripts de gestion MongoDB
│   ├── backup_mongodb.sh   # Backup avec rétention
│   ├── restore_mongodb.sh  # Restauration depuis backup
│   ├── rotate_mongodb_logs.sh # Rotation manuelle des logs
│   └── init_mongo.sh       # Initialisation base de données
├── cron/                   # Configuration cron/anacron
│   ├── backup-cron         # Planification backups hebdomadaires
│   └── mongodb-logrotate.anacron # Rotation logs (optionnel host)
├── data/                   # Données persistantes (non versionnées)
│   ├── mongodb/            # Données MongoDB
│   ├── backups/            # Backups MongoDB
│   ├── audios/             # Fichiers audio LMELP
│   └── logs/               # Logs applicatifs et MongoDB
└── docs/                   # Documentation MkDocs
    └── user/               # Documentation utilisateur
        ├── installation.md
        ├── configuration.md
        ├── backup-restore.md
        └── portainer.md

🔄 Gestion des backups

Backups automatiques

Par défaut : backup hebdomadaire (tous les 7 jours) avec anacron, rétention de 7 semaines.

Anacron : Contrairement à cron, anacron exécute les tâches manquées au prochain démarrage, idéal pour les machines non 24/7 (NAS, PC personnels).

# Voir les backups existants
ls -lh data/backups/

# Forcer un backup manuel
docker exec lmelp-mongo /scripts/backup_mongodb.sh

# Vérifier les logs de backup
docker exec lmelp-mongo cat /var/log/mongodb/backup.log

Restauration

# Lister les backups disponibles
docker exec -it lmelp-mongo /scripts/restore_mongodb.sh

# Restaurer un backup spécifique
docker exec -it lmelp-mongo /scripts/restore_mongodb.sh backup_2024-11-21_02-00-00

Voir la documentation complète des backups pour plus de détails.

🐳 Déploiement Portainer

Portainer fournit une interface graphique pour gérer la stack :

  1. Accéder à Portainer : http://localhost:9000
  2. Stacks+ Add stack
  3. Nom : lmelp-stack
  4. Repository : https://github.com/castorfou/docker-lmelp
  5. Upload du fichier .env
  6. Cliquer sur Deploy the stack

Guide complet : Déploiement Portainer

🛠️ Commandes utiles

# Démarrer la stack
docker compose up -d

# Voir l'état des services
docker compose ps

# Consulter les logs
docker compose logs -f

# Arrêter la stack
docker compose down

# Mettre à jour les images
docker compose pull && docker compose up -d

# Redémarrer un service spécifique
docker compose restart lmelp

🤝 Contribution

Contributions bienvenues ! Pour contribuer :

  1. Fork le repository
  2. Créer une branche feature : git checkout -b feature/ma-fonctionnalite
  3. Installer les hooks pre-commit : pre-commit install
  4. Commiter les changements : git commit -m 'feat: ajouter fonctionnalité'
  5. Pusher la branche : git push origin feature/ma-fonctionnalite
  6. Ouvrir une Pull Request

Développement de la documentation

# Installer les dépendances de documentation
uv sync --extra docs

# Prévisualiser localement
uv run mkdocs serve

# La documentation sera accessible à http://127.0.0.1:8000/docker-lmelp/

📄 Licence

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

🔗 Liens utiles

⭐ Support

Si ce projet vous est utile, n'hésitez pas à lui donner une étoile ⭐ sur GitHub !

📚 Documentation

  • 👤 Guide Utilisateur : user
  • 🛠️ Guide Développeur : dev
  • 📋 Cheatsheets : cheatsheets