@@ -0,0 +1,83 @@
|
||||
# Back-up en herstel
|
||||
|
||||
## Wat moet worden beschermd
|
||||
|
||||
Prioriteit:
|
||||
|
||||
1. PostgreSQL-database of lokale SQLite-database;
|
||||
2. productie-`.env` en reverse-proxyconfiguratie, versleuteld en apart;
|
||||
3. `media/` met gebruikersdocumenten/snapshots wanneer die functie actief is;
|
||||
4. `config-data/` met niet-geheime bron- en profielconfiguratie;
|
||||
5. immutable image/tag en de bijbehorende repositoryrelease.
|
||||
|
||||
Redis is een werkqueue/cache en hoeft normaal niet te worden hersteld. Ollama-modellen kunnen opnieuw worden gedownload; behoud alleen wanneer bandbreedte of modelbeschikbaarheid dat vereist.
|
||||
|
||||
## Minimumniveau
|
||||
|
||||
- database dagelijks;
|
||||
- configuratie na iedere wijziging;
|
||||
- minstens 7 dagelijkse en 4 wekelijkse herstelpunten;
|
||||
- back-up op een ander fysiek of logisch opslagdoel;
|
||||
- checksums op ieder archief;
|
||||
- minstens per kwartaal een volledige hersteltest;
|
||||
- gevoelige back-ups versleuteld at rest en tijdens transport.
|
||||
|
||||
## Repositoryscripts
|
||||
|
||||
```bash
|
||||
./scripts/backup.sh
|
||||
```
|
||||
|
||||
Het script gebruikt `pg_dump` wanneer `DATABASE_URL` PostgreSQL is en anders een kopie van `local/db.sqlite3`. Het maakt daarnaast een bestandsarchief en SHA-256-lijst. Voor productie moet de uitvoerdirectory naar een beschermd extern volume worden gesynchroniseerd; een back-up naast de live database is geen volwaardige back-up.
|
||||
|
||||
Herstel één databasebestand:
|
||||
|
||||
```bash
|
||||
./scripts/restore.sh /pad/naar/vacatureradar-YYYYMMDDTHHMMSSZ.sql.gz
|
||||
# of
|
||||
./scripts/restore.sh /pad/naar/vacatureradar-YYYYMMDDTHHMMSSZ.sqlite3
|
||||
```
|
||||
|
||||
## PostgreSQL-consistente back-up
|
||||
|
||||
Aanbevolen vanuit een beheercontainer of host met clienttools:
|
||||
|
||||
```bash
|
||||
pg_dump --format=custom --no-owner --no-acl "$DATABASE_URL" \
|
||||
> vacatureradar-$(date -u +%Y%m%dT%H%M%SZ).dump
|
||||
sha256sum vacatureradar-*.dump > SHA256SUMS
|
||||
```
|
||||
|
||||
De huidige scriptvariant gebruikt gecomprimeerde SQL voor brede compatibiliteit. Een custom-formatdump maakt selectiever herstel mogelijk; kies één formaat en test exact dat formaat.
|
||||
|
||||
## Veilige herstelprocedure
|
||||
|
||||
1. Meld onderhoud en blokkeer externe toegang.
|
||||
2. Stop scheduler en worker; stop daarna web zodat geen writes meer gebeuren.
|
||||
3. Maak een forensische kopie van de defecte huidige database/volumes.
|
||||
4. Verifieer checksum, datum, appversie en migratieniveau van de back-up.
|
||||
5. Herstel naar een lege database of aparte testinstantie.
|
||||
6. Gebruik de code/image die bij het back-upmoment hoort.
|
||||
7. Voer migraties alleen vooruit uit nadat de restore op dat oude niveau goed opent.
|
||||
8. Draai health, modelcounts, fixture-import en applicatiesmoke-test.
|
||||
9. Start web, daarna worker en precies één scheduler.
|
||||
10. Documenteer RPO/RTO, verloren wijzigingen en vervolgactie.
|
||||
|
||||
## Hersteltest
|
||||
|
||||
Een hersteltest is pas geslaagd wanneer:
|
||||
|
||||
- checksum is geverifieerd;
|
||||
- database start zonder reparaties;
|
||||
- migratiestatus verklaarbaar is;
|
||||
- aantallen gebruikers, profielen, jobs, bronaliassen, sollicitaties en outboxrecords plausibel zijn;
|
||||
- een bestaande vacaturedetailpagina opent;
|
||||
- een fixture idempotent importeert;
|
||||
- een score en digest kunnen worden aangemaakt;
|
||||
- geen live mailbox of bron onbedoeld wordt gepolld in de testomgeving.
|
||||
|
||||
Gebruik in een hersteltest `IMAP_ENABLED=0`, `CELERY_TASK_ALWAYS_EAGER=1`, consolemail en geen live source polling.
|
||||
|
||||
## Verwijdering en privacy
|
||||
|
||||
Back-ups verlengen feitelijk de bewaartermijn. Documenteer hoe verwijderde persoonsgegevens na de normale rotatie ook uit back-ups verdwijnen. Gebruik korte retentie voor ruwe vacaturemails en bewaar geen mailboxcredentials in databasedumps.
|
||||
Reference in New Issue
Block a user