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 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
- letting you define backups using Docker labels, so you can easily collect your backups for use with another system like docker-volume-backup.
- 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
- Set up Docker Swarm and
abra abra app new backup-bot-twoabra app config <your-app-name>, and set storage options. Either configureCRON_SCHEDULE, or set upswarm-cronjobabra app secret generate <your-app-name> restic-password v1, optionally with--passbefore<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>
- 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/,/etc/foo/"
backupbot.backup-- set totrueto back up this service (REQUIRED)backupbot.backup.path-- comma separated list of file paths 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
.envrcas appropriate, including settingDOCKER_CONTEXTto a remote Docker context, if you're not running a swarm server locally. - Run
./backup.sh-- you can add the--skip-backupor--skip-uploadoptions if you just want to test one other step
Languages
Python
89.3%
Shell
9.5%
Dockerfile
1.2%