33 lines
1.2 KiB
Bash
Executable file
33 lines
1.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
BACKUP_DIR="${BACKUP_DIR:-./backups}"
|
|
STORAGE_HOST_PATH="${STORAGE_HOST_PATH:-./storage}"
|
|
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
|
|
TARGET_DIR="${BACKUP_DIR}/${TIMESTAMP}"
|
|
|
|
mkdir -p "${TARGET_DIR}"
|
|
|
|
echo "==> Creating backup in ${TARGET_DIR}"
|
|
|
|
if [[ -n "${POSTGRES_CONTAINER:-}" ]]; then
|
|
echo "==> Creating PostgreSQL dump from container ${POSTGRES_CONTAINER}"
|
|
docker exec "${POSTGRES_CONTAINER}" pg_dump -U "${POSTGRES_USER:-olympus}" "${POSTGRES_DB:-olympus}" > "${TARGET_DIR}/postgres.sql"
|
|
elif command -v pg_dump >/dev/null 2>&1 && [[ -n "${DATABASE_URL:-}" ]]; then
|
|
echo "==> Creating PostgreSQL dump from DATABASE_URL"
|
|
pg_dump "${DATABASE_URL}" > "${TARGET_DIR}/postgres.sql"
|
|
else
|
|
echo "WARN: PostgreSQL dump skipped. Set POSTGRES_CONTAINER or install pg_dump with DATABASE_URL."
|
|
fi
|
|
|
|
if [[ -d "${STORAGE_HOST_PATH}" ]]; then
|
|
echo "==> Archiving storage directory"
|
|
tar -czf "${TARGET_DIR}/storage.tar.gz" -C "${STORAGE_HOST_PATH}" .
|
|
else
|
|
echo "WARN: Storage directory ${STORAGE_HOST_PATH} not found; storage backup skipped."
|
|
fi
|
|
|
|
echo "INFO: .env is not copied automatically. Store production secrets separately and securely."
|
|
echo "==> Backup completed"
|