Update 2 files
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 42s

This commit is contained in:
j
2025-12-19 17:55:51 +13:00
parent 624a5d8575
commit 5957e85ff3
2 changed files with 31 additions and 59 deletions

View File

@@ -1,6 +1,8 @@
#!/bin/bash #!/bin/bash
# shellcheck disable=SC1091
source "${AGENT_PATH}/common.sh" source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/_volumes.sh"
_check_required_env_vars "CONTAINER_NAME" "DATA_PATH" "DB_NAME" "DB_USER" _check_required_env_vars "CONTAINER_NAME" "DATA_PATH" "DB_NAME" "DB_USER"
# Export variables for docker compose # Export variables for docker compose
@@ -8,31 +10,21 @@ export CONTAINER_NAME DATA_PATH HTTP_PORT PUID PGID TZ IMAGE_TAG DB_NAME DB_USER
cd "$SCRIPT_DIR" cd "$SCRIPT_DIR"
# Create backup directory # Dump PostgreSQL database before backup
BACKUP_DIR="${DATA_PATH}/backups"
mkdir -p "$BACKUP_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/wikijs_backup_${TIMESTAMP}.tar.gz"
echo "Creating backup..."
# Dump PostgreSQL database
echo "Dumping 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" docker exec ${CONTAINER_NAME}_db pg_dump -U "$DB_USER" "$DB_NAME" > "${DATA_PATH}/database.sql" || _die "Failed to dump database"
# Create tarball of config, data, and database dump # Stop containers for consistent backup
echo "Creating backup archive..." docker compose stop
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 # Backup using dropshell's backup system
rm -f "${BACKUP_DIR}/database.sql" # shellcheck disable=SC2046
backup_items $(get_wikijs_volumes) || _die "Failed to create backup"
echo "Backup created: $BACKUP_FILE" # Clean up database dump (it's now in the backup)
echo "Backup size: $(du -h "$BACKUP_FILE" | cut -f1)" rm -f "${DATA_PATH}/database.sql"
# Restart containers
docker compose start
echo "Backup created successfully"

View File

@@ -1,6 +1,8 @@
#!/bin/bash #!/bin/bash
# shellcheck disable=SC1091
source "${AGENT_PATH}/common.sh" source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/_volumes.sh"
_check_required_env_vars "CONTAINER_NAME" "DATA_PATH" "DB_NAME" "DB_USER" _check_required_env_vars "CONTAINER_NAME" "DATA_PATH" "DB_NAME" "DB_USER"
# Export variables for docker compose # Export variables for docker compose
@@ -8,56 +10,34 @@ export CONTAINER_NAME DATA_PATH HTTP_PORT PUID PGID TZ IMAGE_TAG DB_NAME DB_USER
cd "$SCRIPT_DIR" cd "$SCRIPT_DIR"
# Find the latest backup or use provided argument # Stop and remove containers before restore
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 docker compose down
# Create temp directory for extraction # Restore files using dropshell's restore system
TEMP_DIR=$(mktemp -d) # shellcheck disable=SC2046
trap "rm -rf $TEMP_DIR" EXIT restore_items $(get_wikijs_volumes) || _die "Failed to restore data from backup file"
# 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 # Start database container only
echo "Starting database..."
docker compose up -d db docker compose up -d db
echo "Waiting for database to be ready..."
sleep 5 sleep 5
# Restore database # Restore database if dump exists
if [ -f "${TEMP_DIR}/database.sql" ]; then if [ -f "${DATA_PATH}/database.sql" ]; then
echo "Restoring database..." echo "Restoring PostgreSQL database..."
# Drop and recreate 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 "DROP DATABASE IF EXISTS ${DB_NAME};"
docker exec ${CONTAINER_NAME}_db psql -U "$DB_USER" -d postgres -c "CREATE DATABASE ${DB_NAME};" docker exec ${CONTAINER_NAME}_db psql -U "$DB_USER" -d postgres -c "CREATE DATABASE ${DB_NAME};"
# Restore from dump # 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" docker exec -i ${CONTAINER_NAME}_db psql -U "$DB_USER" -d "$DB_NAME" < "${DATA_PATH}/database.sql" || _die "Failed to restore database"
# Clean up dump file
rm -f "${DATA_PATH}/database.sql"
echo "Database restored successfully"
else else
echo "Warning: No database dump found in backup" echo "Warning: No database dump found in backup"
fi fi
# Start all containers # Start all containers
echo "Starting all containers..."
docker compose up -d docker compose up -d
echo "Restore complete!" echo "Restore complete! Service is running."