Add container to automatically backup DBs
This commit is contained in:
1
ansible/roles/db_auto_backup/defaults/main.yml
Normal file
1
ansible/roles/db_auto_backup/defaults/main.yml
Normal file
@ -0,0 +1 @@
|
||||
db_backups_dir: ./backups
|
11
ansible/roles/db_auto_backup/files/docker-compose.yml
Normal file
11
ansible/roles/db_auto_backup/files/docker-compose.yml
Normal file
@ -0,0 +1,11 @@
|
||||
version: "2.3"
|
||||
|
||||
services:
|
||||
backup:
|
||||
image: ghcr.io/realorangeone/db-auto-backup:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- "{{ db_backups_dir }}:/var/backups"
|
||||
environment:
|
||||
- HEALTHCHECKS_ID={{ db_auto_backup_healthchecks_id }}
|
4
ansible/roles/db_auto_backup/handlers/main.yml
Normal file
4
ansible/roles/db_auto_backup/handlers/main.yml
Normal file
@ -0,0 +1,4 @@
|
||||
- name: restart db-auto-backup
|
||||
shell:
|
||||
chdir: /opt/db-auto-backup
|
||||
cmd: "{{ docker_update_command }}"
|
17
ansible/roles/db_auto_backup/tasks/main.yml
Normal file
17
ansible/roles/db_auto_backup/tasks/main.yml
Normal file
@ -0,0 +1,17 @@
|
||||
- name: Create install directory
|
||||
file:
|
||||
path: /opt/db-auto-backup
|
||||
state: directory
|
||||
owner: "{{ docker_user.name }}"
|
||||
mode: "{{ docker_compose_directory_mask }}"
|
||||
become: true
|
||||
|
||||
- name: Install compose file
|
||||
template:
|
||||
src: files/docker-compose.yml
|
||||
dest: /opt/db-auto-backup/docker-compose.yml
|
||||
mode: "{{ docker_compose_file_mask }}"
|
||||
owner: "{{ docker_user.name }}"
|
||||
validate: docker-compose -f %s config
|
||||
notify: restart db-auto-backup
|
||||
become: true
|
1
ansible/roles/db_auto_backup/vars/main.yml
Normal file
1
ansible/roles/db_auto_backup/vars/main.yml
Normal file
@ -0,0 +1 @@
|
||||
db_auto_backup_healthchecks_id: "{{ vault_db_auto_backup_healthchecks_id }}"
|
@ -1,45 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
BACKUP_DIR=$1
|
||||
|
||||
if [ -z "$BACKUP_DIR" ]
|
||||
then
|
||||
echo "No backup dir"
|
||||
fi
|
||||
|
||||
all_containers=$(docker ps --format "{{.ID}}:{{ .Image }}")
|
||||
|
||||
for line in $all_containers
|
||||
do
|
||||
IFS=':' read -a container_details <<< $line
|
||||
|
||||
container_name=${container_details[1]}
|
||||
container_id=${container_details[0]}
|
||||
|
||||
case "$container_name" in
|
||||
"mariadb")
|
||||
db_name=$(docker exec $container_id bash -c 'echo $MYSQL_USER')
|
||||
echo Backing up mariadb $db_name
|
||||
docker exec $container_id bash -c 'mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --all-databases' | pv > $BACKUP_DIR/$db_name.sql
|
||||
;;
|
||||
|
||||
"postgres")
|
||||
db_name=$(docker exec $container_id bash -c 'echo $POSTGRES_USER')
|
||||
echo Backing up postgres $db_name
|
||||
docker exec $container_id bash -c 'PGPASSWORD=$POSTGRES_PASSWORD pg_dumpall -U $POSTGRES_USER' | pv > $BACKUP_DIR/$db_name.sql
|
||||
;;
|
||||
"yandex/clickhouse-server")
|
||||
# Hardcode for plausible
|
||||
tables=$(docker exec $container_id clickhouse-client --query "SELECT name FROM system.tables where database == 'plausible';")
|
||||
for table in $tables
|
||||
do
|
||||
echo Backing up clickhouse table $table
|
||||
docker exec $container_id clickhouse-client --query "SELECT * FROM plausible.$table" --format CSVWithNames | pv > $BACKUP_DIR/plausible-$table.csv
|
||||
done
|
||||
;;
|
||||
|
||||
esac
|
||||
done
|
||||
|
||||
echo "Setting user permissions..."
|
||||
chown -R root:root $BACKUP_DIR
|
@ -17,7 +17,7 @@ services:
|
||||
- "{{ private_ip }}:8080:8080"
|
||||
depends_on:
|
||||
- docker_proxy
|
||||
- nginx
|
||||
- shenanigans
|
||||
networks:
|
||||
- default
|
||||
- traefik
|
||||
|
Reference in New Issue
Block a user