generated from john/python-template
27 lines
891 B
Bash
27 lines
891 B
Bash
#!/usr/bin/env sh
|
|
set -eu
|
|
|
|
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.production.yml}"
|
|
ENV_FILE="${ENV_FILE:-.env.production}"
|
|
BACKUP_DIR="${BACKUP_DIR:-./data/backups}"
|
|
RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-14}"
|
|
SYNOLOGY_BACKUP_DIR="${SYNOLOGY_BACKUP_DIR:-}"
|
|
|
|
timestamp="$(date -u +%Y%m%d-%H%M%S)"
|
|
backup_file="postgres-${timestamp}.dump"
|
|
|
|
mkdir -p "${BACKUP_DIR}"
|
|
|
|
docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" exec -T postgres sh -lc \
|
|
"PGPASSWORD=\"\$POSTGRES_PASSWORD\" pg_dump -U \"\$POSTGRES_USER\" -d \"\$POSTGRES_DB\" -Fc" \
|
|
> "${BACKUP_DIR}/${backup_file}"
|
|
|
|
find "${BACKUP_DIR}" -type f -name 'postgres-*.dump' -mtime +"${RETENTION_DAYS}" -delete
|
|
|
|
if [ -n "${SYNOLOGY_BACKUP_DIR}" ]; then
|
|
mkdir -p "${SYNOLOGY_BACKUP_DIR}"
|
|
cp "${BACKUP_DIR}/${backup_file}" "${SYNOLOGY_BACKUP_DIR}/${backup_file}"
|
|
fi
|
|
|
|
echo "Created backup: ${BACKUP_DIR}/${backup_file}"
|