Une stack Docker prête pour la production pour Ofelia - un planificateur de tâches cron moderne pour conteneurs Docker avec fonctionnalité logrotate intégrée.
Ofelia est un planificateur de tâches Docker qui permet d'exécuter des tâches cron directement dans les conteneurs Docker. Au lieu d'exécuter un démon cron séparé dans chaque conteneur, Ofelia gère centralement toutes les tâches planifiées via les labels Docker.
- Gestion centralisée de toutes les tâches cron pour les conteneurs Docker
- Rotation automatique des logs avec planification configurable
- Configuration sécurisée (socket Docker en lecture seule)
- Support des fuseaux horaires (Europe/Berlin)
- Journalisation des tâches dans un répertoire séparé
- Prêt pour la production avec politique de redémarrage
- Docker Engine 20.10+
- Docker Compose 2.0+
- Accès à
/var/run/docker.sock
- Cloner le dépôt:
git clone https://github.com/csaeum/DockerStackOfelia.git
cd DockerStackOfelia- Ajuster les variables d'environnement (optionnel):
cp .env.example .env
nano .env- Démarrer la stack:
docker-compose up -dCOMPOSE_PROJECT_NAME=ofelia # Préfixe pour les noms de conteneurs
TIMEZONE=Europe/Berlin # Fuseau horaire pour les tâches cronAjoutez des labels à vos conteneurs Docker pour définir des tâches cron:
services:
myapp:
image: myapp:latest
labels:
ofelia.enabled: "true"
ofelia.job-exec.backup.schedule: "0 2 * * *"
ofelia.job-exec.backup.command: "/app/backup.sh"- job-exec: Exécuter une commande dans un conteneur en cours d'exécution
- job-run: Exécuter une commande dans un nouveau conteneur (supprimé après)
- job-local: Exécuter une commande sur l'hôte
- Format cron:
0 2 * * *(quotidien à 2h du matin) - Format Go:
@every 5m(toutes les 5 minutes) - Raccourcis:
@hourly,@daily,@weekly,@monthly
La configuration de logrotate se trouve dans config/logrotate.conf:
/ofelia/logs/*.log {
daily
rotate 2
missingok
notifempty
compress
delaycompress
copytruncate
}Personnalisations:
rotate 2: Nombre de fichiers logs à conserverdaily: Intervalle de rotation (daily, weekly, monthly)compress: Compresser les logs après rotation
# Démarrer la stack
docker-compose up -d
# Afficher les logs
docker-compose logs -f ofelia
# Arrêter la stack
docker-compose down
# Redémarrer la stack
docker-compose restart# Afficher les logs d'Ofelia
docker logs ofelia
# Logs des tâches dans le répertoire logs
tail -f logs/*.logdocker exec ofelia-logrotate logrotate /etc/logrotate.conf.
├── config/
│ └── logrotate.conf # Configuration de logrotate
├── logs/ # Logs des tâches (créé automatiquement)
├── .env # Variables d'environnement
├── docker-compose.yaml # Configuration Docker Compose
├── Dockerfile # Image du conteneur logrotate
└── README.md # Ce fichier- Socket Docker monté en lecture seule (
:ro) - Aucun privilège root requis
- Logs stockés dans un volume séparé
- Aucune donnée sensible dans les images de conteneurs
- Le conteneur est-il en cours d'exécution?
docker ps | grep ofelia- Les labels sont-ils correctement définis?
docker inspect <container-name> | grep ofelia- Vérifier les logs d'Ofelia:
docker logs ofelia- Le conteneur logrotate est-il en cours d'exécution?
docker ps | grep logrotate- Tester manuellement:
docker exec ofelia-logrotate logrotate -d /etc/logrotate.confservices:
database:
image: postgres:15
labels:
ofelia.enabled: "true"
ofelia.job-exec.db-backup.schedule: "0 3 * * *"
ofelia.job-exec.db-backup.command: "pg_dump -U postgres mydb > /backup/dump.sql"services:
webapp:
image: nginx:alpine
labels:
ofelia.enabled: "true"
ofelia.job-exec.cleanup.schedule: "@every 6h"
ofelia.job-exec.cleanup.command: "find /var/log -name '*.log' -mtime +7 -delete"Ce projet est open source (GPL-3.0-or-later) et gratuit. S'il vous a aidé, j'apprécierais votre soutien:
Made with ❤️ by WSC - Web SEO Consulting
- Ofelia par mcuadros
- Alpine Linux pour des images de conteneurs minimales
Les pull requests sont les bienvenues! Pour les modifications majeures, veuillez d'abord ouvrir une issue.