added additional sh

This commit is contained in:
Dejan R. 2025-11-29 19:14:25 +00:00
parent 25a68b89ba
commit 5a634f2c33
2 changed files with 136 additions and 0 deletions

68
readme.md Normal file
View file

@ -0,0 +1,68 @@
Vikunja Docker Backup and Restore Utilities
These scripts are designed to simplify the management of your Vikunja Docker installation which uses local volumes (db and files).
⚠️ PREREQUISITES AND WARNINGS:
Ensure both scripts (backup.sh and restore.sh) are in the same directory as your docker-compose.yml file.
Run the following command once to make both scripts executable:
chmod +x *.sh
The restore script is a DESTRUCTIVE action. It permanently deletes the current db and files directories before restoring data. Use with caution.
1. Backup Script (backup.sh)
This script is used to safely create a consistent, compressed snapshot of your application and data.
Process
Stops the running Vikunja and MariaDB containers (docker compose down).
Creates the ./backup directory if it doesn't exist.
Archives docker-compose.yml, the db/ folder (MariaDB data), and the files/ folder (Vikunja attachments).
Restarts the services (docker compose up -d).
Usage
./backup.sh
Output
Backups are placed in the ./backup directory with a timestamped filename, e.g., vikunja_backup_YYYYMMDD_HHMMSS.tar.gz.
2. Restore Script (restore.sh)
This script is used to revert your application to a previous state from one of your backup archives.
Process
Lists all available backup files in the ./backup folder.
Prompts the user to enter the full filename of the desired backup.
Stops the running containers.
DELETES the current db and files data directories.
Extracts the contents of the selected archive into the current directory.
Restarts the services.
Usage
./restore.sh
The script will guide you through the file selection:
Available backup archives:
1) vikunja_backup_20251128_150000.tar.gz
2) vikunja_backup_20251129_201230.tar.gz
Enter the full filename of the backup you want to restore: vikunja_backup_20251129_201230.tar.gz

68
restore.sh Normal file
View file

@ -0,0 +1,68 @@
#!/bin/bash
# --- Configuration ---
BACKUP_DIR="./backup"
# Exit immediately if a command exits with a non-zero status
set -e
echo "Starting Vikunja restore process."
# 1. Check for backups and display options
echo "Checking for available backups..."
if [ ! -d "$BACKUP_DIR" ] || [ -z "$(find "$BACKUP_DIR" -maxdepth 1 -name "*.tar.gz" -print -quit 2>/dev/null)" ]; then
echo "❌ Error: No backup files (*.tar.gz) found in '${BACKUP_DIR}'. Aborting."
exit 1
fi
echo "Available backup archives in ${BACKUP_DIR}:"
find "$BACKUP_DIR" -maxdepth 1 -name "*.tar.gz" -printf "%f\n" | nl -w 3 -s ') '
echo
# 2. Get user input for which file to restore
while true; do
read -r -p "Enter the full filename of the backup you want to restore: " ARCHIVE_NAME
ARCHIVE_PATH="${BACKUP_DIR}/${ARCHIVE_NAME}"
if [ -f "$ARCHIVE_PATH" ]; then
break
else
echo "File not found: ${ARCHIVE_PATH}. Please ensure the name is correct. (Ctrl+C to exit)."
fi
done
echo "Attempting to restore from: ${ARCHIVE_PATH}"
# 3. Stop running services
echo "1. Shutting down Docker services (docker compose down)..."
docker compose down
# 4. Clean up current data (DANGEROUS STEP: BE SURE BEFORE RUNNING)
echo "2. Deleting current data directories to prepare for restoration..."
if [ -d "db" ]; then
echo " - Removing current 'db' directory."
rm -rf db
fi
if [ -d "files" ]; then
echo " - Removing current 'files' directory."
rm -rf files
fi
if [ -f "docker-compose.yml" ]; then
echo " - NOTE: Overwriting current 'docker-compose.yml'."
fi
# 5. Extract the backup
echo "3. Extracting data from archive..."
# This extracts db/, files/, and docker-compose.yml into the current directory
tar -xzvf "$ARCHIVE_PATH"
# 6. Restart the services
echo "4. Bringing Docker services back up (docker compose up -d)..."
docker compose up -d
# 7. Completion message
echo "--------------------------------------------------------"
echo "✅ Restoration successfully completed!"
echo "Vikunja services are now running again with data from ${ARCHIVE_NAME}."
echo "--------------------------------------------------------"