generated from john/python-template
@@ -22,9 +22,34 @@ if [ -z "${SYNOLOGY_BACKUP_DIR}" ] && [ -f "${ENV_FILE}" ]; then
|
||||
)"
|
||||
fi
|
||||
|
||||
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}/${postgres_file}"
|
||||
use_compose_backup=0
|
||||
if command -v docker >/dev/null 2>&1 && [ -S /var/run/docker.sock ] && [ -f "${COMPOSE_FILE}" ]; then
|
||||
use_compose_backup=1
|
||||
fi
|
||||
|
||||
if [ "${use_compose_backup}" -eq 1 ]; then
|
||||
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}/${postgres_file}"
|
||||
else
|
||||
: "${POSTGRES_HOST:=postgres}"
|
||||
: "${POSTGRES_PORT:=5432}"
|
||||
if [ -z "${POSTGRES_DB:-}" ] || [ -z "${POSTGRES_USER:-}" ] || [ -z "${POSTGRES_PASSWORD:-}" ]; then
|
||||
echo "POSTGRES_DB, POSTGRES_USER, and POSTGRES_PASSWORD must be set for in-container backup mode." >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v pg_dump >/dev/null 2>&1; then
|
||||
echo "pg_dump is not installed in this environment." >&2
|
||||
exit 1
|
||||
fi
|
||||
PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump \
|
||||
-h "${POSTGRES_HOST}" \
|
||||
-p "${POSTGRES_PORT}" \
|
||||
-U "${POSTGRES_USER}" \
|
||||
-d "${POSTGRES_DB}" \
|
||||
-Fc \
|
||||
> "${BACKUP_DIR}/${postgres_file}"
|
||||
fi
|
||||
|
||||
cat > "${BACKUP_DIR}/${manifest_file}" <<EOF
|
||||
created_at_utc=${timestamp}
|
||||
@@ -48,32 +73,55 @@ if [ -n "${SYNOLOGY_BACKUP_DIR}" ]; then
|
||||
cp "${BACKUP_DIR}/${postgres_file}" "${SYNOLOGY_BACKUP_DIR}/${postgres_file}"
|
||||
|
||||
# 2) Snapshot deployment config and logs to Synology each run.
|
||||
set -- "${ENV_FILE}" "${COMPOSE_FILE}"
|
||||
if [ -f deploy/cloudflared/config.yml ]; then
|
||||
set -- "$@" deploy/cloudflared/config.yml
|
||||
set --
|
||||
[ -f "${ENV_FILE}" ] && set -- "$@" "${ENV_FILE}"
|
||||
[ -f "${COMPOSE_FILE}" ] && set -- "$@" "${COMPOSE_FILE}"
|
||||
[ -f deploy/cloudflared/config.yml ] && set -- "$@" deploy/cloudflared/config.yml
|
||||
if [ "$#" -gt 0 ]; then
|
||||
tar -C . -czf "${SYNOLOGY_BACKUP_DIR}/${config_file}" "$@"
|
||||
else
|
||||
: > "${SYNOLOGY_BACKUP_DIR}/${config_file}"
|
||||
fi
|
||||
tar -C . -czf "${SYNOLOGY_BACKUP_DIR}/${config_file}" "$@"
|
||||
|
||||
docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" run --rm --no-deps \
|
||||
-v "${SYNOLOGY_BACKUP_DIR}:/backup" \
|
||||
--entrypoint sh app -lc \
|
||||
"if [ -d /app/data/logs ]; then tar -C /app/data/logs -czf /backup/${logs_file} .; else : > /backup/${logs_file}; fi"
|
||||
if [ "${use_compose_backup}" -eq 1 ]; then
|
||||
docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" run --rm --no-deps \
|
||||
-v "${SYNOLOGY_BACKUP_DIR}:/backup" \
|
||||
--entrypoint sh app -lc \
|
||||
"if [ -d /app/data/logs ]; then tar -C /app/data/logs -czf /backup/${logs_file} .; else : > /backup/${logs_file}; fi"
|
||||
|
||||
# 3) Sync uploads incrementally to Synology (copy only new files).
|
||||
docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" run --rm --no-deps \
|
||||
-v "${SYNOLOGY_BACKUP_DIR}:/backup" \
|
||||
--entrypoint sh app -lc '
|
||||
mkdir -p /backup/uploads/documents /backup/uploads/photos;
|
||||
if [ -f /app/uploads/homepage.md ] && [ ! -f /backup/uploads/homepage.md ]; then
|
||||
cp /app/uploads/homepage.md /backup/uploads/homepage.md;
|
||||
fi;
|
||||
if [ -d /app/uploads/documents ]; then
|
||||
cp -an /app/uploads/documents/. /backup/uploads/documents/;
|
||||
fi;
|
||||
if [ -d /app/uploads/photos ]; then
|
||||
cp -an /app/uploads/photos/. /backup/uploads/photos/;
|
||||
fi
|
||||
'
|
||||
# 3) Sync uploads incrementally to Synology (copy only new files).
|
||||
docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" run --rm --no-deps \
|
||||
-v "${SYNOLOGY_BACKUP_DIR}:/backup" \
|
||||
--entrypoint sh app -lc '
|
||||
mkdir -p /backup/uploads/documents /backup/uploads/photos;
|
||||
if [ -f /app/uploads/homepage.md ] && [ ! -f /backup/uploads/homepage.md ]; then
|
||||
cp /app/uploads/homepage.md /backup/uploads/homepage.md;
|
||||
fi;
|
||||
if [ -d /app/uploads/documents ]; then
|
||||
cp -an /app/uploads/documents/. /backup/uploads/documents/;
|
||||
fi;
|
||||
if [ -d /app/uploads/photos ]; then
|
||||
cp -an /app/uploads/photos/. /backup/uploads/photos/;
|
||||
fi
|
||||
'
|
||||
else
|
||||
if [ -d /app/data/logs ]; then
|
||||
tar -C /app/data/logs -czf "${SYNOLOGY_BACKUP_DIR}/${logs_file}" .
|
||||
else
|
||||
: > "${SYNOLOGY_BACKUP_DIR}/${logs_file}"
|
||||
fi
|
||||
|
||||
mkdir -p "${SYNOLOGY_BACKUP_DIR}/uploads/documents" "${SYNOLOGY_BACKUP_DIR}/uploads/photos"
|
||||
if [ -f /app/uploads/homepage.md ] && [ ! -f "${SYNOLOGY_BACKUP_DIR}/uploads/homepage.md" ]; then
|
||||
cp /app/uploads/homepage.md "${SYNOLOGY_BACKUP_DIR}/uploads/homepage.md"
|
||||
fi
|
||||
if [ -d /app/uploads/documents ]; then
|
||||
cp -an /app/uploads/documents/. "${SYNOLOGY_BACKUP_DIR}/uploads/documents/"
|
||||
fi
|
||||
if [ -d /app/uploads/photos ]; then
|
||||
cp -an /app/uploads/photos/. "${SYNOLOGY_BACKUP_DIR}/uploads/photos/"
|
||||
fi
|
||||
fi
|
||||
|
||||
cp "${BACKUP_DIR}/${manifest_file}" "${SYNOLOGY_BACKUP_DIR}/${manifest_file}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user