Files
backup/docker-backup.sh

76 lines
1.4 KiB
Bash

#!/bin/bash
today=$(date +'%F')
stackdir="/etc/komodo/stacks"
backupdir="/backups"
services=($(find "$stackdir" -maxdepth 1 -mindepth 1 -type d))
# Add volumes here to backup.
volumes=(
"/var/lib/docker/volumes"
"/opt"
)
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 --parents "$service" "$dir"
done
}
function copyVolumes() {
echo "Copying volumes..."
local dir="$1/volumes"
mkdir "$dir"
for volume in "${volumes[@]}"; do
cp -r --parents "$volume" "$dir"
done
}
function backup() {
echo "Creating backup..."
tar -cvzf "/$today.tar.gz" "$1"
cp -r "/$today.tar.gz" "$backupdir"
# Cleanup temporary files.
rm -rf "$1" "/$today.tar.gz"
}
function main() {
# stop services.
stopServices
# Create a temporary directory.
local temp="/$today"
mkdir "$temp"
# copy stack configuration.
copyStacks "$temp"
# copy stack configuration.
copyVolumes "$temp"
# Create a tar to backup.
backup "$temp"
# Restart services.
startServices
}
main "$@"