Capitolo 8 · 8.2
Salvare correttamente database e volumi Docker
Un database in esecuzione scrive continuamente nei suoi file. Se Lei copia quei file a metà di una scrittura, il Suo backup potrebbe risultare danneggiato. Per questo si crea prima un dump: una copia ordinata del database in un unico file.
Dove si trovano i Suoi dati?
| Cosa | Dove |
|---|---|
I Suoi file compose, Caddyfile, .env e cartelle come vw-data | /srv/diensten |
Volumi Docker, come uptime-kuma e n8n-data | /var/lib/docker/volumes/diensten_<naam>/_data |
| Dump dei database | /var/backups/db |
| Impostazioni del server | /etc |
Docker antepone il nome della Sua cartella al nome del volume: in /srv/diensten, quindi, uptime-kuma diventa diensten_uptime-kuma. Può visualizzare i nomi effettivi con sudo docker volume ls.
Lo script di preparazione
Inserisca questo in /usr/local/sbin/voor-backup.sh (chmod 700). Viene avviato dallo script di backup descritto in Backup con restic verso un'altra destinazione.
#!/bin/sh
set -e
mkdir -p /var/backups/db
chmod 700 /var/backups/db
cd /srv/diensten
# WordPress-database (MariaDB) als dump
docker compose exec -T wp-db sh -c \
'mariadb-dump --single-transaction -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE"' \
> /var/backups/db/wordpress.sql
Se non utilizza WordPress, ometta quella parte. Se ha un database al di fuori di Docker, la procedura è la stessa con mariadb-dump --single-transaction o pg_dump.
App con un database SQLite
Vaultwarden, Uptime Kuma e n8n conservano per impostazione predefinita i loro dati in un file SQLite all'interno del rispettivo volume o cartella. La soluzione più semplice e sicura è fermarle brevemente durante il backup. Lo script di backup descritto in Backup con restic verso un'altra destinazione lo fa con docker compose stop e successivamente docker compose start. Di solito richiede solo un momento; di notte nessuno se ne accorge. Se non desidera alcuna interruzione, segua le istruzioni di backup dell'app stessa, come quelle presenti nella wiki di Vaultwarden.
La cartella del database vero e proprio (qui diensten_wp-db) può essere esclusa: per quella c'è il dump.
Ripristinare un'app
- Fermi l'app:
sudo docker compose stop vaultwarden. - Recuperi la cartella:
sudo restic restore latest --target /tmp/terug --include /srv/diensten/vw-data(con le variabili descritte in Backup con restic verso un'altra destinazione). - Sostituisca la cartella con la versione ripristinata e riavvii l'app.
- Un database si ripristina importando il dump, ad esempio
docker compose exec -T wp-db sh -c 'mariadb -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE"' < wordpress.sql.
