continuous-integration/drone/push Build is passing
Details
continuous-integration/drone Build encountered an error
Details
|
||
---|---|---|
.drone.yml | ||
.env.sample | ||
.envrc.sample | ||
.gitignore | ||
Dockerfile | ||
README.md | ||
backup.sh | ||
compose.https.yml | ||
compose.s3.yml | ||
compose.ssh.yml | ||
compose.swarm-cronjob.yml | ||
compose.yml | ||
renovate.json | ||
setup-cron.sh |
README.md
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-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>
- 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 totrue
to 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
.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