Skip to main content

Backup configuration

Protect your Synjar data with regular backups.

What to back up

ComponentContainsMethod
PostgreSQLUsers, documents metadata, embeddingspg_dump
S3 storageDocument filesS3 sync
Configuration.env fileFile copy

Database backup

Manual backup

# With Docker Compose
docker-compose exec postgres pg_dump -U synjar synjar > backup-$(date +%Y%m%d).sql

# Direct connection
pg_dump -h localhost -U synjar -d synjar > backup.sql

Automated backup script

#!/bin/bash
# backup.sh

BACKUP_DIR=/var/backups/synjar
DATE=$(date +%Y%m%d_%H%M%S)

# Create backup directory
mkdir -p $BACKUP_DIR

# Database backup
docker-compose exec -T postgres pg_dump -U synjar synjar | gzip > $BACKUP_DIR/db_$DATE.sql.gz

# Keep only last 30 days
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +30 -delete

echo "Backup completed: $BACKUP_DIR/db_$DATE.sql.gz"

Add to cron:

0 2 * * * /opt/synjar/backup.sh

Storage backup

S3 to S3 sync

# Using AWS CLI
aws s3 sync s3://synjar-documents s3://synjar-backups/documents/

# Using MinIO client
mc mirror minio/synjar-documents backup/synjar-documents/

S3 to local

aws s3 sync s3://synjar-documents ./backup/documents/

Full backup script

#!/bin/bash
# full-backup.sh

BACKUP_DIR=/var/backups/synjar
DATE=$(date +%Y%m%d_%H%M%S)
ARCHIVE=$BACKUP_DIR/synjar_$DATE.tar.gz

mkdir -p $BACKUP_DIR/tmp_$DATE

# Database
docker-compose exec -T postgres pg_dump -U synjar synjar > $BACKUP_DIR/tmp_$DATE/database.sql

# Configuration
cp .env $BACKUP_DIR/tmp_$DATE/

# Create archive
tar -czf $ARCHIVE -C $BACKUP_DIR tmp_$DATE

# Cleanup temp
rm -rf $BACKUP_DIR/tmp_$DATE

# Retention: 30 days
find $BACKUP_DIR -name "synjar_*.tar.gz" -mtime +30 -delete

echo "Full backup: $ARCHIVE"

Encrypted backups

For sensitive data, encrypt backups:

Generate encryption key

# Generate key (store securely!)
openssl rand -hex 32 > backup.key

Encrypt backup

openssl enc -aes-256-cbc -salt \
-in backup.tar.gz \
-out backup.tar.gz.enc \
-pass file:backup.key

Decrypt backup

openssl enc -aes-256-cbc -d \
-in backup.tar.gz.enc \
-out backup.tar.gz \
-pass file:backup.key

Restore procedures

Database restore

# With Docker Compose
cat backup.sql | docker-compose exec -T postgres psql -U synjar synjar

# Direct connection
psql -h localhost -U synjar -d synjar < backup.sql

Full restore

# Stop services
docker-compose down

# Restore database
tar -xzf synjar_backup.tar.gz
cat database.sql | docker-compose exec -T postgres psql -U synjar synjar

# Restore storage (if local backup)
mc mirror ./backup/documents/ minio/synjar-documents/

# Start services
docker-compose up -d

Backup verification

Test your backups regularly:

  1. Create a test environment
  2. Restore from backup
  3. Verify data integrity
  4. Document restoration time

Offsite storage

Store backups offsite:

  • Different cloud provider
  • Different geographic region
  • Encrypted before transfer
# Upload to backup bucket
aws s3 cp backup.tar.gz.enc s3://synjar-offsite-backups/

See also