#!/bin/bash source "${AGENT_PATH}/common.sh" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" _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" # 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 # Create temp directory for extraction TEMP_DIR=$(mktemp -d) trap "rm -rf $TEMP_DIR" EXIT # Extract backup echo "Extracting backup..." tar -xzf "$BACKUP_FILE" -C "$TEMP_DIR" || _die "Failed to extract backup" # 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!"