added ansible script
This commit is contained in:
87
ansible/playbooks/07-setup-backups.yml
Normal file
87
ansible/playbooks/07-setup-backups.yml
Normal file
@@ -0,0 +1,87 @@
|
||||
---
|
||||
# Playbook 07: Setup Backups
|
||||
# Configure automated backup system
|
||||
|
||||
- name: Setup Backup System
|
||||
hosts: all
|
||||
become: yes
|
||||
|
||||
tasks:
|
||||
- name: Create backup script
|
||||
copy:
|
||||
dest: "{{ deployment_dir }}/backup.sh"
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "{{ ansible_user }}"
|
||||
mode: '0755'
|
||||
content: |
|
||||
#!/bin/bash
|
||||
# Nextcloud Stack Backup Script
|
||||
set -euo pipefail
|
||||
|
||||
BACKUP_DIR="{{ deployment_dir }}/backups"
|
||||
DB_BACKUP_DIR="$BACKUP_DIR/database"
|
||||
VOLUME_BACKUP_DIR="$BACKUP_DIR/volumes"
|
||||
RETENTION_DAYS={{ backup_retention_days }}
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
LOG_FILE="$BACKUP_DIR/backup.log"
|
||||
|
||||
log() {
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
log "Starting backup process..."
|
||||
|
||||
# Database backup
|
||||
log "Backing up PostgreSQL database..."
|
||||
docker exec next-db pg_dump -U {{ db_user }} {{ db_name }} | \
|
||||
gzip > "$DB_BACKUP_DIR/nextcloud_db_$DATE.sql.gz"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Database backup completed: nextcloud_db_$DATE.sql.gz"
|
||||
else
|
||||
log "ERROR: Database backup failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Weekly volume backup (Sundays only)
|
||||
if [ $(date +%u) -eq 7 ]; then
|
||||
log "Weekly volume backup (Sunday)..."
|
||||
docker exec -u www-data next php occ maintenance:mode --on
|
||||
|
||||
tar -czf "$VOLUME_BACKUP_DIR/nextcloud_data_$DATE.tar.gz" \
|
||||
-C /var/lib/docker/volumes/nextcloud_nextcloud_data/_data . 2>/dev/null || true
|
||||
|
||||
tar -czf "$VOLUME_BACKUP_DIR/configs_$DATE.tar.gz" \
|
||||
-C {{ deployment_dir }}/configs . 2>/dev/null || true
|
||||
|
||||
docker exec -u www-data next php occ maintenance:mode --off
|
||||
log "Volume backup completed"
|
||||
fi
|
||||
|
||||
# Cleanup old backups
|
||||
log "Cleaning up backups older than $RETENTION_DAYS days..."
|
||||
find "$DB_BACKUP_DIR" -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
|
||||
find "$VOLUME_BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
|
||||
|
||||
log "Backup process completed successfully!"
|
||||
|
||||
- name: Create cron job for daily backups
|
||||
cron:
|
||||
name: "Nextcloud Stack Backup"
|
||||
minute: "0"
|
||||
hour: "3"
|
||||
job: "{{ deployment_dir }}/backup.sh >> {{ deployment_dir }}/backups/backup.log 2>&1"
|
||||
user: root
|
||||
|
||||
- name: Run initial test backup
|
||||
command: "{{ deployment_dir }}/backup.sh"
|
||||
register: backup_test
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Display backup status
|
||||
debug:
|
||||
msg: |
|
||||
✓ Backup script created
|
||||
✓ Cron job configured (daily 3:00 AM)
|
||||
✓ Test backup completed
|
||||
Location: {{ deployment_dir }}/backups/
|
||||
Reference in New Issue
Block a user