# restic-compose-backup ![docs](https://readthedocs.org/projects/restic-compose-backup/badge/?version=latest) Backup using https://restic.net/ for a docker-compose setup. * [restic-compose-backup Documentation](https://restic-compose-backup.readthedocs.io) * [restic-compose-backup on Github](https://github.com/ZettaIO/restic-compose-backup) * [restic-compose-backup on Docker Hub](https://hub.docker.com/r/zettaio/restic-compose-backup) Features: * Back up docker volumes or host binds * Back up mariadb postgres * Back up mariadb databases * Back up mysql databases * Notifications over mail/smtp * Notifications to Discord through webhooks Please report issus on [github](https://github.com/ZettaIO/restic-compose-backup/issues). Automatically detects and backs up volumes, mysql, mariadb and postgres databases in a docker-compose setup. * Each service in the compose setup is configured with a label to enable backup of volumes or databases * When backup starts a new instance of the container is created mapping in all the needed volumes. It will copy networks etc to ensure databases can be reached * Volumes are mounted to `/volumes//` in the backup process container. `/volumes` is pushed into restic * Databases are backed up from stdin / dumps into restic using path `/databases//dump.sql` * Cron triggers backup at 2AM every day ## Install ```bash docker pull zettaio/restic-compose-backup ``` ## Configuration Required env variables for restic: ```bash RESTIC_REPOSITORY RESTIC_PASSWORD ``` Backend specific env vars : https://restic.readthedocs.io/en/stable/040_backup.html#environment-variables Additional env vars: ```bash # Prune rules RESTIC_KEEP_DAILY=7 RESTIC_KEEP_WEEKLY=4 RESTIC_KEEP_MONTHLY=12 RESTIC_KEEP_YEARLY=3 # Logging level (debug,info,warning,error) LOG_LEVEL=info # SMTP alerts EMAIL_HOST=my.mail.host EMAIL_PORT=465 EMAIL_HOST_USER=johndoe EMAIL_HOST_PASSWORD=s3cr3tpassw0rd EMAIL_SEND_TO=johndoe@gmail.com # Discord webhook DISCORD_WEBHOOK=https://discordapp.com/api/webhooks/... ``` ### Volumes ```yaml version: '3' services: # The backup service backup: image: zettaio/restic-compose-backup environment: - RESTIC_REPOSITORY= - RESTIC_PASSWORD=hopefullyasecturepw - RESTIC_KEEP_DAILY=7 - RESTIC_KEEP_WEEKLY=4 - RESTIC_KEEP_MONTHLY=12 - RESTIC_KEEP_YEARLY=3 env_file: - some_other_vars.env volumes: - /var/run/docker.sock:/tmp/docker.sock:ro example: image: some_image # Enable volume backup with label labels: restic-compose-backup.volumes: true # These volumes will be backed up volumes: # Docker volume - media:/srv/media # Host map - /srv/files:/srv/files volumes: media: ``` A simple `include` and `exclude` filter is also available. ```yaml example: image: some_image labels: restic-compose-backup.volumes: true restic-compose-backup.volumes.include: "files,data" volumes: # Source don't match include filter. No backup. - media:/srv/media # Matches include filter - files:/srv/files - /srv/data:/srv/data volumes: media: files: ``` Exclude ```yaml example: image: some_image labels: restic-compose-backup.volumes: true restic-compose-backup.volumes.exclude: "media" volumes: # Excluded by filter - media:/srv/media # Backed up - files:/srv/files - /srv/data:/srv/data volumes: media: files: ``` ### Databases Will dump databases directly into restic through stdin. They will appear in restic as a separate snapshot with path `/databases//dump.sql` or similar. ```yaml mariadb: image: mariadb:10 labels: restic-compose-backup.mariadb: true ``` ```yaml mysql: image: mysql:5 labels: restic-compose-backup.mysql: true ``` ```yaml postgres: image: postgres labels: restic-compose-backup.postgres: true ``` ## Running Tests ```bash pip install -e ./src/ pip install -r src/tests/requirements.txt tox ``` ## Building Docs ```bash pip install -r docs/requirements.txt python src/setup.py build_sphinx ``` ## Contributing Contributions are welcome regardless of experience level. Don't hesitate submitting issues, opening partial or completed pull requests.