Sikkerhetskopiering & Gjenoppretting
Alt Conzent lagrer finnes i Docker-volumer og én konfigurasjonsfil. Denne siden dekker hva som er verdt å sikkerhetskopiere, hvordan du automatiserer det, og hvordan du får alt tilbake.
Hva som faktisk holder dataene dine
Docker Compose oppretter fem navngitte volumer. Bare to inneholder noe du ikke kan gjenoppbygge.
| Volum / fil | Innhold | Sikkerhetskopiere? |
|---|---|---|
oci-db-data | MariaDB: nettsteder, bannere, samtykke logger, informasjonskategorier, retningslinjer, brukere, skanneresultater | Ja — dette er alt |
app-sites-data | Genererte samtykkeskript | Ja, selv om de kan regenereres |
.env | Databasepassord, skanner-nøkkel, tredjeparts legitimasjon | Ja — uerstattelig |
app-public | Bygde CSS/JS-ressurser | Nei — gjenoppbygges fra bildet |
app-var | Cache og logger | Nei |
oci-redis-data | Økter, jobb-kø, beacon-buffer | Nei — midlertidig etter design |
scripts/backup.sh fanger nøyaktig de første tre, pluss .conzent-credentials hvis den fortsatt eksisterer.
Samtykkeskriptene er inkludert fordi gjenoppretting av dem holder aktive bannere i drift i løpet av minuttene mellom en gjenoppretting og en regenerering — men de er ikke kilden til sannhet. Hvis de ble helt tapt, php bin/oci scripts:regenerate gjenoppbygger hver enkelt fra databasen.
Ta en sikkerhetskopi
bash scripts/backup.sh
Det skriver backups/conzent-YYYYmmdd-HHMMSS.tar.gz som inneholder hele database dumpen, de genererte samtykkeskriptene, din .env, og et manifest som registrerer når det ble tatt og fra hvilken APP_URL.
bash scripts/backup.sh --output /mnt/backups # skriv et annet sted
bash scripts/backup.sh --keep 14 # behold kun de 14 nyeste arkivene
Dumpen bruker --single-transaction, så InnoDB-tabeller fanges konsekvent uten å blokkere skrivinger. Det er ikke nødvendig å stoppe applikasjonen først.
Arkivet inneholder databasen din og hemmelighetene dine. Det skrives i modus 600. Behandle det som en passordfil: oppbevar det utenfor serveren, og krypter det hvis det havner noe sted delt.
Automatisering
En nattlig sikkerhetskopi kl. 03:00, som beholder to uker:
0 3 * * * cd /path/to/conzent && /bin/bash scripts/backup.sh --keep 14 >> /var/log/conzent-backup.log 2>&1
Bruk den absolutte stien til installasjonskatalogen din — cron arver ikke arbeidskatalogen til skallet ditt.
En sikkerhetskopi på samme disk som databasen er ikke en sikkerhetskopi. Legg til et offsite-trinn:
15 3 * * * rsync -az /path/to/conzent/backups/ backup-host:/srv/conzent-backups/
Krypter før det forlater hvis destinasjonen ikke er din: gpg --symmetric --cipher-algo AES256 backups/conzent-....tar.gz.
Gjenoppretting
bash scripts/restore.sh backups/conzent-20260722-030000.tar.gz --yes
--yes er obligatorisk — gjenopprettingen erstatter den nåværende databasen helt. Hva den gjør, i rekkefølge:
- Pakker ut og validerer arkivet, skriver ut manifestet.
- Stopper applikasjonscontainerne, og lar MariaDB kjøre.
- Importer dumpen til databasen som er angitt i din nåværende
.env. - Gjenoppretter samtykkeskriptvolumet.
- Starter alt opp igjen.
- Kjører
migrations:migrate, slik at et eldre arkiv blir oppdatert til skjemaet denne versjonen forventer. - Kjører
scripts:regenerate, slik at skriptene blir gjenoppbygget mot din nåværendeAPP_URL, ikke den i arkivet. - Tømmer Redis.
Trinn 6 og 7 er grunnen til at en sikkerhetskopi tatt på old-domain.com gjenopprettes rent til en installasjon som nå serverer consent.example.com.
Som standard blir din eksisterende .env liggende urørt. For å ta med arkivversjonen også, legg til --restore-env; din forrige fil beholdes som .env.before-restore-<timestamp>. Bruk den når du gjenoppbygger en tapt server, ikke når du ruller tilbake data på en fungerende — den arkiverte DB_PASSWORD vil ikke samsvare med en nyinitiert database.
Bygge en server fra bunnen av
# 1. Ny installasjon på den nye maskinen
curl -sSL https://getconzent.com/install | sh -s -- --domain consent.example.com
# 2. Kopier arkivet over
scp backups/conzent-20260722-030000.tar.gz newhost:/root/conzent/
# 3. Gjenopprett data og konfigurasjon
cd /root/conzent
bash scripts/restore.sh conzent-20260722-030000.tar.gz --yes --restore-env
# 4. Hvis domenet har endret seg, sett det og regenerer
sed -i 's|^APP_URL=.*|APP_URL=https://consent.example.com|' .env
docker compose up -d
docker compose exec app php bin/oci scripts:regenerate
Kjør en gjenopprettingsøvelse
En utestet sikkerhetskopi er et gjetning. Gjør dette én gang, før du trenger det:
- Noter et nettstednavn, innstillingene for banneret, og dagens samtykke-logg telling.
- Ta en sikkerhetskopi.
- På en annen maskin eller VM, installer friskt og gjenopprett arkivet.
- Logg inn og bekreft at nettstedet, bannerkonfigurasjonen, og samtykkeloggene er der.
- Last inn en side som bærer det nettstedets innebygging og sjekk at banneret fortsatt vises.
Ti minutter nå, mot å oppdage gapet under en hendelse.
Før hver oppgradering
Oppdateringer bevarer databasen din, men ta en sikkerhetskopi først uansett — en migrasjon er den ene tingen en gjenoppretting ikke kan angre:
bash scripts/backup.sh --keep 14 && bash scripts/install.sh --update
Den fullstendige referansen finnes med koden: docs/backup-restore.md på GitHub.