backup multiple paths #5
@ -52,11 +52,11 @@ services:
|
|||||||
backupbot.backup: "true"
|
backupbot.backup: "true"
|
||||||
backupbot.backup.pre-hook: 'mysqldump -u root -p"$(cat /run/secrets/db_root_password)" -f /tmp/dump/dump.db'
|
backupbot.backup.pre-hook: 'mysqldump -u root -p"$(cat /run/secrets/db_root_password)" -f /tmp/dump/dump.db'
|
||||||
backupbot.backup.post-hook: "rm -rf /tmp/dump/dump.db"
|
backupbot.backup.post-hook: "rm -rf /tmp/dump/dump.db"
|
||||||
backupbot.backup.path: "/tmp/dump/"
|
backupbot.backup.path: "/tmp/dump/,/etc/foo/"
|
||||||
```
|
```
|
||||||
|
|
||||||
- `backupbot.backup` -- set to `true` to back up this service (REQUIRED)
|
- `backupbot.backup` -- set to `true` to back up this service (REQUIRED)
|
||||||
- `backupbot.backup.path` -- file path within the service to copy (REQUIRED)
|
- `backupbot.backup.path` -- comma separated list of file paths within the service to copy (REQUIRED)
|
||||||
- `backupbot.backup.pre-hook` -- command to run before copying files (optional)
|
- `backupbot.backup.pre-hook` -- command to run before copying files (optional)
|
||||||
- `backupbot.backup.post-hook` -- command to run after copying files (optional)
|
- `backupbot.backup.post-hook` -- command to run after copying files (optional)
|
||||||
|
|
||||||
|
15
backup.sh
15
backup.sh
@ -21,7 +21,7 @@ if [ -n "$ssh_key_file" ] && [ -f "$ssh_key_file" ]; then
|
|||||||
# Only check server against provided SSH_HOST_KEY, if set
|
# Only check server against provided SSH_HOST_KEY, if set
|
||||||
if [ -n "$SSH_HOST_KEY" ]; then
|
if [ -n "$SSH_HOST_KEY" ]; then
|
||||||
tmpfile=$(mktemp)
|
tmpfile=$(mktemp)
|
||||||
echo "$SSH_HOST_KEY" >> "$tmpfile"
|
echo "$SSH_HOST_KEY" >>"$tmpfile"
|
||||||
echo "using host key $SSH_HOST_KEY"
|
echo "using host key $SSH_HOST_KEY"
|
||||||
ssh_options="-o 'UserKnownHostsFile $tmpfile'"
|
ssh_options="-o 'UserKnownHostsFile $tmpfile'"
|
||||||
elif [ "$SSH_HOST_KEY_DISABLE" = "1" ]; then
|
elif [ "$SSH_HOST_KEY_DISABLE" = "1" ]; then
|
||||||
@ -72,6 +72,8 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ \ $*\ != *\ --skip-backup\ * ]]; then
|
if [[ \ $*\ != *\ --skip-backup\ * ]]; then
|
||||||
|
rm -rf "${backup_path}"
|
||||||
|
|||||||
|
|
||||||
for service in "${services[@]}"; do
|
for service in "${services[@]}"; do
|
||||||
echo "service: $service"
|
echo "service: $service"
|
||||||
details=$(docker service inspect "$service" --format "{{ json .Spec.Labels }}")
|
details=$(docker service inspect "$service" --format "{{ json .Spec.Labels }}")
|
||||||
@ -88,7 +90,6 @@ if [[ \ $*\ != *\ --skip-backup\ * ]]; then
|
|||||||
container=$(docker container ls -f "name=$service" --format '{{ .ID }}')
|
container=$(docker container ls -f "name=$service" --format '{{ .ID }}')
|
||||||
|
|
||||||
echo "backing up $service"
|
echo "backing up $service"
|
||||||
test -d "$backup_path/$service" || mkdir "$backup_path/$service"
|
|
||||||
|
|
||||||
if [ "$pre" != "null" ]; then
|
if [ "$pre" != "null" ]; then
|
||||||
# run the precommand
|
# run the precommand
|
||||||
@ -97,7 +98,12 @@ if [[ \ $*\ != *\ --skip-backup\ * ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# run the backup
|
# run the backup
|
||||||
docker cp "$container:$path" "$backup_path/$service"
|
for p in ${path//,/ }; do
|
||||||
|
# creates the parent folder, so `docker cp` has reliable behaviour no matter if $p ends with `/` or `/.`
|
||||||
|
dir=$backup_path/$service/$(dirname "$p")
|
||||||
|
test -d "$dir" || mkdir -p "$dir"
|
||||||
|
docker cp -a "$container:$p" "$dir/$(basename "$p")"
|
||||||
|
done
|
||||||
|
|
||||||
if [ "$post" != "null" ]; then
|
if [ "$post" != "null" ]; then
|
||||||
# run the postcommand
|
# run the postcommand
|
||||||
@ -115,5 +121,6 @@ if [[ \ $*\ != *\ --skip-backup\ * ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ \ $*\ != *\ --skip-upload\ * ]]; then
|
if [[ \ $*\ != *\ --skip-upload\ * ]]; then
|
||||||
_restic backup --tag coop-cloud "$backup_path"
|
_restic backup --host "$server_name" --tag coop-cloud "$backup_path"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user
Wondering if we can add a config option for this, but fine for the moment.
agree! I added this because I realized that the backupbots volume could potentially grow for ever in my usecase, as the copy doesn't delete any files that don't exist anymore. But for other usecases it might be good to disable it.