add role files
Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
parent
051bcd2d61
commit
59f173a018
|
@ -0,0 +1,22 @@
|
||||||
|
# Description
|
||||||
|
|
||||||
|
This role is intended for uploading backups to DigitalOcean Spaces using the [`s3cmd`]() script.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
This role should be included by anothe role and ran with certain variables:
|
||||||
|
```yaml
|
||||||
|
- name: Configure Ghost backups
|
||||||
|
include_role:
|
||||||
|
name: s3cmd-backup
|
||||||
|
vars:
|
||||||
|
backup_name: my-app-backups
|
||||||
|
backup_number: 1
|
||||||
|
backup_hour: 4
|
||||||
|
backup_day: '*/4'
|
||||||
|
backup_directory: '/var/tmp/backups'
|
||||||
|
backup_base_domain: 'ams3.digitaloceanspaces.com'
|
||||||
|
backup_bucket_name: 'my-app-backups'
|
||||||
|
backup_access_key: 'ACCESS_KEY'
|
||||||
|
backup_secret_key: 'SECRET_KEY'
|
||||||
|
```
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
# For uploading backups
|
||||||
|
s3cmd_version: '2.0.1'
|
||||||
|
s3cmd_name: 's3cmd-{{ s3cmd_version }}'
|
||||||
|
s3cmd_archive: '{{ s3cmd_name }}.tar.gz'
|
||||||
|
s3cmd_checksum: 'md5:ef525ec3bd2d430b10130de54f85e8bc'
|
||||||
|
s3cmd_url: 'https://github.com/s3tools/s3cmd/releases/download/v{{ s3cmd_version }}/{{ s3cmd_archive }}'
|
||||||
|
|
||||||
|
# Backup timing
|
||||||
|
backup_hour: 2
|
||||||
|
backup_minute: 0
|
||||||
|
backup_day: '*'
|
||||||
|
backup_month: '*'
|
||||||
|
# Number of most recent files to backup
|
||||||
|
backup_number: 1
|
||||||
|
|
||||||
|
# Digital Ocean Spaces configuration
|
||||||
|
backup_name: 'default'
|
||||||
|
backup_directory: ~
|
||||||
|
backup_script: '/var/lib/backups/{{ backup_name }}_backup.sh'
|
||||||
|
backup_base_domain: ams3.digitaloceanspaces.com
|
||||||
|
# example: s3://discourse-backups
|
||||||
|
backup_bucket_name: ~
|
||||||
|
backup_encryption_pass: ~
|
||||||
|
backup_access_key: ~
|
||||||
|
backup_secret_key: ~
|
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
- name: Create directory for backup script
|
||||||
|
file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
state: directory
|
||||||
|
group: adm
|
||||||
|
mode: 0775
|
||||||
|
with_items:
|
||||||
|
- /var/tmp/backups
|
||||||
|
- /var/lib/backups
|
||||||
|
|
||||||
|
- name: Create backup script
|
||||||
|
template:
|
||||||
|
src: backup.sh
|
||||||
|
dest: '{{ backup_script }}'
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
- name: Configure a cron job for backups
|
||||||
|
cron:
|
||||||
|
name: Upload Discourse Backups
|
||||||
|
# backup happens at 03:30 UTC
|
||||||
|
hour: '{{ backup_hour }}'
|
||||||
|
minute: '{{ backup_minute }}'
|
||||||
|
day: '{{ backup_day }}'
|
||||||
|
month: '{{ backup_month }}'
|
||||||
|
job: '{{ backup_script }}'
|
||||||
|
user: root
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
- include_tasks: s3cmd.yml
|
||||||
|
- include_tasks: backups.yml
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
- name: Check if s3cmd is installed
|
||||||
|
stat:
|
||||||
|
path: /usr/local/bin/s3cmd
|
||||||
|
register: s3cmd
|
||||||
|
|
||||||
|
- name: Download s3cmd archive
|
||||||
|
get_url:
|
||||||
|
url: '{{ s3cmd_url }}'
|
||||||
|
dest: /tmp
|
||||||
|
when: not s3cmd.stat.exists
|
||||||
|
|
||||||
|
- name: Extract s3cmd archive
|
||||||
|
unarchive:
|
||||||
|
src: '/tmp/{{ s3cmd_archive }}'
|
||||||
|
dest: /tmp
|
||||||
|
remote_src: yes
|
||||||
|
when: not s3cmd.stat.exists
|
||||||
|
|
||||||
|
- name: Install s3cmd
|
||||||
|
command: python setup.py install
|
||||||
|
args:
|
||||||
|
chdir: '/tmp/{{ s3cmd_name }}'
|
||||||
|
when: not s3cmd.stat.exists
|
||||||
|
|
||||||
|
- name: Create s3cmd config
|
||||||
|
template:
|
||||||
|
src: s3cfg.j2
|
||||||
|
dest: /root/.s3cfg
|
||||||
|
mode: 0400
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
BACKUPS_NUM='{{ backup_number }}'
|
||||||
|
BACKUPS_DIR='{{ backup_directory }}'
|
||||||
|
BUCKET_NAME='{{ backup_bucket_name }}'
|
||||||
|
# Find most recent archive
|
||||||
|
ARCHIVES=$(ls -Art ${BACKUPS_DIR} | tail -n ${BACKUPS_NUM})
|
||||||
|
|
||||||
|
for ARCHIVE in ${ARCHIVES}; do
|
||||||
|
echo "Uploading: ${ARCHIVE} >> ${BUCKET_NAME}"
|
||||||
|
/usr/local/bin/s3cmd put "${BACKUPS_DIR}/${ARCHIVE}" "${BUCKET_NAME}"
|
||||||
|
done
|
|
@ -0,0 +1,65 @@
|
||||||
|
[default]
|
||||||
|
host_base = {{ backup_base_domain }}
|
||||||
|
host_bucket = %(bucket)s.{{ backup_base_domain }}
|
||||||
|
access_key = {{ backup_access_key }}
|
||||||
|
secret_key = {{ backup_secret_key }}
|
||||||
|
{% if backup_encryption_pass %}
|
||||||
|
encrypt = True
|
||||||
|
gpg_passphrase = {{ backup_encryption_pass }}
|
||||||
|
{% else %}
|
||||||
|
encrypt = False
|
||||||
|
{% endif %}
|
||||||
|
bucket_location = US
|
||||||
|
check_ssl_certificate = True
|
||||||
|
check_ssl_hostname = True
|
||||||
|
default_mime_type = binary/octet-stream
|
||||||
|
delay_updates = False
|
||||||
|
delete_after = False
|
||||||
|
delete_after_fetch = False
|
||||||
|
delete_removed = False
|
||||||
|
dry_run = False
|
||||||
|
enable_multipart = True
|
||||||
|
follow_symlinks = False
|
||||||
|
force = False
|
||||||
|
get_continue = False
|
||||||
|
gpg_command = /usr/bin/gpg
|
||||||
|
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
|
||||||
|
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
|
||||||
|
guess_mime_type = True
|
||||||
|
human_readable_sizes = False
|
||||||
|
invalidate_default_index_on_cf = False
|
||||||
|
invalidate_default_index_root_on_cf = True
|
||||||
|
invalidate_on_cf = False
|
||||||
|
limit = -1
|
||||||
|
limitrate = 0
|
||||||
|
list_md5 = False
|
||||||
|
long_listing = False
|
||||||
|
max_delete = -1
|
||||||
|
multipart_chunk_size_mb = 15
|
||||||
|
multipart_max_chunks = 10000
|
||||||
|
preserve_attrs = True
|
||||||
|
progress_meter = True
|
||||||
|
proxy_port = 0
|
||||||
|
put_continue = False
|
||||||
|
recursive = False
|
||||||
|
recv_chunk = 65536
|
||||||
|
reduced_redundancy = False
|
||||||
|
requester_pays = False
|
||||||
|
restore_days = 1
|
||||||
|
restore_priority = Standard
|
||||||
|
send_chunk = 65536
|
||||||
|
server_side_encryption = False
|
||||||
|
signature_v2 = False
|
||||||
|
signurl_use_https = False
|
||||||
|
skip_existing = False
|
||||||
|
socket_timeout = 300
|
||||||
|
stats = False
|
||||||
|
stop_on_error = False
|
||||||
|
throttle_max = 100
|
||||||
|
urlencoding_mode = normal
|
||||||
|
use_http_expect = False
|
||||||
|
use_https = True
|
||||||
|
use_mime_magic = True
|
||||||
|
verbosity = WARNING
|
||||||
|
website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/
|
||||||
|
website_index = index.html
|
Loading…
Reference in New Issue