Add container to automatically backup DBs

This commit is contained in:
Jake Howard
2022-01-16 16:55:40 +00:00
parent 6c0314b758
commit 5cc552d0eb
14 changed files with 97 additions and 70 deletions

View File

@ -0,0 +1 @@
db_backups_dir: ./backups

View 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 }}

View File

@ -0,0 +1,4 @@
- name: restart db-auto-backup
shell:
chdir: /opt/db-auto-backup
cmd: "{{ docker_update_command }}"

View 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

View File

@ -0,0 +1 @@
db_auto_backup_healthchecks_id: "{{ vault_db_auto_backup_healthchecks_id }}"

View File

@ -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

View File

@ -17,7 +17,7 @@ services:
- "{{ private_ip }}:8080:8080"
depends_on:
- docker_proxy
- nginx
- shenanigans
networks:
- default
- traefik