All checks were successful
continuous-integration/drone/push Build is passing
Backupbot II: 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 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.
Deployment
With Co-op Cloud
- Set up Docker Swarm and
abra
abra app new backup-bot-two
abra app config <your-app-name>
, and set storage options. Either configureCRON_SCHEDULE
, or set upswarm-cronjob
abra app secret generate <your-app-name> restic-password v1
, optionally with--pass
before<your-app-name>
to save the generated secret inpass
.abra app secret insert <your-app-name> ssh-key v1 ...
or similar, to load required secrets.abra app deploy <your-app-name>
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 totrue
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
- Install
direnv
cp .envrc.sample .envrc
- Edit
.envrc
as appropriate, including settingDOCKER_CONTEXT
to a remote Docker context, if you're not running a swarm server locally. - Run
./backup.sh
-- you can add the--skip-backup
or--skip-upload
options if you just want to test one other step
Languages
Python
89.3%
Shell
9.5%
Dockerfile
1.2%