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>
This commit is contained in:
147
cron/README.md
Normal file
147
cron/README.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# Via Makefile
|
||||
make cron-status
|
||||
|
||||
# Ou directement
|
||||
docker-compose ps backup-cron
|
||||
docker-compose exec backup-cron cat /etc/crontabs/root
|
||||
```
|
||||
|
||||
### Consulter les logs
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
# 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`:
|
||||
|
||||
```yaml
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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.
|
||||
Reference in New Issue
Block a user