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"
|
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=noreply@decp.info # expéditeur (doit être un expéditeur vérifié dans Brevo)
|
||||||
MAIL_FROM_NAME=decp.info # nom d'expéditeur
|
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
|
- `main` branch → manual deploy to decp.info via GitHub Actions
|
||||||
- `dev` branch → auto-deploy to test.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.
|
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
|
## Liens connexes
|
||||||
|
|
||||||
- [decp-processing](https://github.com/ColinMaudry/decp-processing) (traitement et publication des données)
|
- [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