Bahub API client¶
Bahub is an automation tool for uploading and restoring backups. Works in shell, can work as a docker container in the same network with scheduled automatic backups of other containers, or can work as an UNIX daemon on the server without containerization.
Setup¶
Bahub can be running as a separate container attached to docker containers network or manually as a regular process. The recommended way is to use a docker container, which provides a working job scheduling, installed dependencies and preconfigured most of the things.
Using docker container¶
There exists a bahub tag on the docker hub container, wolnosciowiec/file-repository:bahub You can find an example in “examples/client” directory in the repository.
docker-compose.yml
version: "2"
services:
#
# Our container that is running all the time, can run scheduled backups and manually triggered backups
#
backup:
image: quay.io/riotkit/bahub:dev
volumes:
- "./cron:/cron:ro"
- "./config.yaml:/bahub.conf.yaml:ro"
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
- BACKUPS_ENCRYPTION_PASSPHRASE=some-very-long-passphrase-good-to-have-there-64-characters-for-example
- BACKUPS_TOKEN=111111-2222-3333-4444-55555555555555
- BACKUPS_REDIS_COLLECTION_ID=12345678-cccc-bbb-aaa-1232313213123
- COMPOSE_PROJECT_NAME=test_client
#
# Test container for backup & restore
#
redis:
image: redis:3-alpine
volumes:
- ./redis:/data
command: "redis-server --appendonly yes"
/cron
# schedule REDIS server backup on every Monday, 02:00 AM
0 2 * * MON bahub backup some_redis_storage
/bahub.conf.yaml (see: Configuration reference)
accesses:
some_server:
url: http://api.some-domain.org
token: "${BACKUPS_TOKEN}"
encryption:
my_aes:
passphrase: "${BACKUPS_ENCRYPTION_PASSPHRASE}"
method: "aes-128-cbc"
backups:
some_redis_storage:
type: docker_volumes
container: "${COMPOSE_PROJECT_NAME}_redis_1"
access: some_server
encryption: my_aes
collection_id: "${BACKUPS_REDIS_COLLECTION_ID}"
paths:
- "/data"
Note: It’s very important to specify the project name in docker-compose with “-p”, so it will have same value as “COMPOSE_PROJECT_NAME”. You may want to add it to .env file and reuse in Makefile and in docker-compose.yml for automation*
Using bare metal¶
Use Python’s PIP to install the package, and run it.
pip install bahub
bahub --help