Backup Bot II: This Time It's Easily Configurable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
3wc f7cbbf04c0 Goodbye, emojis! 😢 7 days ago
.drone.yml fix push docker image to correct destination 2 weeks ago
.env.sample SSH host keys, split out swarm-cronjob 3 weeks ago
.envrc.sample Bash command line handling showdown 3 weeks ago
.gitignore Ignore testing folder 1 week ago
Dockerfile Allow overriding cron schedule, fix vars 3 weeks ago
README.md Goodbye, emojis! 😢 7 days ago
backup.sh fix s3 restic_repo 2 weeks ago
compose.s3.yml Work-in-progress: split S3 & SSH storage 3 weeks ago
compose.ssh.yml Working cron again, d'oh 3 weeks ago
compose.swarm-cronjob.yml fix typo 2 weeks ago
compose.yml SSH host keys, split out swarm-cronjob 3 weeks ago
setup-cron.sh Revert to previous, probably-working cron set-up 3 weeks ago

README.md

Backupbot II

Build Status

This Time, It's Easily Configurable

Automatically take backups from running Docker Swarm services into a volume.

Background

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

  • 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 help, by

  1. letting you define backups using Docker labels, so you can easily collect your backups for use with another system like docker-volume-backup.
  2. running pre- and post-commands before and after backups, for example to use database tools to take a backup from a running service.

Deployment

With Co-op Cloud

  1. Set up Docker Swarm and abra
  2. abra app new backup-bot-two
  3. abra app config <your-app-name>, and set storage options. Either configure CRON_SCHEDULE, or set up swarm-cronjob
  4. abra app secret generate <your-app-name> restic-password v1, optionally with --pass before <your-app-name> to save the generated secret in pass.
  5. abra app secret insert <your-app-name> ssh-key v1 ... or similar, to load required secrets.
  6. abra app deploy <your-app-name>
  • Category: Utilities
  • Status: 0, work-in-progress
  • Image: thecoopcloud/backup-bot-two, 4, upstream
  • Healthcheck: No
  • Backups: N/A
  • Email: N/A
  • Tests: No
  • SSO: N/A

Configuration

Like Traefik, or swarm-cronjob, Backupbot II uses access to the Docker socket to read labels from running Docker Swarm services:

services:
  db:
    deploy:
      labels:
        backupbot.backup: "true"
        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/"
  • backupbot.backup -- set to true to back up this service (REQUIRED)
  • backupbot.backup.path -- file path within the service to copy (REQUIRED)
  • backupbot.backup.pre-hook -- command to run before copying files (optional)
  • backupbot.backup.post-hook -- command to run after copying files (optional)

As in the above example, you can reference Docker Secrets, e.g. for looking up database passwords, by reading the files in /run/secrets directly.

Development

  1. Install direnv
  2. cp .envrc.sample .envrc
  3. Edit .envrc as appropriate, including setting DOCKER_CONTEXT to a remote Docker context, if you're not running a swarm server locally.
  4. Run ./backup.sh -- you can add the --skip-backup or --skip-upload options if you just want to test one other step