Sikkerhetskopiering & Gjenoppretting

Hva som holder dataene dine i en selvhostet Conzent OCI-installasjon, hvordan du sikkerhetskopierer det på en tidsplan, og hvordan du gjenoppretter det på en ny server.

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:

  1. Pakker ut og validerer arkivet, skriver ut manifestet.
  2. Stopper applikasjonscontainerne, og lar MariaDB kjøre.
  3. Importer dumpen til databasen som er angitt i din nåværende .env.
  4. Gjenoppretter samtykkeskriptvolumet.
  5. Starter alt opp igjen.
  6. Kjører migrations:migrate, slik at et eldre arkiv blir oppdatert til skjemaet denne versjonen forventer.
  7. Kjører scripts:regenerate, slik at skriptene blir gjenoppbygget mot din nåværende APP_URL, ikke den i arkivet.
  8. 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:

  1. Noter et nettstednavn, innstillingene for banneret, og dagens samtykke-logg telling.
  2. Ta en sikkerhetskopi.
  3. På en annen maskin eller VM, installer friskt og gjenopprett arkivet.
  4. Logg inn og bekreft at nettstedet, bannerkonfigurasjonen, og samtykkeloggene er der.
  5. 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.

Tilbake til Dokumentasjon