forked from coop-cloud/backup-bot-two
d3e9001597afc26702f6f162f858855423699f95
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-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>
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 totrueto 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
.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
Description
Languages
Python
91.1%
Shell
6.8%
Dockerfile
2.1%