add restic config

This commit is contained in:
root
2024-01-20 21:02:38 +01:00
parent 0715bdafd4
commit 9420f6875e
5 changed files with 103 additions and 1 deletions

81
backups/.autorestic.yaml Normal file
View File

@@ -0,0 +1,81 @@
version: 2
global:
forget:
keep-hourly: 24
keep-daily: 7
keep-weekly: 4
keep-monthly: 12
backends:
fch:
type: sftp
path: FCH_serveur:backups/
locations:
nextcloud_data:
from:
- /var/lib/docker/volumes/docker_nextcloud
to:
- fch
cron: 0 0 * * *
forget: prune
nextcloud_conf:
from:
- /var/lib/docker/volumes/docker_nextcloud-conf
to:
- fch
cron: 0 0 * * *
forget: prune
nextcloud_data:
from:
- /var/lib/docker/volumes/docker_nextcloud
to:
- fch
cron: 0 0 * * *
forget: prune
nextcloud_db:
from:
- /DATA/dump_bdd/nextcloud-db
to:
- fch
cron: 0 0 * * *
forget: prune
hooks:
before:
- /DATA/docker/services/backups/backup_db.sh nextcloud-db postgresql
onlyoffice:
from:
- /var/lib/docker/volumes/docker_onlyoffice-cache
- /var/lib/docker/volumes/docker_onlyoffice-data
to:
- fch
cron: 0 0 * * *
forget: prune
traefik-certs:
from:
- /DATA/docker/services/certs
to:
- fch
cron: 0 0 * * *
forget: prune
repos:
from:
- /DATA/docker/services/
to:
- fch
options:
backup:
exclude:
- '.git'
cron: 0 0 * * *
forget: prune

View File

@@ -0,0 +1,10 @@
[Unit]
Description=Backups yay
[Service]
Type=oneshot
ExecStart=autorestic -c /DATA/docker/services/backups/.autorestic.yml --ci cron
# fail if backup takes more than 1 day
TimeoutStartSec=86400
IPAccounting=yes
MemoryAccounting=yes

9
backups/autorestic.timer Normal file
View File

@@ -0,0 +1,9 @@
[Unit]
Description=Backups yay
[Timer]
# Trigger every 10 minutes
OnCalendar=*:0/10:0
[Install]
WantedBy=timers.target

61
backups/backup_db.sh Executable file
View File

@@ -0,0 +1,61 @@
#!/usr/bin/env bash
# usage: <script> <container-name> <database-type>
#
# exports the database of a running docker container in a dump in $BACKUP_DIR/$CONTAINER_NAME/
BACKUP_DIR=/DATA/dump_bdd/
# Check container existence
CONTAINER="$1"
if ! docker ps | grep -q "$CONTAINER"
then
echo "The container $CONTAINER doesn't exist or doesn't run"
exit 1
fi
# Check database type
TYPE="$2"
COMMAND=""
case "$TYPE" in
postgresql)
POSTGRES_USER=$(docker exec "$CONTAINER" env | grep POSTGRES_USER | cut -d= -f2)
COMMAND="pg_dumpall -c -U $POSTGRES_USER"
EXTENSION=sql
;;
mariadb)
MARIADB_USER=$(docker exec "$CONTAINER" env | grep MYSQL_USER | cut -d= -f2)
MARIADB_PASSWORD=$(docker exec "$CONTAINER" env | grep MYSQL_PASSWORD | cut -d= -f2)
COMMAND="mariadb-dump -u $MARIADB_USER --password=$MARIADB_PASSWORD --all-databases"
EXTENSION=sql
;;
mongodb)
COMMAND="mongodump --archive"
EXTENSION=mongodump
;;
ldap-config)
COMMAND="slapcat -n 0"
EXTENSION=config.ldif
;;
ldap-content)
COMMAND="slapcat -n 1"
EXTENSION=content.ldif
;;
*)
echo "I don't know $TYPE database type."
exit 1
esac
# Ensure directory exists
mkdir -p "$BACKUP_DIR/$CONTAINER"
# Export database
docker exec "$CONTAINER" $COMMAND > "$BACKUP_DIR/$CONTAINER/dump.$EXTENSION"
exit $?