Capítulo 8 · 8.2
Incluir corretamente bases de dados e volumes Docker na cópia de segurança
Uma base de dados em funcionamento está sempre a escrever nos seus ficheiros. Se copiar esses ficheiros a meio dessa escrita, a sua cópia de segurança pode ficar danificada. Por isso, cria-se primeiro um dump: uma cópia limpa da base de dados num único ficheiro.
Onde estão os seus dados?
| O quê | Onde |
|---|---|
Os seus ficheiros compose, Caddyfile, .env e pastas como vw-data | /srv/diensten |
Volumes Docker, como uptime-kuma e n8n-data | /var/lib/docker/volumes/diensten_<naam>/_data |
| Dumps de bases de dados | /var/backups/db |
| Definições do servidor | /etc |
O Docker coloca o nome da sua pasta antes do nome do volume: em /srv/diensten, uptime-kuma passa, portanto, a ser diensten_uptime-kuma. Consulte os nomes reais com sudo docker volume ls.
O script de preparação
Coloque isto em /usr/local/sbin/voor-backup.sh (chmod 700). É iniciado pelo script de cópia de segurança de Cópias de segurança com restic para outro local.
#!/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 não utiliza WordPress, omita essa parte. Se tiver uma base de dados fora do Docker, o procedimento é igual com mariadb-dump --single-transaction ou pg_dump.
Apps com uma base de dados SQLite
O Vaultwarden, o Uptime Kuma e o n8n guardam, por predefinição, os seus dados num ficheiro SQLite no respetivo volume ou pasta. A forma mais simples e segura é pará-los por momentos durante a cópia de segurança. O script de cópia de segurança de Cópias de segurança com restic para outro local faz isso com docker compose stop e, depois, docker compose start. Normalmente, isto demora apenas um instante; durante a noite, ninguém dá por isso. Se não quiser qualquer interrupção, siga as instruções de cópia de segurança da própria app, como as da wiki do Vaultwarden.
A pasta da própria base de dados (aqui diensten_wp-db) é ignorada: para isso existe o dump.
Restaurar uma app
- Pare a app:
sudo docker compose stop vaultwarden. - Recupere a pasta:
sudo restic restore latest --target /tmp/terug --include /srv/diensten/vw-data(com as variáveis de Cópias de segurança com restic para outro local). - Substitua a pasta pela versão restaurada e volte a iniciar a app.
- Uma base de dados é restaurada importando o dump, por exemplo
docker compose exec -T wp-db sh -c 'mariadb -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE"' < wordpress.sql.
