diff --git a/wikijs/backup.sh b/wikijs/backup.sh index a982f86..eb25dd7 100755 --- a/wikijs/backup.sh +++ b/wikijs/backup.sh @@ -1,21 +1,38 @@ #!/bin/bash source "${AGENT_PATH}/common.sh" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -source "${SCRIPT_DIR}/_volumes.sh" -_check_required_env_vars "CONTAINER_NAME" "DATA_PATH" +_check_required_env_vars "CONTAINER_NAME" "DATA_PATH" "DB_NAME" "DB_USER" # Export variables for docker compose export CONTAINER_NAME DATA_PATH HTTP_PORT PUID PGID TZ IMAGE_TAG DB_NAME DB_USER DB_PASS cd "$SCRIPT_DIR" -# Stop containers for consistent backup -docker compose stop +# Create backup directory +BACKUP_DIR="${DATA_PATH}/backups" +mkdir -p "$BACKUP_DIR" -# shellcheck disable=SC2046 -backup_items $(get_wikijs_volumes) || _die "Failed to create backup" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +BACKUP_FILE="${BACKUP_DIR}/wikijs_backup_${TIMESTAMP}.tar.gz" -# Restart containers -docker compose start +echo "Creating backup..." -echo "Backup created successfully" +# Dump PostgreSQL database +echo "Dumping PostgreSQL database..." +docker exec ${CONTAINER_NAME}_db pg_dump -U "$DB_USER" "$DB_NAME" > "${BACKUP_DIR}/database.sql" || _die "Failed to dump database" + +# Create tarball of config, data, and database dump +echo "Creating backup archive..." +tar -czf "$BACKUP_FILE" \ + -C "${DATA_PATH}" \ + config \ + data \ + -C "${BACKUP_DIR}" \ + database.sql \ + || _die "Failed to create backup archive" + +# Clean up temporary database dump +rm -f "${BACKUP_DIR}/database.sql" + +echo "Backup created: $BACKUP_FILE" +echo "Backup size: $(du -h "$BACKUP_FILE" | cut -f1)" diff --git a/wikijs/restore.sh b/wikijs/restore.sh index 927e145..df8ee57 100755 --- a/wikijs/restore.sh +++ b/wikijs/restore.sh @@ -1,22 +1,63 @@ #!/bin/bash source "${AGENT_PATH}/common.sh" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -source "${SCRIPT_DIR}/_volumes.sh" -_check_required_env_vars "CONTAINER_NAME" "DATA_PATH" +_check_required_env_vars "CONTAINER_NAME" "DATA_PATH" "DB_NAME" "DB_USER" # Export variables for docker compose export CONTAINER_NAME DATA_PATH HTTP_PORT PUID PGID TZ IMAGE_TAG DB_NAME DB_USER DB_PASS cd "$SCRIPT_DIR" -# Stop containers before restore +# Find the latest backup or use provided argument +BACKUP_DIR="${DATA_PATH}/backups" +if [ -n "$1" ]; then + BACKUP_FILE="$1" +else + BACKUP_FILE=$(ls -t "${BACKUP_DIR}"/wikijs_backup_*.tar.gz 2>/dev/null | head -1) +fi + +[ -z "$BACKUP_FILE" ] && _die "No backup file found. Usage: restore.sh [backup_file]" +[ ! -f "$BACKUP_FILE" ] && _die "Backup file not found: $BACKUP_FILE" + +echo "Restoring from: $BACKUP_FILE" + +# Stop containers +echo "Stopping containers..." docker compose down -# Restore data from backup file -# shellcheck disable=SC2046 -restore_items $(get_wikijs_volumes) || _die "Failed to restore data from backup file" +# Create temp directory for extraction +TEMP_DIR=$(mktemp -d) +trap "rm -rf $TEMP_DIR" EXIT -# Reinstall service -./install.sh || _die "Failed to reinstall service after restore" +# Extract backup +echo "Extracting backup..." +tar -xzf "$BACKUP_FILE" -C "$TEMP_DIR" || _die "Failed to extract backup" -echo "Restore complete! Service is running again." +# Restore config and data directories +echo "Restoring files..." +rm -rf "${DATA_PATH}/config" "${DATA_PATH}/data" +cp -r "${TEMP_DIR}/config" "${DATA_PATH}/" +cp -r "${TEMP_DIR}/data" "${DATA_PATH}/" + +# Start database container only +echo "Starting database..." +docker compose up -d db +sleep 5 + +# Restore database +if [ -f "${TEMP_DIR}/database.sql" ]; then + echo "Restoring database..." + # Drop and recreate database + docker exec ${CONTAINER_NAME}_db psql -U "$DB_USER" -d postgres -c "DROP DATABASE IF EXISTS ${DB_NAME};" + docker exec ${CONTAINER_NAME}_db psql -U "$DB_USER" -d postgres -c "CREATE DATABASE ${DB_NAME};" + # Restore from dump + docker exec -i ${CONTAINER_NAME}_db psql -U "$DB_USER" -d "$DB_NAME" < "${TEMP_DIR}/database.sql" || _die "Failed to restore database" +else + echo "Warning: No database dump found in backup" +fi + +# Start all containers +echo "Starting all containers..." +docker compose up -d + +echo "Restore complete!"