Init borgbackup based backup solution for home server
This commit is contained in:
commit
51d4d1988e
56
backup.sh
Executable file
56
backup.sh
Executable file
@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# wake up backup machine
|
||||||
|
./wake_probook.sh 20
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Unable to wake up backup machine"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# stop web server to avoid access
|
||||||
|
echo "Stopping web server"
|
||||||
|
systemctl stop nginx
|
||||||
|
|
||||||
|
# nextcloud
|
||||||
|
echo "Backup nextcloud..."
|
||||||
|
# docker-compose -f docker/nextcloud/docker-compose.yml down --rmi all
|
||||||
|
docker-compose -f docker/nextcloud/docker-compose.yml down
|
||||||
|
./borg.sh Nextcloud /srv/nextcloud
|
||||||
|
./borg.sh Postgres /srv/postgres-data
|
||||||
|
docker-compose -f docker/nextcloud/docker-compose.yml up -d
|
||||||
|
|
||||||
|
# gitea
|
||||||
|
echo "Backup gitea..."
|
||||||
|
docker stop gitea
|
||||||
|
# docker rm gitea
|
||||||
|
# docker rmi gitea/gitea:latest
|
||||||
|
./borg.sh Gitea /srv/gitea
|
||||||
|
# docker/gitea/start.sh
|
||||||
|
docker start gitea
|
||||||
|
|
||||||
|
# influx/grafana
|
||||||
|
echo "Backup influx/grafana..."
|
||||||
|
docker stop influx
|
||||||
|
# docker rm influx
|
||||||
|
docker stop grafana
|
||||||
|
# docker rm grafana
|
||||||
|
# docker rmi influxdb grafana/grafana-oss
|
||||||
|
./borg.sh Influx /srv/influx
|
||||||
|
./borg.sh Grafana /srv/grafana
|
||||||
|
# docker/influx/start.sh
|
||||||
|
# docker/grafana/start.sh
|
||||||
|
docker start influx
|
||||||
|
docker start grafana
|
||||||
|
|
||||||
|
# activitycollect
|
||||||
|
echo "Backup activitycollect..."
|
||||||
|
docker stop activitycollect
|
||||||
|
./borg.sh Activitycollect /srv/activitycollect
|
||||||
|
docker start activitycollect
|
||||||
|
|
||||||
|
# re-start nginx
|
||||||
|
echo "Starting nginx"
|
||||||
|
systemctl start nginx
|
||||||
|
|
||||||
|
# shutdown backup machine
|
||||||
|
ssh root@probook 'systemctl poweroff'
|
69
borg.sh
Executable file
69
borg.sh
Executable file
@ -0,0 +1,69 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ $# -ne 2 ]; then
|
||||||
|
echo "Missing parameters"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
NAME=$1
|
||||||
|
SRC_FOLDER=$2
|
||||||
|
USER=tkl
|
||||||
|
HOST=probook
|
||||||
|
|
||||||
|
# Setting this, so the repo does not need to be given on the commandline:
|
||||||
|
export BORG_REPO=ssh://$USER@$HOST/backup
|
||||||
|
# some helpers and error handling:
|
||||||
|
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
|
||||||
|
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
|
||||||
|
|
||||||
|
info "Starting backup"
|
||||||
|
|
||||||
|
# Backup the most important directories into an archive named after
|
||||||
|
# the machine this script is currently running on:
|
||||||
|
|
||||||
|
borg create \
|
||||||
|
--verbose \
|
||||||
|
--filter AME \
|
||||||
|
--list \
|
||||||
|
--stats \
|
||||||
|
--show-rc \
|
||||||
|
--compression lzma,9 \
|
||||||
|
--exclude-caches \
|
||||||
|
--exclude 'sh:**/.git' \
|
||||||
|
\
|
||||||
|
::$NAME'-{now}' \
|
||||||
|
$SRC_FOLDER
|
||||||
|
|
||||||
|
backup_exit=$?
|
||||||
|
|
||||||
|
info "Pruning repository"
|
||||||
|
|
||||||
|
borg prune \
|
||||||
|
--list \
|
||||||
|
--glob-archives $NAME'-*' \
|
||||||
|
--show-rc \
|
||||||
|
--keep-within 1w
|
||||||
|
|
||||||
|
prune_exit=$?
|
||||||
|
|
||||||
|
# actually free repo disk space by compacting segments
|
||||||
|
|
||||||
|
info "Compacting repository"
|
||||||
|
|
||||||
|
borg compact
|
||||||
|
|
||||||
|
compact_exit=$?
|
||||||
|
|
||||||
|
# use highest exit code as global exit code
|
||||||
|
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
|
||||||
|
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
|
||||||
|
|
||||||
|
if [ ${global_exit} -eq 0 ]; then
|
||||||
|
info "Backup, Prune, and Compact finished successfully"
|
||||||
|
elif [ ${global_exit} -eq 1 ]; then
|
||||||
|
info "Backup, Prune, and/or Compact finished with warnings"
|
||||||
|
else
|
||||||
|
info "Backup, Prune, and/or Compact finished with errors"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${global_exit}
|
20
docker/gitea/start.sh
Executable file
20
docker/gitea/start.sh
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
IMAGE_NAME=gitea/gitea
|
||||||
|
IMAGE_TAG=latest
|
||||||
|
CONTAINER_NAME=gitea
|
||||||
|
|
||||||
|
HOST_DIR=/srv/$CONTAINER_NAME
|
||||||
|
SLAVE_DIR=/data
|
||||||
|
|
||||||
|
docker run \
|
||||||
|
--detach \
|
||||||
|
--restart always \
|
||||||
|
--hostname git \
|
||||||
|
--publish 8002:3000 \
|
||||||
|
--publish 2222:22 \
|
||||||
|
--name $CONTAINER_NAME \
|
||||||
|
--volume $HOST_DIR:$SLAVE_DIR \
|
||||||
|
$IMAGE_NAME:$IMAGE_TAG
|
||||||
|
|
||||||
|
|
10
docker/grafana/start.sh
Executable file
10
docker/grafana/start.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
docker run \
|
||||||
|
--detach \
|
||||||
|
--user root \
|
||||||
|
--volume "/srv/grafana:/var/lib/grafana" \
|
||||||
|
--publish 3000:3000 \
|
||||||
|
--name grafana \
|
||||||
|
--restart unless-stopped \
|
||||||
|
grafana/grafana-oss
|
9
docker/influx/start.sh
Executable file
9
docker/influx/start.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
docker run \
|
||||||
|
--detach \
|
||||||
|
--publish 8086:8086 \
|
||||||
|
--volume /srv/influx:/var/lib/influxdb2 \
|
||||||
|
--restart unless-stopped \
|
||||||
|
--name influx \
|
||||||
|
influxdb:latest
|
27
docker/nextcloud/docker-compose.yml
Normal file
27
docker/nextcloud/docker-compose.yml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
services:
|
||||||
|
nextcloud:
|
||||||
|
image: nextcloud
|
||||||
|
ports:
|
||||||
|
- "8008:80"
|
||||||
|
volumes:
|
||||||
|
- /srv/nextcloud/:/var/www/html
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- POSTGRES_HOST=nextcloud_db_1 # service name for postgres as assigned by Docker
|
||||||
|
- POSTGRES_DB=nextcloud_db
|
||||||
|
- POSTGRES_USER=postgres # will access postgres over 5432
|
||||||
|
- POSTGRES_PASSWORD=ncdbpwd
|
||||||
|
- PHP_MEMORY_LIMIT=1024M
|
||||||
|
- PHP_UPLOAD_LIMIT=1024M
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:13
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /srv/postgres-data:/var/lib/postgresql/data
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=nextcloud_db
|
||||||
|
- POSTGRES_USER=postgres
|
||||||
|
- POSTGRES_PASSWORD=ncdbpwd
|
49
update.sh
Executable file
49
update.sh
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# wake up backup machine
|
||||||
|
./wake_probook.sh 20
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Unable to wake up backup machine"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# stop web server to avoid access
|
||||||
|
echo "Stopping web server"
|
||||||
|
systemctl stop nginx
|
||||||
|
|
||||||
|
# nextcloud
|
||||||
|
echo "Backup nextcloud..."
|
||||||
|
docker-compose -f docker/nextcloud/docker-compose.yml down --rmi all
|
||||||
|
./borg.sh Nextcloud /srv/nextcloud
|
||||||
|
./borg.sh Postgres /srv/postgres-data
|
||||||
|
docker-compose -f docker/nextcloud/docker-compose.yml up -d
|
||||||
|
|
||||||
|
# gitea
|
||||||
|
echo "Backup gitea..."
|
||||||
|
docker stop gitea
|
||||||
|
docker rm gitea
|
||||||
|
docker rmi gitea/gitea:latest
|
||||||
|
./borg.sh Gitea /srv/gitea
|
||||||
|
|
||||||
|
# influx/grafana
|
||||||
|
echo "Backup influx/grafana..."
|
||||||
|
docker stop influx
|
||||||
|
docker rm influx
|
||||||
|
docker stop grafana
|
||||||
|
docker rm grafana
|
||||||
|
docker rmi influxdb grafana/grafana-oss
|
||||||
|
./borg.sh Influx /srv/influx
|
||||||
|
./borg.sh Grafana /srv/grafana
|
||||||
|
|
||||||
|
# activitycollect
|
||||||
|
echo "Backup activitycollect..."
|
||||||
|
docker stop activitycollect
|
||||||
|
./borg.sh Activitycollect /srv/activitycollect
|
||||||
|
docker start activitycollect
|
||||||
|
|
||||||
|
# re-start nginx
|
||||||
|
echo "Starting nginx"
|
||||||
|
systemctl start nginx
|
||||||
|
|
||||||
|
# shutdown backup machine
|
||||||
|
ssh root@probook 'systemctl poweroff'
|
36
wake_probook.sh
Executable file
36
wake_probook.sh
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
host=probook
|
||||||
|
host_mac=2c:41:38:08:6c:44
|
||||||
|
timeout=1
|
||||||
|
|
||||||
|
# when no count parameter is set use 1
|
||||||
|
if [ $# -ne 0 ]; then
|
||||||
|
timeout=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "Checking if $host is already alive... "
|
||||||
|
ping -c 1 $host >/dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "yes. Done"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "no."
|
||||||
|
|
||||||
|
echo -n "Trying to wake up $host ... "
|
||||||
|
|
||||||
|
while [ $timeout -gt 0 ]; do
|
||||||
|
wol $host_mac >/dev/null 2>&1
|
||||||
|
ping -c 1 $host >/dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "success."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
((timeout--))
|
||||||
|
echo "no."
|
||||||
|
echo -n "Re-trying to wake up $host ... "
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "no."
|
||||||
|
echo "Unable to wake up $host"
|
||||||
|
exit 1
|
||||||
|
|
Loading…
Reference in New Issue
Block a user