Files
BeauTroll e055d708a5 feat: add automated backup system with Docker-based cron
Implement a dedicated Docker container (backup-cron) for automated daily
backups and maintenance tasks, eliminating the need for host cron configuration.

New features:
- backup-cron service: Alpine-based container with Docker CLI and cron
- Automated daily backup at 5:00 AM (Europe/Paris timezone)
- Automated health check at 6:00 AM (after backup)
- Weekly log cleanup on Sundays at 3:00 AM (removes logs >30 days)

Files added:
- cron/Dockerfile: Alpine Linux with docker-cli, bash, and tzdata
- cron/entrypoint.sh: Starts crond and displays configuration
- cron/crontab: Scheduled tasks configuration
- cron/README.md: Complete documentation for automated backups
- scripts/clean-old-logs.sh: Automated log cleanup script

Makefile enhancements:
- make cron-status: Display backup automation status and schedule
- make cron-logs: View logs from automated tasks

Configuration improvements:
- Auto-detect COMPOSE_PROJECT_NAME from directory name (portable)
- Fix df command to use POSIX format (-P flag) for consistent output
- Updated .env.example with COMPOSE_PROJECT_NAME documentation

Benefits:
- No host cron configuration required
- Portable across different environments
- Automatic timezone handling
- Integrated with existing backup/health check scripts
- Logs all automated tasks for monitoring

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 02:24:48 +01:00

3.5 KiB

Backup Automatique Nextcloud

Ce dossier contient la configuration pour les backups automatiques via un container Docker dédié.

Architecture

Le service backup-cron est un container Alpine Linux léger qui exécute des tâches planifiées:

  • Image: Alpine Linux avec Docker CLI et docker-compose
  • Fuseau horaire: Europe/Paris (configurable via TZ)
  • Montages:
    • /project: Projet complet (scripts, config, etc.)
    • /var/run/docker.sock: Socket Docker pour exécuter docker-compose
    • /logs: Répertoire des logs partagé avec l'hôte

Planning par défaut

Tâche Fréquence Heure Description
Backup Quotidien 5h00 Backup complet (DB + fichiers)
Health check Quotidien 6h00 Vérification après backup
Nettoyage Hebdomadaire Dimanche 3h00 Suppression logs > 30 jours

Utilisation

Démarrer le service

# Build et démarrage
docker-compose up -d backup-cron

# Ou reconstruire si modifié
docker-compose up -d --build backup-cron

Vérifier le statut

# Via Makefile
make cron-status

# Ou directement
docker-compose ps backup-cron
docker-compose exec backup-cron cat /etc/crontabs/root

Consulter les logs

# Via Makefile
make cron-logs

# Ou directement
tail -f logs/cron_backup.log
tail -f logs/cron_health.log
tail -f logs/cron_clean.log

Tester manuellement

# Exécuter un backup immédiatement
docker-compose exec backup-cron /bin/bash -c "cd /project && bash scripts/backup.sh"

# Vérifier l'heure du container
docker-compose exec backup-cron date

Personnalisation

Modifier le planning

Éditez cron/crontab puis reconstruisez:

# Format cron: minute hour day month weekday command
# Exemple: backup toutes les 6 heures
0 */6 * * * cd /project && bash scripts/backup.sh >> /logs/cron_backup.log 2>&1

# Reconstruire
docker-compose up -d --build backup-cron

Changer le fuseau horaire

Modifiez docker-compose.yml:

environment:
  - TZ=America/New_York  # ou autre fuseau

Sécurité

⚠️ Important: Le container a accès au socket Docker (/var/run/docker.sock), ce qui lui permet d'exécuter des commandes docker-compose. Cela est nécessaire pour les backups mais donne des privilèges élevés.

Bonnes pratiques:

  • N'exposez pas ce service sur le réseau externe
  • Gardez les scripts de backup en lecture seule si possible
  • Surveillez les logs régulièrement
  • Limitez les ressources du container si nécessaire

Dépannage

Le container ne démarre pas

# Vérifier les logs
docker-compose logs backup-cron

# Reconstruire from scratch
docker-compose build --no-cache backup-cron
docker-compose up -d backup-cron

Les tâches ne s'exécutent pas

# Vérifier que crond tourne
docker-compose exec backup-cron ps aux | grep crond

# Vérifier le crontab
docker-compose exec backup-cron cat /etc/crontabs/root

# Vérifier l'heure du container
docker-compose exec backup-cron date

Problèmes de permissions

# Le container doit pouvoir écrire dans ./backups et ./logs
chmod 755 backups logs

# Vérifier les montages
docker-compose exec backup-cron ls -la /project/backups

Logs

Tous les logs sont stockés dans ./logs/:

  • cron_backup.log: Sorties des backups quotidiens
  • cron_health.log: Résultats des health checks
  • cron_clean.log: Logs de nettoyage hebdomadaire

Les logs sont automatiquement nettoyés après 30 jours.