summaryrefslogtreecommitdiff
path: root/playbooks/roles/backup/templates/stacks
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-09-30 23:09:16 -0700
committerElizabeth Hunt <me@liz.coffee>2025-09-30 23:14:42 -0700
commit93985fdb88dbd89e3524aefe3f0b3ce5167a786e (patch)
tree3db5fd00b27e80daa7ad159e0b463ce87d6e51c8 /playbooks/roles/backup/templates/stacks
parent88eed6b06b6780fb67413e90f57e55bdd3b6c81d (diff)
downloadinfra-93985fdb88dbd89e3524aefe3f0b3ce5167a786e.tar.gz
infra-93985fdb88dbd89e3524aefe3f0b3ce5167a786e.zip
Add backup role
Diffstat (limited to 'playbooks/roles/backup/templates/stacks')
-rw-r--r--playbooks/roles/backup/templates/stacks/docker-compose.yml54
1 files changed, 54 insertions, 0 deletions
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