diff --git a/docker-backup.sh b/docker-backup.sh new file mode 100644 index 0000000..82a0962 --- /dev/null +++ b/docker-backup.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +today=$(date +'%F') +volumesdir="/var/lib/docker/volumes" +stackdir="/etc/komodo/stacks" +backupdir="/backups" + +# Add services here to stop and backup. +services=( + "$stackdir/caddy_housh_dev" +) + +# Add volumes here to backup. +volumes=( + "$volumesdir" +) + +function stopServices() { + echo "Stopping services..." + for service in "${services[@]}"; do + cd "$service" && docker compose stop + done +} + +function startServices() { + echo "Restarting services..." + for service in "${services[@]}"; do + cd "$service" && docker compose up -d + done +} + +function copyStacks() { + echo "Copying stack configuration..." + local dir="$1/stacks" + mkdir "$dir" + for service in "${services[@]}"; do + cp -R "$service" "$dir" + done +} + +function copyVolumes() { + echo "Copying volumes..." + local dir="$1/volumes" + mkdir "$dir" + for volume in "${volumes[@]}"; do + cp -R "$volume" "$dir" + done +} + +function backup() { + echo "Creating backup..." + tar -cvf "/tmp/$today.tar" "$temp" + gzip "/tmp/$today.tar" + cp -R "/tmp/$today.tar.gz" "$backupdir" + # Cleanup temporary files. + rm -rf "$temp" "/tmp/$today.tar" "/tmp/$today.tar.gz" +} + +function main() { + # stop services. + stopServices + + # Create a temporary directory. + local temp="/tmp/$today" + mkdir "$temp" + + # copy stack configuration. + copyStacks "$temp" + + # Create a tar to backup. + backup + + # Restart services. + startServices +} + +main "$@"