Backup Bot II: This Time It's Easily Configurable
Go to file
Philipp Rothmann e360c3d8f8
continuous-integration/drone/pr Build is passing Details
remove unused traefik labels
2023-06-13 14:34:53 +02:00
.drone.yml Backup volumes from host instead of copying paths 2023-06-05 11:15:54 +02:00
.env.sample feat: backupvolume can be pruned after upload 2023-03-01 13:29:00 +01:00
.envrc.sample Bash command line handling showdown 2021-11-09 15:25:43 +02:00
.gitignore Ignore testing folder 2021-11-22 14:25:56 +02:00
README.md Backup volumes from host instead of copying paths 2023-06-05 11:15:54 +02:00
abra.sh Backup volumes from host instead of copying paths 2023-06-05 11:15:54 +02:00
backup.sh fix shellcheck prevent globbing 2023-06-13 11:57:42 +02:00
compose.s3.yml Work-in-progress: split S3 & SSH storage 2021-11-09 12:37:56 +02:00
compose.ssh.yml Working cron again, d'oh 2021-11-11 02:10:17 +02:00
compose.swarm-cronjob.yml fix typo 2021-11-16 11:43:47 +01:00
compose.yml remove unused traefik labels 2023-06-13 14:34:53 +02:00
entrypoint.sh Backup volumes from host instead of copying paths 2023-06-05 11:15:54 +02:00
renovate.json chore(deps): add renovate.json 2023-01-18 17:24:09 +00:00

README.md

Backupbot II

Build Status

This Time, It's Easily Configurable

Automatically take backups from all volumes of running Docker Swarm services and runs pre- and post commands.

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: ${BACKUP:-"true"} 
        backupbot.backup.pre-hook: 'mysqldump -u root -p"$(cat /run/secrets/db_root_password)" -f /volume_path/dump.db'
        backupbot.backup.post-hook: "rm -rf /volume_path/dump.db"
  • backupbot.backup -- set to true to back up this service (REQUIRED)
  • backupbot.backup.pre-hook -- command to run before copying files (optional), save all dumps into the volumes
  • 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