71 lines
2.9 KiB
Markdown
71 lines
2.9 KiB
Markdown
# 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 all volumes of running Docker Swarm services and runs pre- and post commands.
|
|
|
|
## 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 <your-app-name>`, and set storage options. Either configure `CRON_SCHEDULE`, or set up `swarm-cronjob`
|
|
4. `abra app secret generate <your-app-name> restic-password v1`, optionally with `--pass` before `<your-app-name>` to save the generated secret in `pass`.
|
|
5. `abra app secret insert <your-app-name> ssh-key v1 ...` or similar, to load required secrets.
|
|
4. `abra app deploy <your-app-name>`
|
|
|
|
<!-- metadata -->
|
|
|
|
* **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
|
|
|
|
<!-- endmetadata -->
|
|
|
|
## 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: ${BACKUP:-"true"}
|
|
backupbot.backup.pre-hook: 'mysqldump -u root -p"$(cat /run/secrets/db_root_password)" -f /volume_path/dump.db'
|
|
backupbot.backup.post-hook: "rm -rf /volume_path/dump.db"
|
|
```
|
|
|
|
- `backupbot.backup` -- set to `true` to back up this service (REQUIRED)
|
|
- `backupbot.backup.pre-hook` -- command to run before copying files (optional), save all dumps into the volumes
|
|
- `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
|