79 lines
2.1 KiB
Bash
Executable File
79 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Simple backup script for your personal cloud
|
|
|
|
set -e
|
|
set -o pipefail
|
|
|
|
# Initialize Wild Cloud environment
|
|
if [ -z "${WC_ROOT}" ]; then
|
|
echo "WC_ROOT is not set."
|
|
exit 1
|
|
else
|
|
source "${WC_ROOT}/scripts/common.sh"
|
|
init_wild_env
|
|
fi
|
|
|
|
if `wild-config cloud.backup.root --check`; then
|
|
export RESTIC_REPOSITORY="$(wild-config cloud.backup.root)"
|
|
else
|
|
echo "WARNING: Could not get cloud backup root."
|
|
exit 1
|
|
fi
|
|
|
|
if `wild-secret cloud.backupPassword --check`; then
|
|
export RESTIC_PASSWORD="$(wild-secret cloud.backupPassword)"
|
|
else
|
|
echo "WARNING: Could not get cloud backup secret."
|
|
exit 1
|
|
fi
|
|
|
|
if `wild-config cloud.backup.staging --check`; then
|
|
STAGING_DIR="$(wild-config cloud.backup.staging)"
|
|
else
|
|
echo "WARNING: Could not get cloud backup staging directory."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Backup at '$RESTIC_REPOSITORY'."
|
|
|
|
# Initialize the repository if needed.
|
|
echo "Checking if restic repository exists..."
|
|
if restic cat config >/dev/null 2>&1; then
|
|
echo "Using existing backup repository."
|
|
else
|
|
echo "No existing backup repository found. Initializing restic repository..."
|
|
restic init
|
|
echo "Repository initialized successfully."
|
|
fi
|
|
|
|
# Backup entire WC_HOME.
|
|
restic --verbose --tag wild-cloud --tag wc-home --tag "$(date +%Y-%m-%d)" backup $WC_HOME
|
|
# TODO: Ignore wild cloud cache?
|
|
|
|
mkdir -p "$STAGING_DIR"
|
|
|
|
# Run backup for all apps at once
|
|
echo "Running backup for all apps..."
|
|
wild-app-backup --all
|
|
|
|
# Upload each app's backup to restic individually
|
|
for app_dir in "$STAGING_DIR"/apps/*; do
|
|
if [ ! -d "$app_dir" ]; then
|
|
continue
|
|
fi
|
|
app="$(basename "$app_dir")"
|
|
echo "Uploading backup for app: $app"
|
|
restic --verbose --tag wild-cloud --tag "$app" --tag "$(date +%Y-%m-%d)" backup "$app_dir"
|
|
echo "Backup for app '$app' completed."
|
|
done
|
|
|
|
# Back up Kubernetes resources
|
|
# kubectl get all -A -o yaml > "$BACKUP_DIR/all-resources.yaml"
|
|
# kubectl get secrets -A -o yaml > "$BACKUP_DIR/secrets.yaml"
|
|
# kubectl get configmaps -A -o yaml > "$BACKUP_DIR/configmaps.yaml"
|
|
|
|
# Back up persistent volumes
|
|
# TODO: Add logic to back up persistent volume data
|
|
|
|
echo "Backup completed: $BACKUP_DIR"
|