Backup Bot II: This Time It's Easily Configurable
Go to file
3wc a990dc27c7 SSH host keys, split out swarm-cronjob 2021-11-10 22:02:13 +02:00
.env.sample SSH host keys, split out swarm-cronjob 2021-11-10 22:02:13 +02:00
.envrc.sample Bash command line handling showdown 2021-11-09 15:25:43 +02:00
Dockerfile Allow overriding cron schedule, fix vars 2021-11-10 21:17:12 +02:00
README.md SSH host keys, split out swarm-cronjob 2021-11-10 22:02:13 +02:00
backup.sh SSH host keys, split out swarm-cronjob 2021-11-10 22:02:13 +02:00
compose.s3.yml Work-in-progress: split S3 & SSH storage 2021-11-09 12:37:56 +02:00
compose.ssh.yml SSH host keys, split out swarm-cronjob 2021-11-10 22:02:13 +02:00
compose.swarmm-cronjob.yml SSH host keys, split out swarm-cronjob 2021-11-10 22:02:13 +02:00
compose.yml SSH host keys, split out swarm-cronjob 2021-11-10 22:02:13 +02:00
setup-cron.sh Allow overriding cron schedule, fix vars 2021-11-10 21:17:12 +02:00

README.md

Backupbot II: This Time It's Easily Configurable

Automatically backup files from running Docker Swarm services based on labels.

Background

There are lots of Docker volume backup systems; all of them have one or both of these problems:

  • You need to define all the volumes to back up in the configuration system
  • Backups require services to be stopped to take consistent copies

Backupbot II tries to solve these problems by letting you define how to back up your services using Docker labels, so you can easily collect your backups for use with another system like docker-volume-backup.

TODO

A first stab:

  • Make a Docker image of this
  • Add secret handling for database backups
  • SSH remote storage
    • Add SSH key handling
    • SSH host key checking
  • S3 remote storage
  • Re-add crond support

Future:

  • Continuous linting with shellcheck
  • Rip out or improve Restic stuff

Label format

services:
  db:
    deploy:
      labels:
        backupbot.backup: "true"
        backupbot.backup.repos: "$some_thing"
        backupbot.backup.at: "* * * * *"
        backupbot.backup.pre-hook: 'mysqldump -u root -p"$(cat /run/secrets/db_root_password)" -f /tmp/dump/dump.db'
        backupbot.backup.post-hook: "rm -rf /tmp/dump/dump.db"
        backupbot.backup.path: "/tmp/dump/"