duply-backup
ansible-duply-backup
Ansible role which uses Duply to backup files, PostgreSQL, MySQL and MongoDB databases to any backend supported by Duply.
Forked from Stouts/Stouts.backup.
Requirements
This role installs only Duply and Duplicity by default. Depending on the backend you are using, it is likely that additional dependecies will be required. These requirements can be specified in backup_optional_dependencies
, and a complete list can be found on the Duplicity Man Page.
Variables
The role variables and default values.
backup_enabled: yes # Enable the role
backup_remove: no # Set yes for uninstall the role from target system
backup_cron: yes # Setup cron tasks for backup
backup_user: root # Run backups as user
backup_group: "{{backup_user}}"
backup_home: /etc/duply # Backup configuration directory
backup_work: /var/duply # Working directory
backup_duplicity_ppa: false # Set to true to add the duplicity-team PPA
backup_duplicity_pkg: duplicity
backup_duplicity_version: # Set duplicity version
# Logging
backup_logdir: /var/log/duply # Place where logs will be keepped
backup_logrotate: yes # Setup logs rotation
# Posgresql
backup_postgres_user: postgres
backup_postgres_host: ""
# Mysql
backup_mysql_user: mysql
backup_mysql_pass: ""
backup_profiles: [] # Setup backup profiles
# Ex. backup_profiles:
# - name: www # required param
# schedule: 0 0 * * 0 # if defined enabled cronjob
# source: /var/www
# max_age: 10D
# target: s3://my.bucket/www
# params:
# - --s3-european-buckets
# exclude:
# - *.pyc
# - name: postgresql
# schedule: 0 4 * * *
# action: restore # Choose action: backup/restore (default is backup)
# source: postgresql://db_name
# target: s3://my.bucket/postgresql
# Default values (overide them in backup profiles below)
# =======================================================
# (every value can be replaced in jobs individually)
# GPG
backup_gpg_key: disabled
backup_gpg_pw: ""
backup_gpg_opts: ''
# TARGET
# syntax is
# scheme://[user:password@]host[:port]/[/]path
# probably one out of
# file://[/absolute_]path
# ftp[s]://user[:password]@other.host[:port]/some_dir
# hsi://user[:password]@other.host/some_dir
# cf+http://container_name
# imap[s]://user[:password]@host.com[/from_address_prefix]
# rsync://user[:password]@other.host[:port]::/module/some_dir
# rsync://[email protected][:port]/relative_path
# rsync://[email protected][:port]//absolute_path
# # for the s3 user/password are AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY
# s3://[user:password]@host/bucket_name[/prefix]
# s3+http://[user:password]@bucket_name[/prefix]
# ssh://user[:password]@other.host[:port]/some_dir
# tahoe://alias/directory
# webdav[s]://user[:password]@other.host/some_dir
backup_target: 'file:///var/backup'
# optionally the username/password can be defined as extra variables
backup_target_user:
backup_target_pass:
# Time frame for old backups to keep, Used for the "purge" command.
# see duplicity man page, chapter TIME_FORMATS)
backup_max_age: 1M
# Number of full backups to keep. Used for the "purge-full" command.
# See duplicity man page, action "remove-all-but-n-full".
backup_max_full_backups: 1
# forces a full backup if last full backup reaches a specified age
backup_full_max_age: 1M
# set the size of backup chunks to VOLSIZE MB instead of the default 25MB.
backup_volsize: 50
# verbosity of output (error 0, warning 1-2, notice 3-4, info 5-8, debug 9)
backup_verbosity: 3
backup_exclude: [] # List of filemasks to exlude
Usage
Add duply-backup
to your roles and set variables in your playbook file.
Example:
- hosts: all
roles:
- duply-backup
vars:
backup_target_user: aws_access_key
backup_target_pass: aws_secret
backup_profiles:
# Backup file path
- name: uploads # Required params
schedule: 0 3 * * * # At 3am every day
source: /usr/lib/project/uploads
target: s3://s3-eu-west-1.amazonaws.com/backup.backet/{{inventory_hostname}}/uploads
# Backup postgresql database
- name: postgresql
schedule: 0 4 * * * # At 4am every day
source: postgresql://project # Backup prefixes: postgresql://, maysql://, mongo://
target: s3://s3-eu-west-1.amazonaws.com/backup.backet/{{inventory_hostname}}/postgresql
user: postgres
Manage backups manually
Run backup for profile uploads
manually:
$ duply uploads backup
Load backup for profile postgresql
from cloud and restore database (logged as postgres user)
$ duply postgresql restore
Also see duply usage
License
Licensed under the MIT License. See the LICENSE file for details.
Feedback, bug-reports, requests, ...
Are welcome!