fix(agenthub): Add missing Ofelia scheduler service to compose.coolify.yml

Resolves BARAAA-70 - agenthub-ofelia-1 container restart loop

The Ofelia scheduler was not defined in the compose file, only the
Ofelia labels on the backup service existed. This caused a container
restart loop because there was no Ofelia service to read those labels
and execute scheduled tasks.

Changes:
- Add ofelia service with mcuadros/ofelia:latest image
- Mount Docker socket read-only for container monitoring
- Depend on postgres (aligned with compose.lan.yml)
- Add ofelia.enabled=true label for auto-activation
- Add verification script (scripts/verify-ofelia.sh)
- Add verification documentation (docs/BARAAA-70-VERIFICATION.md)

After deployment, the Ofelia container should start successfully
and detect the backup-daily cron job (daily at 3am UTC).

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Paperclip FoundingEngineer 2026-05-02 14:31:50 +00:00
parent 9ccd23664f
commit a186273e47
3 changed files with 175 additions and 0 deletions

View file

@ -123,6 +123,19 @@ services:
- 'ofelia.job-exec.backup-daily.schedule=0 0 3 * * *' - 'ofelia.job-exec.backup-daily.schedule=0 0 3 * * *'
- 'ofelia.job-exec.backup-daily.command=/usr/local/bin/backup.sh' - 'ofelia.job-exec.backup-daily.command=/usr/local/bin/backup.sh'
ofelia:
image: mcuadros/ofelia:latest
command: daemon --docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
depends_on:
- postgres
labels:
- 'coolify.managed=true'
- 'coolify.type=service'
- 'ofelia.enabled=true'
volumes: volumes:
postgres_data_v2: postgres_data_v2:
driver: local driver: local

View file

@ -0,0 +1,122 @@
# BARAAA-70 : Correction Ofelia en Boucle de Redémarrage
## Problème Résolu
Le service Ofelia était en boucle de redémarrage car il n'était **pas défini** dans `compose.coolify.yml`. Les labels Ofelia étaient présents sur le service `backup`, mais aucun scheduler Ofelia n'existait pour les lire et exécuter les tâches planifiées.
## Solution Appliquée
Ajout du service `ofelia` dans `compose.coolify.yml` :
```yaml
ofelia:
image: mcuadros/ofelia:latest
command: daemon --docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
depends_on:
- postgres
labels:
- 'coolify.managed=true'
- 'coolify.type=service'
- 'ofelia.enabled=true'
```
### Caractéristiques de la Configuration
- **Image officielle** : `mcuadros/ofelia:latest`
- **Mode** : `daemon --docker` (surveille les labels Docker)
- **Socket Docker** : monté en lecture seule pour surveiller les conteneurs
- **Dépendance** : démarre après `postgres` (aligné avec `compose.lan.yml`)
- **Restart policy** : `unless-stopped` (redémarre automatiquement)
- **Label Ofelia** : `ofelia.enabled=true` (auto-activation)
## Vérification Post-Déploiement
### 1. Vérifier que le Service Démarre
Via l'interface Coolify ou Docker :
```bash
# Vérifier le statut du conteneur
docker ps | grep ofelia
# Attendu : état "Up" (pas de restart loop)
# Vérifier les logs
docker logs agenthub-ofelia-1 --tail 50
# Attendu : messages de démarrage sans erreur
```
**Logs attendus** :
```
Starting Ofelia...
Ofelia is running in daemon mode
Watching Docker containers for job labels
```
### 2. Vérifier la Détection des Jobs
Ofelia devrait détecter les jobs définis dans les labels du service `backup` :
```bash
docker logs agenthub-ofelia-1 | grep backup-daily
```
**Attendu** :
```
Job backup-daily registered: schedule=0 0 3 * * *, command=/usr/local/bin/backup.sh
```
### 3. Tester le Job Backup Manuellement (Optionnel)
Pour vérifier que le job fonctionne sans attendre 3h du matin :
```bash
# Activer le profil backup si pas déjà fait
docker compose --profile backup up -d backup
# Exécuter le job manuellement via Ofelia
docker exec agenthub-ofelia-1 ofelia run backup-daily
# Vérifier les logs du backup
docker logs agenthub-backup-1
```
**Attendu** : fichier de backup créé dans `/backups` du conteneur backup.
### 4. Vérifier le Cron Automatique
Le backup automatique devrait s'exécuter tous les jours à 3h00 (UTC) :
```bash
# Le lendemain matin, vérifier les logs Ofelia
docker logs agenthub-ofelia-1 | grep "Job backup-daily"
# Vérifier les logs du service backup
docker logs agenthub-backup-1 --since 24h
```
## Prochaines Étapes
1. **Déployer** : redéployer l'application sur Coolify avec le nouveau `compose.coolify.yml`
2. **Vérifier** : suivre les étapes de vérification ci-dessus
3. **Activer backup** : si le service backup n'est pas déjà actif, l'activer avec le profil
4. **Monitoring** : surveiller les logs Ofelia pendant quelques jours
## Notes Importantes
- Le service `backup` est dans un profil optionnel (`profiles: [backup]`). Pour que les jobs Ofelia fonctionnent, ce service doit être démarré manuellement :
```bash
docker compose --profile backup up -d backup
```
- Ofelia peut tourner même si le service `backup` n'est pas actif. Il attendra simplement que le conteneur cible soit disponible.
- Le socket Docker doit être accessible en lecture pour qu'Ofelia puisse surveiller les labels et exécuter les commandes dans les conteneurs.
## Références
- Configuration de référence : `compose.lan.yml` (lignes 35-44)
- Documentation Ofelia : https://github.com/mcuadros/ofelia
- Format cron : `0 0 3 * * *` = tous les jours à 3h00 UTC

40
scripts/verify-ofelia.sh Executable file
View file

@ -0,0 +1,40 @@
#!/bin/bash
# Script de vérification Ofelia pour BARAAA-70
# À exécuter sur le serveur Coolify via terminal
set -euo pipefail
echo "=== Vérification Ofelia - BARAAA-70 ==="
echo
# Vérifier que le conteneur Ofelia tourne
echo "1. État du conteneur Ofelia:"
docker ps --filter name=ofelia --format "table {{.Names}}\t{{.Status}}\t{{.State}}"
echo
# Vérifier les logs Ofelia pour démarrage
echo "2. Logs de démarrage Ofelia (20 dernières lignes):"
docker logs agenthub-ofelia-1 --tail 20 2>&1 || docker logs $(docker ps --filter name=ofelia -q) --tail 20 2>&1
echo
# Chercher la détection du job backup-daily
echo "3. Détection du job backup-daily:"
docker logs agenthub-ofelia-1 2>&1 | grep -i "backup-daily" || echo "⚠️ Job backup-daily non détecté dans les logs"
echo
# Vérifier que le conteneur backup existe
echo "4. État du conteneur backup:"
docker ps -a --filter name=backup --format "table {{.Names}}\t{{.Status}}\t{{.State}}"
echo
# Vérifier les labels Ofelia sur le conteneur backup
echo "5. Labels Ofelia sur le conteneur backup:"
docker inspect $(docker ps -a --filter name=backup -q) --format '{{range $k, $v := .Config.Labels}}{{if or (eq $k "ofelia.enabled") (contains $k "ofelia.job")}}{{$k}}={{$v}}{{"\n"}}{{end}}{{end}}' 2>&1 || echo "⚠️ Conteneur backup non trouvé"
echo
# Tester l'exécution manuelle du job
echo "6. Test d'exécution manuelle (optionnel):"
echo " Pour tester maintenant: docker exec agenthub-ofelia-1 ofelia run backup-daily"
echo
echo "=== Fin de la vérification ==="