Skip to main content

What to Back Up

ComponentContainsPriority
PostgreSQLAll verification data, sessions, AML results, users, settingsCritical
MinIO / StorageKYC documents, selfies, ID photos, address proofsCritical
.env fileConfiguration, license key, passwordsCritical
RedisCache and queue state (ephemeral)Low

Database Backup

Manual Backup

docker compose exec postgres pg_dump -U verilock verilock > backup-$(date +%Y%m%d-%H%M%S).sql

Compressed Backup

docker compose exec postgres pg_dump -U verilock verilock | gzip > backup-$(date +%Y%m%d).sql.gz

Automated Daily Backup

Create a cron job on the host:
crontab -e
Add:
0 2 * * * cd /path/to/verilock && docker compose exec -T postgres pg_dump -U verilock verilock | gzip > /backups/verilock-$(date +\%Y\%m\%d).sql.gz

Document Storage Backup

MinIO to Local

# Install mc (MinIO client) on host
docker compose exec minio mc mirror local/verilock-documents /tmp/backup-documents

# Copy from container
docker compose cp minio:/tmp/backup-documents ./backup-documents

MinIO to S3

docker compose exec minio mc alias set aws https://s3.amazonaws.com YOUR_KEY YOUR_SECRET
docker compose exec minio mc mirror local/verilock-documents aws/your-backup-bucket/verilock/

Restore

Database

# Stop the app (prevent writes during restore)
docker compose stop app

# Restore
cat backup-20260317.sql | docker compose exec -T postgres psql -U verilock -d verilock

# Or from gzip
gunzip -c backup-20260317.sql.gz | docker compose exec -T postgres psql -U verilock -d verilock

# Restart
docker compose start app

Documents

docker compose cp ./backup-documents minio:/data/verilock-documents
docker compose restart minio

Disaster Recovery

For full disaster recovery, maintain offsite copies of:
  1. Database dump (daily)
  2. Document storage (daily or real-time sync)
  3. .env file (after any config change)
  4. docker-compose.yml (after any modification)
Store backups in a different location than your deployment. Use encrypted storage for backups containing PII.