Backup & Gendan

Hvad der holder dine data i en selvhostet Conzent OCI-installation, hvordan du sikkerhedskopierer det efter en tidsplan, og hvordan du gendanner det på en ny server.

Backup & Gendan

Alt, hvad Conzent gemmer, findes i Docker-volumener og en konfigurationsfil. Denne side dækker, hvad der er værd at sikkerhedskopiere, hvordan man automatiserer det, og hvordan man får det hele tilbage.

Hvad holder faktisk dine data

Docker Compose opretter fem navngivne volumener. Kun to indeholder noget, du ikke kan genskabe.

Volume / fil Indhold Sikkerhedskopiere det?
oci-db-data MariaDB: sites, bannere, samtykke logs, cookie kategorier, politikker, brugere, scanningsresultater Ja — dette er alt
app-sites-data Genererede samtykkescripts Ja, selvom de kan regenereres
.env Databaseadgangskode, scanner-nøgle, tredjeparts legitimationsoplysninger Ja — uerstattelig
app-public Byggede CSS/JS aktiver Nej — genskabes fra billedet
app-var Cache og logs Nej
oci-redis-data Sessioner, jobkø, beacon buffer Nej — midlertidig af design

scripts/backup.sh fanger præcis de første tre, plus .conzent-credentials, hvis den stadig eksisterer.

Samtykkescripts er inkluderet, fordi gendannelse af dem holder live bannere fungerende i minutterne mellem en gendannelse og en regenerering — men de er ikke kilden til sandhed. Hvis de blev helt tabt, php bin/oci scripts:regenerate genskaber hver enkelt fra databasen.

Tag en sikkerhedskopi

bash scripts/backup.sh

Det skriver backups/conzent-YYYYmmdd-HHMMSS.tar.gz, der indeholder det fulde database dump, de genererede samtykkescripts, din .env, og et manifest, der registrerer, hvornår det blev taget, og fra hvilken APP_URL.

bash scripts/backup.sh --output /mnt/backups     # skriv et andet sted
bash scripts/backup.sh --keep 14                 # behold kun de 14 nyeste arkiver

Dumpen bruger --single-transaction, så InnoDB-tabeller fanges konsekvent uden at blokere skrivninger. Der er ikke behov for at stoppe applikationen først.

Arkivet indeholder din database og dine hemmeligheder. Det skrives i mode 600. Behandl det som en adgangskodefil: opbevar det uden for serveren, og krypter det, hvis det lander et sted, der deles.

Automatisering

En natlig sikkerhedskopi kl. 03:00, der holder i to uger:

0 3 * * * cd /path/to/conzent && /bin/bash scripts/backup.sh --keep 14 >> /var/log/conzent-backup.log 2>&1

Brug den absolutte sti til din installationsmappe — cron arver ikke din shells arbejdsmappe.

En sikkerhedskopi på samme disk som databasen er ikke en sikkerhedskopi. Tilføj et offsite trin:

15 3 * * * rsync -az /path/to/conzent/backups/ backup-host:/srv/conzent-backups/

Krypter, før det forlader, hvis destinationen ikke er din: gpg --symmetric --cipher-algo AES256 backups/conzent-....tar.gz.

Gendannelse

bash scripts/restore.sh backups/conzent-20260722-030000.tar.gz --yes

--yes er obligatorisk — gendannelsen erstatter den nuværende database helt. Hvad det gør, i rækkefølge:

  1. Udpakker og validerer arkivet, printer dets manifest.
  2. Stopper applikationscontainere, mens MariaDB kører.
  3. Importer dumpen i databasen, der er angivet i din nuværende .env.
  4. Gendanner samtykkescripts volumen.
  5. Starter alt op igen.
  6. Kører migrations:migrate, så et ældre arkiv bringes op til det skema, denne version forventer.
  7. Kører scripts:regenerate, så scripts genskabes mod din nuværende APP_URL, ikke den i arkivet.
  8. Flusher Redis.

Trin 6 og 7 er grunden til, at en sikkerhedskopi taget på old-domain.com gendanner rent på en installation, der nu serverer consent.example.com.

Som standard efterlades din eksisterende .env uændret. For at tage arkivets version også, tilføj --restore-env; din tidligere fil opbevares som .env.before-restore-<timestamp>. Brug den, når du genskaber en tabt server, ikke når du ruller data tilbage på en fungerende — den arkiverede DB_PASSWORD vil ikke matche en nyinitieret database.

Genopbygning af en server fra bunden

# 1. Frisk installation på den nye maskine
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. Gendan data og konfiguration
cd /root/conzent
bash scripts/restore.sh conzent-20260722-030000.tar.gz --yes --restore-env

# 4. Hvis domænet ændrede sig, indstil 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

Kør en gendannelsesøvelse

En uafprøvet sikkerhedskopi er et gæt. Gør dette én gang, før du har brug for det:

  1. Noter et site navn, dets bannerindstillinger, og dagens samtykke-log antal.
  2. Tag en sikkerhedskopi.
  3. På en separat maskine eller VM, installer frisk og gendan arkivet.
  4. Log ind og bekræft, at site, bannerkonfiguration og samtykke logs alle er der.
  5. Indlæs en side, der bærer det sites embed, og tjek, at banneret stadig vises.

Ti minutter nu, i stedet for at opdage hullet under en hændelse.

Før hver opgradering

Opdateringer bevarer din database, men tag en sikkerhedskopi først alligevel — en migration er den ene ting, en gendannelse ikke kan fortryde:

bash scripts/backup.sh --keep 14 && bash scripts/install.sh --update

Den fulde reference findes med koden: docs/backup-restore.md på GitHub.

Tilbage til Dokumentation