From 93985fdb88dbd89e3524aefe3f0b3ce5167a786e Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Tue, 30 Sep 2025 23:09:16 -0700 Subject: Add backup role --- .../backup/templates/stacks/docker-compose.yml | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 playbooks/roles/backup/templates/stacks/docker-compose.yml (limited to 'playbooks/roles/backup/templates/stacks') diff --git a/playbooks/roles/backup/templates/stacks/docker-compose.yml b/playbooks/roles/backup/templates/stacks/docker-compose.yml new file mode 100644 index 0000000..9089a8a --- /dev/null +++ b/playbooks/roles/backup/templates/stacks/docker-compose.yml @@ -0,0 +1,54 @@ +services: + backup: + image: python:3.11-alpine + volumes: + - "{{ swarm_base }}:/mnt/source:ro" + - "{{ backup_base }}/volumes/backups:/backups" + - "{{ backup_base }}/volumes/work:/work" + - "{{ backup_base }}/volumes/scripts:/scripts" +{% if borg_repo.startswith('ssh://') %} + - "{{ backup_base }}/volumes/ssh:/root/.ssh:ro" +{% endif %} + environment: + - TZ={{ timezone }} + - DEPLOYMENT_TIME={{ deployment_time }} + - BACKUP_RETENTION_DAYS={{ backup_retention_days | default(14) }} + - NTFY_TOPIC={{ ntfy_topic }} + - PYTHONUNBUFFERED=1 + - BORG_REPO={{ borg_repo }} + - BORG_PASSPHRASE={{ borg_passphrase }} + - BORG_COMPRESSION={{ borg_compression }} + - BORG_KEEP_DAILY={{ borg_keep_daily }} + - BORG_KEEP_WEEKLY={{ borg_keep_weekly }} + - BORG_KEEP_MONTHLY={{ borg_keep_monthly }} + command: > + sh -c " + apk add --no-cache borgbackup openssh-client && + chmod +x /scripts/*.py && + mkdir -p /scripts/logs && +{% if homelab_build %} + python3 /scripts/backup.py /mnt/source --blocklist {{ blocklist }} --work-dir /work --backup-dir /backups +{% else %} + echo '0 2 * * * cd /scripts && python3 backup.py /mnt/source --blocklist {{ blocklist }} --work-dir /work --backup-dir /backups >> logs/backup-$$(date +\\%Y\\%m\\%d).log 2>&1' > /etc/crontabs/root && + echo '0 4 * * * cd /scripts && python3 cleanup.py /backups --blocklist {{ blocklist }} --retention-days ${BACKUP_RETENTION_DAYS} >> logs/cleanup-$$(date +\\%Y\\%m\\%d).log 2>&1' >> /etc/crontabs/root && + crond -f +{% endif %} + " + networks: + - proxy + deploy: + mode: replicated + replicas: 1 + update_config: + parallelism: 1 + failure_action: rollback + order: start-first + delay: 5s + monitor: 30s + placement: + constraints: + - node.role == manager + +networks: + proxy: + external: true -- cgit v1.2.3-70-g09d2