Backup configuration
Protect your Synjar data with regular backups.
What to back up
| Component | Contains | Method |
|---|---|---|
| PostgreSQL | Users, documents metadata, embeddings | pg_dump |
| S3 storage | Document files | S3 sync |
| Configuration | .env file | File 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:
- Create a test environment
- Restore from backup
- Verify data integrity
- 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/