mirror of https://git.envs.net/envs/ops.git
136 lines
3.6 KiB
Bash
Executable File
136 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
|
|
[ "$(id -u)" -ne 0 ] && printf 'Please run as root!\n' && exit 1
|
|
[ "$(ps ax | grep -ce 'restic\|ch_bak:core.envs.net')" -gt 1 ] && printf 'Backup runs already!\n' && exit 1
|
|
|
|
###
|
|
|
|
export RESTIC_PASSWORD=';)'
|
|
|
|
restic='nice -n19 ionice -n7 restic -r'
|
|
rsync='rsync -av --delete --numeric-ids'
|
|
|
|
###
|
|
|
|
# LOCAL
|
|
BACKUP_DIR='/data/BACKUP'
|
|
BACKUP_DIR_LXC='/data/BACKUP_LXC'
|
|
|
|
# REMOTE ( Backup to rsync.net - CH )
|
|
# see: /etc/hosts /root/.ssh/config
|
|
BACKUP_HOST='ch_bak'
|
|
REMOTE_DIR="$(hostname)"
|
|
|
|
###
|
|
|
|
BACKUP_LXC_FULL=''
|
|
|
|
##RESTIC_LOC_NAME='system lxc'
|
|
RESTIC_LOC_NAME='system'
|
|
|
|
###
|
|
|
|
DATE="$(date +%Y%m%d)"
|
|
|
|
### INITIAL Restic Sync ###
|
|
for BH in $BACKUP_HOST; do
|
|
for RLN in $RESTIC_LOC_NAME; do
|
|
ssh -q "$BH" [ ! -d "$REMOTE_DIR"_"$RLN" ] && restic -r sftp:"$BH":"$REMOTE_DIR"_"$RLN" init
|
|
done
|
|
done
|
|
|
|
###
|
|
test ! -d "$BACKUP_DIR" && mkdir -p "$BACKUP_DIR"
|
|
test ! -d "$BACKUP_DIR"_local && mkdir -p "$BACKUP_DIR"_local
|
|
test ! -d "$BACKUP_DIR_LXC" && mkdir -p "$BACKUP_DIR_LXC"
|
|
|
|
#
|
|
# Backup LXC-Containers
|
|
|
|
if [ ! -z "$BACKUP_LXC_FULL" ]; then
|
|
for NAME in $BACKUP_LXC_FULL; do
|
|
cd /var/lib/lxc/"$NAME"/
|
|
|
|
lxc-stop -n "$NAME" &
|
|
sleep 2 && lxc-stop -n "$NAME" &
|
|
sleep 1 && lxc-stop -n "$NAME"
|
|
tar --numeric-owner -czvf backup-"$NAME"-"$DATE".tar.gz ./*
|
|
lxc-start -n "$NAME"
|
|
|
|
rm "$BACKUP_DIR_LXC"/backup-"$NAME"-*.tar.gz
|
|
mv backup-"$NAME"-"$DATE".tar.gz "$BACKUP_DIR_LXC"/
|
|
done
|
|
fi
|
|
|
|
#
|
|
# CUSTOM Backup
|
|
#
|
|
|
|
# Backup local mysql
|
|
mysqldump -u root --opt --order-by-primary --all-databases | gzip -c > /var/db-backups/mysql-dump-$(date +%F.%H%M%S).gz
|
|
|
|
# Backup local pgsql
|
|
## TODO
|
|
#pg_dumpall -U postgres | gzip -c > /var/db-backups/pgsql-dump-$(date +%F.%H%M%S).gz
|
|
|
|
# Backup git
|
|
lxc-attach -n gitea -- bash -c "sudo -Hiu git nice -n19 ionice -n7 /usr/local/bin/gitea dump -c /etc/gitea/app.ini"
|
|
|
|
# Backup matrix
|
|
lxc-attach -n matrix -- bash -c "sudo -Hiu postgres nice -n19 ionice -n7 pg_dump -F t matrix > /var/db-backups/matrix.tar"
|
|
|
|
# Backup pleroma
|
|
lxc-attach -n pleroma -- bash -c "sudo -Hiu postgres nice -n19 ionice -n7 pg_dump -F t pleroma > /var/db-backups/pleroma.tar"
|
|
|
|
# Backup ttrss
|
|
lxc-attach -n rss -- bash -c "nice -n10 ionice -n7 mysqldump -u root ttrss | nice -n19 ionice -n7 gzip -c > /var/db-backups/ttrss.gz"
|
|
|
|
###
|
|
|
|
sleep 10
|
|
|
|
#
|
|
# System Backup & SYNC
|
|
#
|
|
|
|
dpkg --get-selections | tee "$BACKUP_DIR"_local/pkg.list &>/dev/null
|
|
cp -r /etc/apt/sources.list* "$BACKUP_DIR"_local/
|
|
apt-key exportall | tee "$BACKUP_DIR"_local/repo.keys &>/dev/null
|
|
|
|
#
|
|
# Restic Backups
|
|
#
|
|
lp='/var/lib/lxc/*/rootfs'
|
|
exclude_lxc="$lp/dev,$lp/media,$lp/mnt,$lp/proc,$lp/run,$lp/sys,$lp/tmp,$lp/var/tmp"
|
|
|
|
for BH in $BACKUP_HOST; do
|
|
eval $restic sftp:"$BH":"$REMOTE_DIR"_system backup / --exclude=\{/dev,/media,/mnt,/proc,/run,/sys,/tmp,/root/.cache/,/var/tmp,/var/lib/lxcfs/cgroup,/data/tmp,/data/BACKUP,/data/BACKUP_LXC,$exclude_lxc\}
|
|
## $restic sftp:"$BH":"$REMOTE_DIR"_lxc backup "$BACKUP_DIR_LXC"
|
|
done
|
|
|
|
|
|
#
|
|
# clear old Backups
|
|
# remote
|
|
CHECKEOM="$(date --date=tomorrow +%d)"
|
|
if [ "$CHECKEOM" -eq 01 ]; then
|
|
for BH in $BACKUP_HOST; do
|
|
for RLN in $RESTIC_LOC_NAME; do
|
|
restic -r sftp:"$BH":"$REMOTE_DIR"_"$RLN" forget --keep-daily 1 --keep-weekly 4 --keep-monthly 1
|
|
restic -r sftp:"$BH":"$REMOTE_DIR"_"$RLN" prune
|
|
done
|
|
done
|
|
fi
|
|
|
|
# local
|
|
rm -f /var/db-backups/mysql-dump*.gz
|
|
#rm -f /var/db-backups/pgsql-dump*.gz
|
|
rm -f /var/lib/lxc/gitea/rootfs/srv/git/gitea-dump*.zip
|
|
rm -f /var/lib/lxc/matrix/rootfs/var/db-backups/matrix.tar
|
|
rm -f /var/lib/lxc/pleroma/rootfs/var/db-backups/pleroma.tar
|
|
rm -f /var/lib/lxc/rss/rootfs/var/db-backups/ttrss.gz
|
|
|
|
#
|
|
exit 0
|