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:
@@ -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=
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user