85 lines
1.6 KiB
Bash
85 lines
1.6 KiB
Bash
#!/bin/bash
|
|
|
|
today=$(date +'%F')
|
|
stackdir="/etc/komodo/stacks"
|
|
backupdir="/backups"
|
|
|
|
services=()
|
|
readarray -d '' 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
|
|
# copy only directories.
|
|
#
|
|
find "$volume" -maxdepth 1 -mindepth 1 -type d -print0 |
|
|
xargs -0 -I {} cp -r --parents "$volume" "{}"
|
|
|
|
# for dir in $(find "$volume" -maxdepth 1 -mindepth 1 -type d); do
|
|
# cp -r --parents "$volume" "$dir"
|
|
# done
|
|
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 "$@"
|