Das Management der Backups erfolgt mit Restic und resticker, welches restic
mit einem Docker Compose-Setup automatisch regelmäßig ausführt, siehe diese Ansible-Role.
Restic-backups lagern verschlüsselt in einem restic-repository; einzelne Backups werden dabei Snapshots genannt und je mit einem Hash (z.B. "40dc1520") referenziert.
In "PRE_COMMANDS" sind Commands definiert, die vor dem eigentlichen Snapshot-Erstellen laufen.
Sie führen auf dem Datenbank-Container der jeweiligen Dienste je ein pg_dump aus.
Danach wird ein neuer Snapshot erstellt. Läuft täglich um 3:30.
Diese werden gespeichert auf einer Hetzner Storage Box, siehe die Definition des restic-backup-volumes.
'Vergisst' alte snapshots; dabei werden immer behalten (siehe restic forget
-docs):
Danach läuft restic prune
, welches die nun unreferenzierten (vergessenen) Snapshots löscht.
Läuft täglich um 4:00.
restic check
prüft die Integrität des Restic-repository. Läuft täglich um 5:15.
restic restore
braucht einen Snapshot-Hash oder 'latest'), siehe offizielle Docs.
Sie beinhalten meist ein Stoppen des entsprechenden docker-compose-stacks gefolgt von einem docker exec resticker restic restore <snapshot-hash>:path
und weiterem Setup.
# https://github.com/DoTheEvo/selfhosted-apps-docker/tree/master/zammad#backup-and-restore
docker compose --project-directory /opt/containers/zammad-stack down --remove-orphans
docker exec resticker restic restore <snapshot-hash>:/mnt/volumes/zammad --include zammad_production.pg_dump --target /mnt/volumes/zammad
docker compose --project-directory /opt/containers/zammad-stack up -d zammad-postgresql
docker compose --project-directory /opt/containers/zammad-stack exec zammad-postgresql bash -c "dropdb zammad_production -U zammad"
docker compose --project-directory /opt/containers/zammad-stack exec zammad-postgresql bash -c "createdb zammad_production -U zammad"
docker compose --project-directory /opt/containers/zammad-stack exec zammad-postgresql bash -c "psql -U zammad zammad_production < /var/tmp/zammad/zammad_production.pg_dump"
docker compose --project-directory /opt/containers/zammad-stack up -d --force-recreate
docker compose --project-directory /opt/containers/zammad-stack run --rm zammad-railsserver rake zammad:searchindex:rebuild
docker compose --project-directory /opt/containers/vaultwarden down --remove-orphans
docker exec resticker restic restore <snapshot-hash>:/mnt/volumes/vaultwarden --target /mnt/volumes/vaultwarden
docker compose --project-directory /opt/containers/vaultwarden up -d --force-recreate
> ?
# https://vikunja.io/docs/what-to-backup
docker compose --project-directory /opt/containers/vikunja-stack stop vikunja
docker exec resticker restic restore <snapshot-hash>:/mnt/volumes/vikunja --target /mnt/volumes/vikunja
docker compose --project-directory /opt/containers/vikunja-stack exec db bash -c "dropdb vikunja -U vikunja"
docker compose --project-directory /opt/containers/vikunja-stack exec db bash -c "createdb vikunja -U vikunja"
docker compose --project-directory /opt/containers/vikunja-stack exec db bash -c "psql -U vikunja vikunja < /var/tmp/vikunja.pg_dump"
docker compose --project-directory /opt/containers/vikunja-stack up -d --force-recreate
docker compose --project-directory /opt/containers/wikijs-stack stop wikijs
docker exec resticker restic restore <snapshot-hash>:/mnt/volumes/wikijs --include wikijs.pg_dump --target /mnt/volumes/wikijs
docker compose --project-directory /opt/containers/wikijs-stack exec wikijs-postgres bash -c "dropdb wikijs -U wikijs"
docker compose --project-directory /opt/containers/wikijs-stack exec wikijs-postgres bash -c "createdb wikijs -U wikijs"
docker compose --project-directory /opt/containers/wikijs-stack exec wikijs-postgres bash -c "psql -U wikijs wikijs < /var/tmp/wikijs.pg_dump"
docker compose --project-directory /opt/containers/wikijs-stack up -d --force-recreate