Skip to content

Backup & Maintenance

Disaster Recovery Automated Snapshots Zero Downtime

Regular backups and predictable maintenance routines ensure your organizational data is safe from hardware failures and software regressions.


Database Backups (PostgreSQL)

All relational data for identity provider authentication (e.g. Keycloak) and CloudRader application services resides in PostgreSQL.

1. Running a Manual Snapshot

To produce an immediate, consistent SQL dump of all databases:

docker exec -t cloudrader-postgres pg_dumpall -c -U cloudrader | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz

2. Automated Nightly Backup Script

Create a script at /opt/cloudrader/scripts/backup.sh:

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/opt/cloudrader/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
RETENTION_DAYS=14

mkdir -p "$BACKUP_DIR"

# Perform compressed full database dump
docker exec -t cloudrader-postgres pg_dumpall -c -U cloudrader | gzip > "$BACKUP_DIR/db_$TIMESTAMP.sql.gz"

# Rotate backups older than retention window
find "$BACKUP_DIR" -type f -name "db_*.sql.gz" -mtime +"$RETENTION_DAYS" -delete

echo "[$TIMESTAMP] CloudRader backup completed successfully."

Make the script executable:

chmod +x /opt/cloudrader/scripts/backup.sh

3. Scheduling with Cron

Add an entry to the host server\'s crontab (crontab -e) to trigger every night at 03:00 AM:

0 3 * * * /opt/cloudrader/scripts/backup.sh >> /var/log/cloudrader_backup.log 2>&1

Docker Volume Archives

For complete disaster recovery, periodically archive the underlying Docker storage volumes (containing identity provider files and database indexes):

# Optional: temporarily pause container activity for cold backup
docker compose stop

# Archive named Docker volumes
tar -czvf /opt/cloudrader/backups/volumes_$(date +%Y%m%d).tar.gz /var/lib/docker/volumes/cloudrader*

# Restart services
docker compose start

Disaster Recovery (Restoring Data)

To restore a compressed database backup into a running PostgreSQL container:

gunzip -c backup_YYYYMMDD_HHMMSS.sql.gz | docker exec -i cloudrader-postgres psql -U cloudrader -d postgres

Verifying Restores

We strongly recommend periodically restoring backups to an isolated test environment to ensure snapshot integrity.


Routine Updates & Maintenance

CloudRader services are designed for zero-downtime or minimal-downtime rolling upgrades.

1. Upgrading Service Images

# 1. Pull latest image versions
docker compose pull

# 2. Recreate containers with updated images
docker compose up -d --remove-orphans

2. Automatic Schema Migrations

CloudRader services handle database schema evolution automatically on startup:

  • Reservium API: Runs Alembic migrations at container boot before accepting HTTP traffic.
  • Inventarium API: Executes Liquibase change logs during Spring Boot initialization.

3. Cleaning Unused Docker Resources

Remove orphaned container layers and unused images to recover disk space:

docker image prune -f