mirror of
https://github.com/plankanban/planka.git
synced 2026-05-04 18:00:55 +03:00
fix(backup): Improve backup/restore scripts, allow specifying backup directory (#1541)
This commit is contained in:
@@ -1,13 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Stop on Error
|
||||
# Stop on error
|
||||
set -e
|
||||
|
||||
# Configure those to match your PLANKA Docker container names
|
||||
PLANKA_DOCKER_CONTAINER_POSTGRES="planka-postgres-1"
|
||||
PLANKA_DOCKER_CONTAINER_PLANKA="planka-planka-1"
|
||||
# Configure those to match your Docker container names
|
||||
DOCKER_CONTAINER_POSTGRES="planka-postgres-1"
|
||||
DOCKER_CONTAINER_PLANKA="planka-planka-1"
|
||||
|
||||
# Use provided directory or default to current directory
|
||||
BACKUP_DIR="${1:-$(pwd)}"
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "No backup directory specified, backing up to current directory: $BACKUP_DIR"
|
||||
else
|
||||
echo "Backing up to: $BACKUP_DIR"
|
||||
fi
|
||||
echo
|
||||
|
||||
# Create Temporary folder
|
||||
if date --version >/dev/null 2>&1; then
|
||||
# GNU date (Linux)
|
||||
BACKUP_DATETIME=$(date --utc +%FT%H-%M-%SZ)
|
||||
@@ -15,28 +24,30 @@ else
|
||||
# BSD date (macOS)
|
||||
BACKUP_DATETIME=$(date -u +%FT%H-%M-%SZ)
|
||||
fi
|
||||
mkdir -p "$BACKUP_DATETIME-backup"
|
||||
|
||||
# Dump DB into SQL File
|
||||
BACKUP_TEMP="$BACKUP_DIR/$BACKUP_DATETIME-backup"
|
||||
|
||||
# Create temporary directory
|
||||
mkdir -p "$BACKUP_TEMP"
|
||||
|
||||
echo -n "Exporting postgres database ... "
|
||||
docker exec -t "$PLANKA_DOCKER_CONTAINER_POSTGRES" pg_dumpall -c -U postgres > "$BACKUP_DATETIME-backup/postgres.sql"
|
||||
docker exec -t "$DOCKER_CONTAINER_POSTGRES" pg_dumpall -c -U postgres > "$BACKUP_TEMP/postgres.sql"
|
||||
echo "Success!"
|
||||
echo
|
||||
|
||||
# Export Docker Volume
|
||||
echo -n "Exporting data volume ... "
|
||||
docker run --rm --volumes-from "$PLANKA_DOCKER_CONTAINER_PLANKA" -v "$(pwd)/$BACKUP_DATETIME-backup:/backup" ubuntu cp -r /app/data /backup/data
|
||||
docker run --rm --volumes-from "$DOCKER_CONTAINER_PLANKA" -v "$BACKUP_TEMP:/backup" node:22-alpine cp -r /app/data /backup/data
|
||||
echo "Success!"
|
||||
echo
|
||||
|
||||
# Create tgz
|
||||
echo -n "Creating final tarball $BACKUP_DATETIME-backup.tgz ... "
|
||||
tar -czf "$BACKUP_DATETIME-backup.tgz" \
|
||||
"$BACKUP_DATETIME-backup/postgres.sql" \
|
||||
"$BACKUP_DATETIME-backup/data"
|
||||
tar -C "$BACKUP_DIR" -czf "$BACKUP_TEMP.tgz" "$BACKUP_DATETIME-backup"
|
||||
echo "Success!"
|
||||
echo
|
||||
|
||||
# Remove source files
|
||||
echo -n "Cleaning up temporary files and folders ... "
|
||||
rm -rf "$BACKUP_DATETIME-backup"
|
||||
echo -n "Cleaning up temporary files and directories ... "
|
||||
rm -rf "$BACKUP_TEMP"
|
||||
echo "Success!"
|
||||
echo
|
||||
|
||||
echo "Backup Complete!"
|
||||
|
||||
@@ -1,31 +1,41 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Stop on Error
|
||||
# Stop on error
|
||||
set -e
|
||||
|
||||
# Configure those to match your PLANKA Docker container names
|
||||
PLANKA_DOCKER_CONTAINER_POSTGRES="planka-postgres-1"
|
||||
PLANKA_DOCKER_CONTAINER_PLANKA="planka-planka-1"
|
||||
# Configure those to match your Docker container names
|
||||
DOCKER_CONTAINER_POSTGRES="planka-postgres-1"
|
||||
DOCKER_CONTAINER_PLANKA="planka-planka-1"
|
||||
|
||||
# Extract tgz archive
|
||||
PLANKA_BACKUP_ARCHIVE_TGZ=$1
|
||||
PLANKA_BACKUP_ARCHIVE=$(basename "$PLANKA_BACKUP_ARCHIVE_TGZ" .tgz)
|
||||
echo -n "Extracting tarball $PLANKA_BACKUP_ARCHIVE_TGZ ... "
|
||||
tar -xzf "$PLANKA_BACKUP_ARCHIVE_TGZ"
|
||||
# Use provided archive
|
||||
BACKUP_ARCHIVE="$1"
|
||||
|
||||
if [ -z "$BACKUP_ARCHIVE" ]; then
|
||||
echo "Usage: $0 <backup-archive.tgz>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BACKUP_DIR=$(dirname "$BACKUP_ARCHIVE")
|
||||
BACKUP_TEMP="$BACKUP_DIR/$(basename "$BACKUP_ARCHIVE" .tgz)"
|
||||
|
||||
echo -n "Extracting tarball $BACKUP_ARCHIVE ... "
|
||||
tar -C "$BACKUP_DIR" -xzf "$BACKUP_ARCHIVE"
|
||||
echo "Success!"
|
||||
echo
|
||||
|
||||
# Import Database
|
||||
echo -n "Importing postgres database ... "
|
||||
cat "$PLANKA_BACKUP_ARCHIVE/postgres.sql" | docker exec -i "$PLANKA_DOCKER_CONTAINER_POSTGRES" psql -U postgres
|
||||
cat "$BACKUP_TEMP/postgres.sql" | docker exec -i "$DOCKER_CONTAINER_POSTGRES" psql -U postgres
|
||||
echo "Success!"
|
||||
echo
|
||||
|
||||
# Restore Docker Volume
|
||||
echo -n "Importing data volume ... "
|
||||
docker run --rm --volumes-from "$PLANKA_DOCKER_CONTAINER_PLANKA" -v "$(pwd)/$PLANKA_BACKUP_ARCHIVE:/backup" ubuntu cp -rf /backup/data/. /app/data
|
||||
docker run --rm --user root --volumes-from "$DOCKER_CONTAINER_PLANKA" -v "$BACKUP_TEMP:/backup" node:22-alpine sh -c "cp -rf /backup/data/. /app/data && chown -R node:node /app/data/*"
|
||||
echo "Success!"
|
||||
echo
|
||||
|
||||
echo -n "Cleaning up temporary files and folders ... "
|
||||
rm -r "$PLANKA_BACKUP_ARCHIVE"
|
||||
echo -n "Cleaning up temporary files and directories ... "
|
||||
rm -r "$BACKUP_TEMP"
|
||||
echo "Success!"
|
||||
echo
|
||||
|
||||
echo "Restore complete!"
|
||||
|
||||
Reference in New Issue
Block a user