# Backupbot II [![Build Status](https://build.coopcloud.tech/api/badges/coop-cloud/backup-bot-two/status.svg)](https://build.coopcloud.tech/coop-cloud/backup-bot-two) _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 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`][abra] 2. `abra app new backup-bot-two` 3. `abra app config `, and set storage options. Either configure `CRON_SCHEDULE`, or set up `swarm-cronjob` 4. `abra app secret generate restic-password v1`, optionally with `--pass` before `` to save the generated secret in `pass`. 5. `abra app secret insert ssh-key v1 ...` or similar, to load required secrets. 4. `abra app deploy ` * **Category**: Utilities * **Status**: 0, work-in-progress * **Image**: [`thecoopcloud/backup-bot-two`](https://hub.docker.com/r/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 to `true` 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 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 [abra]: https://git.autonomic.zone/autonomic-cooperative/abra