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