393 lines
9.3 KiB
Markdown
393 lines
9.3 KiB
Markdown
# 🔒 Système de Sauvegarde TowerControl
|
|
|
|
## Vue d'ensemble
|
|
|
|
TowerControl dispose d'un système de sauvegarde automatique et manuel complet pour protéger vos données SQLite.
|
|
|
|
## Fonctionnalités
|
|
|
|
- ✅ **Sauvegardes automatiques** avec planification configurable
|
|
- ✅ **Sauvegardes manuelles** via UI et CLI
|
|
- ✅ **Compression gzip** optionnelle pour économiser l'espace
|
|
- ✅ **Rétention automatique** des anciennes sauvegardes
|
|
- ✅ **Vérification d'intégrité** de la base de données
|
|
- ✅ **Restauration** complète (développement uniquement)
|
|
- ✅ **Interface graphique** dans les paramètres avancés
|
|
- ✅ **CLI** pour l'administration système
|
|
|
|
## Configuration
|
|
|
|
### Paramètres par défaut
|
|
|
|
```typescript
|
|
{
|
|
enabled: true, // Sauvegardes automatiques activées
|
|
interval: 'daily', // Fréquence: 'hourly', 'daily', 'weekly'
|
|
maxBackups: 7, // Nombre maximum de sauvegardes conservées
|
|
backupPath: './backups', // Dossier de stockage
|
|
compression: true, // Compression gzip activée
|
|
}
|
|
```
|
|
|
|
### Modification via l'interface
|
|
|
|
1. Aller dans **Paramètres** → **Avancé**
|
|
2. Section **💾 Sauvegarde et données**
|
|
3. Cliquer sur **"Gérer les sauvegardes"**
|
|
4. Modifier la configuration selon vos besoins
|
|
|
|
### Modification via CLI
|
|
|
|
```bash
|
|
# Voir la configuration actuelle
|
|
pnpm run backup:config
|
|
|
|
# Modifier la fréquence
|
|
pnpm tsx scripts/backup-manager.ts config-set interval=daily
|
|
|
|
# Modifier le nombre max de sauvegardes
|
|
pnpm tsx scripts/backup-manager.ts config-set maxBackups=10
|
|
|
|
# Activer/désactiver la compression
|
|
pnpm tsx scripts/backup-manager.ts config-set compression=true
|
|
```
|
|
|
|
### Personnalisation du dossier de sauvegarde
|
|
|
|
```bash
|
|
# Via variable d'environnement permanente (.env)
|
|
BACKUP_STORAGE_PATH="./custom-backups"
|
|
|
|
# Via variable temporaire (une seule fois)
|
|
BACKUP_STORAGE_PATH="./my-backups" pnpm run backup:create
|
|
|
|
# Exemple avec un chemin absolu
|
|
BACKUP_STORAGE_PATH="/var/backups/towercontrol" pnpm run backup:create
|
|
```
|
|
|
|
## Utilisation
|
|
|
|
### Interface graphique
|
|
|
|
#### Paramètres Avancés
|
|
|
|
- **Visualisation** du statut en temps réel
|
|
- **Création manuelle** de sauvegardes
|
|
- **Vérification** de l'intégrité
|
|
- **Lien** vers la gestion complète
|
|
|
|
#### Page de gestion complète
|
|
|
|
- **Configuration** détaillée du système
|
|
- **Liste** de toutes les sauvegardes
|
|
- **Actions** (supprimer, restaurer)
|
|
- **Statistiques** et métriques
|
|
|
|
### Ligne de commande
|
|
|
|
```bash
|
|
# Créer une sauvegarde immédiate
|
|
pnpm run backup:create
|
|
|
|
# Lister toutes les sauvegardes
|
|
pnpm run backup:list
|
|
|
|
# Vérifier l'intégrité de la base
|
|
pnpm run backup:verify
|
|
|
|
# Voir la configuration
|
|
pnpm run backup:config
|
|
|
|
# Démarrer le planificateur
|
|
pnpm run backup:start
|
|
|
|
# Arrêter le planificateur
|
|
pnpm run backup:stop
|
|
|
|
# Statut du planificateur
|
|
pnpm run backup:status
|
|
|
|
# Commandes avancées (pnpm tsx requis)
|
|
pnpm tsx scripts/backup-manager.ts delete <filename>
|
|
pnpm tsx scripts/backup-manager.ts restore <filename> --force
|
|
```
|
|
|
|
## Planificateur automatique
|
|
|
|
### Fonctionnement
|
|
|
|
Le planificateur fonctionne en arrière-plan et crée des sauvegardes selon la fréquence configurée :
|
|
|
|
- **Hourly** : Toutes les heures
|
|
- **Daily** : Une fois par jour (recommandé)
|
|
- **Weekly** : Une fois par semaine
|
|
|
|
### Auto-démarrage
|
|
|
|
En production, le planificateur démarre automatiquement 30 secondes après le lancement de l'application.
|
|
|
|
### Gestion
|
|
|
|
```bash
|
|
# Démarrer manuellement
|
|
pnpm run backup:start
|
|
|
|
# Arrêter
|
|
pnpm run backup:stop
|
|
|
|
# Voir le statut
|
|
pnpm run backup:status
|
|
```
|
|
|
|
## Fichiers de sauvegarde
|
|
|
|
### Format des noms
|
|
|
|
```
|
|
towercontrol_2025-01-15T10-30-00-000Z.db # Non compressé
|
|
towercontrol_2025-01-15T10-30-00-000Z.db.gz # Compressé
|
|
```
|
|
|
|
### Localisation
|
|
|
|
Par défaut : `./backups/` (relatif au dossier du projet)
|
|
|
|
### Métadonnées
|
|
|
|
Chaque sauvegarde contient :
|
|
|
|
- **Horodatage** précis de création
|
|
- **Taille** du fichier
|
|
- **Type** (manuelle ou automatique)
|
|
- **Statut** (succès, échec, en cours)
|
|
|
|
## Restauration
|
|
|
|
⚠️ **ATTENTION** : La restauration remplace complètement la base de données actuelle.
|
|
|
|
### Sécurités
|
|
|
|
1. **Sauvegarde automatique** de la base actuelle avant restauration
|
|
2. **Confirmation** obligatoire
|
|
3. **Environnement** : Bloqué en production via API
|
|
4. **CLI uniquement** pour les restaurations en production
|
|
|
|
### Procédure
|
|
|
|
#### Via interface (développement uniquement)
|
|
|
|
1. Aller dans la gestion des sauvegardes
|
|
2. Cliquer sur **"Restaurer"** à côté du fichier souhaité
|
|
3. Confirmer l'action
|
|
|
|
#### Via CLI
|
|
|
|
```bash
|
|
# Restaurer avec confirmation
|
|
pnpm tsx scripts/backup-manager.ts restore towercontrol_2025-01-15T10-30-00-000Z.db.gz
|
|
|
|
# Restaurer en forçant (sans confirmation)
|
|
pnpm tsx scripts/backup-manager.ts restore towercontrol_2025-01-15T10-30-00-000Z.db.gz --force
|
|
```
|
|
|
|
## Vérification d'intégrité
|
|
|
|
### Quand l'utiliser
|
|
|
|
- Après une restauration
|
|
- Avant une opération critique
|
|
- En cas de doute sur la base de données
|
|
- Dans une tâche de maintenance
|
|
|
|
### Commandes
|
|
|
|
```bash
|
|
# Via pnpm script
|
|
pnpm run backup:verify
|
|
|
|
# Via CLI complet
|
|
pnpm tsx scripts/backup-manager.ts verify
|
|
```
|
|
|
|
### Vérifications effectuées
|
|
|
|
1. **Test de connexion** à la base
|
|
2. **PRAGMA integrity_check** SQLite
|
|
3. **Validation** de la structure
|
|
4. **Rapport** détaillé
|
|
|
|
## Maintenance
|
|
|
|
### Nettoyage automatique
|
|
|
|
Le système supprime automatiquement les anciennes sauvegardes selon `maxBackups`.
|
|
|
|
### Nettoyage manuel
|
|
|
|
```bash
|
|
# Supprimer une sauvegarde spécifique
|
|
pnpm tsx scripts/backup-manager.ts delete towercontrol_2025-01-15T10-30-00-000Z.db.gz
|
|
|
|
# Forcer la suppression
|
|
pnpm tsx scripts/backup-manager.ts delete towercontrol_2025-01-15T10-30-00-000Z.db.gz --force
|
|
```
|
|
|
|
### Surveillance des logs
|
|
|
|
Les opérations de sauvegarde sont loggées dans la console de l'application.
|
|
|
|
## Dépannage
|
|
|
|
### Problèmes courants
|
|
|
|
#### Erreur "sqlite3 command not found"
|
|
|
|
```bash
|
|
# Sur macOS
|
|
brew install sqlite
|
|
|
|
# Sur Ubuntu/Debian
|
|
sudo apt-get install sqlite3
|
|
```
|
|
|
|
#### Permissions insuffisantes
|
|
|
|
```bash
|
|
# Vérifier les permissions du dossier de sauvegarde
|
|
ls -la backups/
|
|
|
|
# Modifier si nécessaire
|
|
chmod 755 backups/
|
|
```
|
|
|
|
#### Espace disque insuffisant
|
|
|
|
```bash
|
|
# Vérifier l'espace disponible
|
|
df -h
|
|
|
|
# Supprimer d'anciennes sauvegardes
|
|
pnpm tsx scripts/backup-manager.ts list
|
|
pnpm tsx scripts/backup-manager.ts delete <filename>
|
|
```
|
|
|
|
### Logs de debug
|
|
|
|
Pour activer le debug détaillé, modifier `services/database.ts` :
|
|
|
|
```typescript
|
|
export const prisma =
|
|
globalThis.__prisma ||
|
|
new PrismaClient({
|
|
log: ['query', 'info', 'warn', 'error'], // Debug activé
|
|
});
|
|
```
|
|
|
|
## Sécurité
|
|
|
|
### Bonnes pratiques
|
|
|
|
1. **Stockage externe** : Copier régulièrement les sauvegardes hors du serveur
|
|
2. **Chiffrement** : Considérer le chiffrement pour les données sensibles
|
|
3. **Accès restreint** : Limiter l'accès au dossier de sauvegarde
|
|
4. **Tests réguliers** : Vérifier la restauration périodiquement
|
|
|
|
### Variables d'environnement
|
|
|
|
```bash
|
|
# Configuration des chemins de base de données
|
|
DATABASE_URL="file:./prisma/dev.db" # Pour Prisma
|
|
BACKUP_DATABASE_PATH="./prisma/dev.db" # Base à sauvegarder (optionnel)
|
|
BACKUP_STORAGE_PATH="./backups" # Dossier des sauvegardes (optionnel)
|
|
```
|
|
|
|
### Docker
|
|
|
|
En environnement Docker, tout est centralisé dans le dossier `data/` :
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
environment:
|
|
DATABASE_URL: 'file:./data/prod.db' # Base de données Prisma
|
|
BACKUP_DATABASE_PATH: './data/prod.db' # Base à sauvegarder
|
|
BACKUP_STORAGE_PATH: './data/backups' # Dossier des sauvegardes
|
|
volumes:
|
|
- ./data:/app/data # Bind mount vers dossier local
|
|
```
|
|
|
|
**Structure des dossiers :**
|
|
|
|
```
|
|
./data/ # Dossier local mappé
|
|
├── prod.db # Base de données production
|
|
├── dev.db # Base de données développement
|
|
└── backups/ # Sauvegardes (créé automatiquement)
|
|
├── towercontrol_*.db.gz
|
|
└── ...
|
|
```
|
|
|
|
## API
|
|
|
|
### Endpoints disponibles
|
|
|
|
```
|
|
GET /api/backups # Lister les sauvegardes
|
|
POST /api/backups # Actions (create, verify, config, scheduler)
|
|
DELETE /api/backups/[filename] # Supprimer une sauvegarde
|
|
POST /api/backups/[filename] # Restaurer (dev seulement)
|
|
```
|
|
|
|
### Exemples d'utilisation
|
|
|
|
```typescript
|
|
// Créer une sauvegarde
|
|
const response = await fetch('/api/backups', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ action: 'create' }),
|
|
});
|
|
|
|
// Lister les sauvegardes
|
|
const response = await fetch('/api/backups');
|
|
const data = await response.json();
|
|
```
|
|
|
|
## Architecture
|
|
|
|
```
|
|
services/
|
|
├── backup.ts # Service principal de sauvegarde
|
|
└── backup-scheduler.ts # Planificateur automatique
|
|
|
|
src/app/api/backups/
|
|
├── route.ts # API endpoints principaux
|
|
└── [filename]/route.ts # Actions sur fichiers spécifiques
|
|
|
|
clients/
|
|
└── backup-client.ts # Client HTTP pour l'interface
|
|
|
|
components/settings/
|
|
├── AdvancedSettingsPageClient.tsx # Vue d'ensemble dans paramètres
|
|
└── BackupSettingsPageClient.tsx # Gestion complète
|
|
|
|
scripts/
|
|
└── backup-manager.ts # CLI d'administration
|
|
```
|
|
|
|
## Roadmap
|
|
|
|
### Version actuelle ✅
|
|
|
|
- Sauvegardes automatiques et manuelles
|
|
- Interface graphique complète
|
|
- CLI d'administration
|
|
- Compression et rétention
|
|
|
|
### Améliorations futures 🚧
|
|
|
|
- Sauvegarde vers cloud (S3, Google Drive)
|
|
- Chiffrement des sauvegardes
|
|
- Notifications par email
|
|
- Métriques de performance
|
|
- Sauvegarde incrémentale
|