feat(backup): unités systemd, variables d'env et doc de déploiement (#89)

Ajoute les artefacts de déploiement finaux pour la sauvegarde systématisée
de users.sqlite sur S3 :
- Service systemd pour exécuter le backup (oneshot)
- Timer systemd pour le déclencher toutes les heures
- Variables d'env pour configuration S3 et chiffrement
- Documentation d'installation et restauration dans CLAUDE.md
- Guide rapide dans README.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Colin Maudry
2026-06-24 17:29:03 +02:00
parent 196a9db8c1
commit 02df6c10a0
5 changed files with 72 additions and 0 deletions
+11
View File
@@ -39,3 +39,14 @@ BREVO_TEMPLATE_VERIFY_ID= # ID numérique du template "vérification
BREVO_TEMPLATE_RESET_ID= # ID numérique du template "réinitialisation mot de passe"
MAIL_FROM=noreply@decp.info # expéditeur (doit être un expéditeur vérifié dans Brevo)
MAIL_FROM_NAME=decp.info # nom d'expéditeur
# Sauvegarde de users.sqlite vers un stockage S3-compatible
S3_ENDPOINT_URL=https://s3.exemple.net
S3_BUCKET=decp-backups
S3_BACKUP_PREFIX=backups
S3_ACCESS_KEY_ID=
S3_SECRET_ACCESS_KEY=
# Clé Fernet : générer avec
# python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# À CONSERVER HORS DU SERVEUR : sans elle, les sauvegardes sont irrécupérables.
BACKUP_ENCRYPTION_KEY=
+23
View File
@@ -96,3 +96,26 @@ Tests require a running Chrome/Chromium browser. They use `DashComposite` from `
- `main` branch → manual deploy to decp.info via GitHub Actions
- `dev` branch → auto-deploy to test.decp.info via GitHub Actions
#### Sauvegarde de la base utilisateurs
`users.sqlite` est sauvegardée toutes les heures sur S3 par un timer systemd
(voir `deploy/decpinfo-backup.{service,timer}`). Installation initiale (une fois,
sur le serveur, en root) :
```bash
cp deploy/decpinfo-backup.service deploy/decpinfo-backup.timer /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now decpinfo-backup.timer
systemctl list-timers decpinfo-backup.timer # vérifier le prochain déclenchement
```
Restauration manuelle :
```bash
cd /var/www/decpinfo && source .venv/bin/activate
python -m src.backup list
systemctl stop decpinfo
python -m src.backup restore backups/users-YYYYMMDDTHHMMSSZ.sqlite.gz.enc
systemctl start decpinfo
```
+18
View File
@@ -25,6 +25,24 @@ uv run run.py
Ne pas oublier de mettre à jour les fichier .env.
### Sauvegarde de la base utilisateurs
`users.sqlite` est sauvegardée toutes les heures sur S3 via un timer systemd. Pour lister les sauvegardes disponibles :
```bash
python -m src.backup list
```
Pour restaurer une sauvegarde, arrêtez le service, restaurez la base, puis redémarrez :
```bash
systemctl stop decpinfo
python -m src.backup restore backups/users-YYYYMMDDTHHMMSSZ.sqlite.gz.enc
systemctl start decpinfo
```
Voir `CLAUDE.md` pour la documentation complète de déploiement.
## Liens connexes
- [decp-processing](https://github.com/ColinMaudry/decp-processing) (traitement et publication des données)
+11
View File
@@ -0,0 +1,11 @@
[Unit]
Description=Sauvegarde horaire de users.sqlite (decp.info) vers S3
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=decpinfo
WorkingDirectory=/var/www/decpinfo
EnvironmentFile=/var/www/decpinfo/.env
ExecStart=/var/www/decpinfo/.venv/bin/python -m src.backup backup
+9
View File
@@ -0,0 +1,9 @@
[Unit]
Description=Déclenche la sauvegarde horaire de users.sqlite (decp.info)
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target