Backup & Recovery Guide
- Version:
1.0.0
- Date:
10 novembre 2025
📦 Stratégie de Sauvegarde
Composants sauvegardés :
PostgreSQL (dumps quotidiens + WAL)
Uploads (/opt/koprogo/uploads)
Configuration (.env, secrets)
Monitoring (métriques 30d, logs 7d)
Fréquence :
Quotidien : 2h du matin (faible charge)
Hebdomadaire : Dimanche 3h (backup complet)
Mensuel : 1er du mois 4h
Rétention :
Local : 7 jours
S3 : 90 jours → Glacier (12 mois)
🛠️ Scripts de Backup
PostgreSQL
#!/bin/bash
# /opt/koprogo/scripts/backup-postgres.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/backups/postgresql"
S3_BUCKET="s3://koprogo-backups-prod/postgresql/"
# Dump database
sudo -u postgres pg_dump koprogo_db > "$BACKUP_DIR/koprogo_$DATE.sql"
# Compress & encrypt
gpg --encrypt --recipient "backup@koprogo.com" \
"$BACKUP_DIR/koprogo_$DATE.sql"
# Upload to S3
aws s3 cp "$BACKUP_DIR/koprogo_$DATE.sql.gpg" "$S3_BUCKET"
# Cleanup local (keep 7 days)
find "$BACKUP_DIR" -name "*.sql.gpg" -mtime +7 -delete
Uploads
#!/bin/bash
# /opt/koprogo/scripts/backup-uploads.sh
DATE=$(date +%Y%m%d_%H%M%S)
tar czf "/var/backups/uploads/uploads_$DATE.tar.gz" /opt/koprogo/uploads
gpg --encrypt --recipient "backup@koprogo.com" "/var/backups/uploads/uploads_$DATE.tar.gz"
aws s3 cp "/var/backups/uploads/uploads_$DATE.tar.gz.gpg" "s3://koprogo-backups-prod/uploads/"
🔄 Procédures de Restauration
Restaurer PostgreSQL
# 1. Lister backups disponibles
aws s3 ls s3://koprogo-backups-prod/postgresql/
# 2. Télécharger backup
aws s3 cp s3://koprogo-backups-prod/postgresql/koprogo_20251110_020000.sql.gpg /tmp/
# 3. Déchiffrer
gpg --decrypt /tmp/koprogo_20251110_020000.sql.gpg > /tmp/restore.sql
# 4. Restaurer
sudo systemctl stop koprogo-api
sudo -u postgres psql koprogo_db < /tmp/restore.sql
sudo systemctl start koprogo-api
Restaurer Uploads
aws s3 cp s3://koprogo-backups-prod/uploads/latest.tar.gz.gpg /tmp/
gpg --decrypt /tmp/latest.tar.gz.gpg | tar xz -C /opt/koprogo/uploads
📋 Vérification
Tests mensuels obligatoires
# Test déchiffrement
gpg --decrypt /var/backups/postgresql/latest.sql.gpg > /dev/null
# Test restauration (DB temporaire)
sudo -u postgres createdb koprogo_test
gpg --decrypt /var/backups/postgresql/latest.sql.gpg | sudo -u postgres psql koprogo_test
sudo -u postgres psql koprogo_test -c "SELECT COUNT(*) FROM buildings;"
sudo -u postgres dropdb koprogo_test
—
Version : 1.0.0