torrent-gateway/docs/backup_restore.md
enki b3204ea07a
Some checks are pending
CI Pipeline / Run Tests (push) Waiting to run
CI Pipeline / Lint Code (push) Waiting to run
CI Pipeline / Security Scan (push) Waiting to run
CI Pipeline / Build Docker Images (push) Blocked by required conditions
CI Pipeline / E2E Tests (push) Blocked by required conditions
first commit
2025-08-18 00:40:15 -07:00

365 lines
7.9 KiB
Markdown

# Backup and Restore Procedures
## Overview
This guide covers comprehensive backup and restore procedures for the Torrent Gateway, including data, configuration, and disaster recovery scenarios.
## Backup Strategy
### Automatic Backups
**Daily Backup (via cron):**
```bash
# Configured automatically during installation
# Runs daily at 2 AM
0 2 * * * root /opt/torrent-gateway/scripts/backup.sh
```
**Components Backed Up:**
- Database (SQLite file + SQL dump)
- File storage (blobs and chunks)
- Configuration files
- Application logs
- Docker volumes (Docker deployment)
### Manual Backup
**Create immediate backup:**
```bash
# Standard backup
./scripts/backup.sh
# Emergency backup with custom name
./scripts/backup.sh emergency
# Backup with specific timestamp
./scripts/backup.sh $(date +%Y%m%d_%H%M%S)
```
**Backup Contents:**
- `gateway_backup_YYYYMMDD_HHMMSS.tar.gz` - Complete system backup
- `database_YYYYMMDD_HHMMSS.sql` - Database SQL dump
- Stored in `./backups/` directory
## Restore Procedures
### Standard Restore
**List available backups:**
```bash
ls -la backups/gateway_backup_*.tar.gz
```
**Restore from backup:**
```bash
# Restore specific backup
./scripts/restore.sh 20240816_143022
# The script will:
# 1. Stop running services
# 2. Create restore point of current state
# 3. Extract backup data
# 4. Restore database from SQL dump
# 5. Start services
# 6. Run health checks
```
### Emergency Recovery
**Complete System Failure:**
```bash
# 1. Boot from rescue media if needed
# 2. Mount data drive
# 3. Navigate to project directory
cd /path/to/torrent-gateway
# 4. Install dependencies
sudo apt-get install sqlite3 curl
# 5. Restore from latest backup
sudo ./scripts/restore.sh $(ls backups/ | grep gateway_backup | tail -1 | sed 's/gateway_backup_\(.*\).tar.gz/\1/')
# 6. Verify restoration
./scripts/health_check.sh
```
### Partial Recovery
**Database Only:**
```bash
# Stop gateway
sudo systemctl stop torrent-gateway
# Backup current database
cp data/metadata.db data/metadata.db.corrupted
# Restore database from SQL backup
sqlite3 data/metadata.db < backups/database_YYYYMMDD_HHMMSS.sql
# Start gateway
sudo systemctl start torrent-gateway
```
**Configuration Only:**
```bash
# Extract configs from backup
tar -xzf backups/gateway_backup_YYYYMMDD_HHMMSS.tar.gz configs/
# Restart to apply new config
sudo systemctl restart torrent-gateway
```
## Backup Verification
### Automated Verification
The backup script automatically verifies:
- Archive integrity (checksum)
- Database dump validity
- File count consistency
### Manual Verification
**Test backup integrity:**
```bash
# Test archive
tar -tzf backups/gateway_backup_YYYYMMDD_HHMMSS.tar.gz > /dev/null
echo "Archive integrity: $?"
# Test database dump
sqlite3 :memory: < backups/database_YYYYMMDD_HHMMSS.sql
echo "Database dump validity: $?"
```
**Verify backup contents:**
```bash
# List backup contents
tar -tzf backups/gateway_backup_YYYYMMDD_HHMMSS.tar.gz
# Check database schema
sqlite3 data/metadata.db ".schema" > current_schema.sql
sqlite3 :memory: < backups/database_YYYYMMDD_HHMMSS.sql
sqlite3 :memory: ".schema" > backup_schema.sql
diff current_schema.sql backup_schema.sql
```
## Backup Retention
### Automatic Cleanup
**Retention Policy (configured in cleanup script):**
- Daily backups: Keep 30 days
- Weekly backups: Keep 12 weeks
- Monthly backups: Keep 12 months
**Manual Cleanup:**
```bash
# Remove backups older than 30 days
find backups/ -name "gateway_backup_*.tar.gz" -mtime +30 -delete
# Remove old database dumps
find backups/ -name "database_*.sql" -mtime +30 -delete
```
### Archive to Cold Storage
**For long-term retention:**
```bash
# Compress older backups
find backups/ -name "*.tar.gz" -mtime +7 -exec gzip -9 {} \;
# Move to archive location
find backups/ -name "*.tar.gz.gz" -mtime +30 -exec mv {} /archive/location/ \;
```
## Disaster Recovery
### Complete Site Recovery
**Recovery from offsite backup:**
1. **Provision new hardware/VM**
2. **Install operating system** (Ubuntu 20.04+ recommended)
3. **Restore from backup:**
```bash
# Download backup from offsite storage
wget/scp/rsync your-backup-location/gateway_backup_YYYYMMDD_HHMMSS.tar.gz
# Install Torrent Gateway
git clone <repository-url>
cd torrent-gateway
sudo ./scripts/install_native.sh --skip-build
# Restore data
sudo ./scripts/restore.sh YYYYMMDD_HHMMSS
```
### Data Migration
**Moving to new server:**
1. **Create backup on old server:**
```bash
./scripts/backup.sh migration
```
2. **Transfer backup:**
```bash
scp backups/gateway_backup_*.tar.gz newserver:/tmp/
```
3. **Install on new server:**
```bash
# On new server
sudo ./scripts/install_native.sh
sudo ./scripts/restore.sh <timestamp>
```
4. **Update DNS/load balancer** to point to new server
### Database Migration
**Upgrading SQLite to PostgreSQL:**
1. **Export data:**
```bash
# Export to SQL
sqlite3 data/metadata.db .dump > export.sql
# Convert SQLite SQL to PostgreSQL format
sed -i 's/INTEGER PRIMARY KEY AUTOINCREMENT/SERIAL PRIMARY KEY/g' export.sql
sed -i 's/datetime()/NOW()/g' export.sql
```
2. **Import to PostgreSQL:**
```bash
createdb torrent_gateway
psql torrent_gateway < export.sql
```
## Backup Testing
### Regular Testing Schedule
**Monthly restore test:**
```bash
#!/bin/bash
# test_restore.sh
# Create test environment
mkdir -p /tmp/restore_test
cd /tmp/restore_test
# Copy latest backup
cp /opt/torrent-gateway/backups/gateway_backup_*.tar.gz ./
# Extract and verify
tar -xzf gateway_backup_*.tar.gz
sqlite3 data/metadata.db "PRAGMA integrity_check;"
sqlite3 data/metadata.db "SELECT COUNT(*) FROM files;"
echo "✅ Restore test completed successfully"
```
### Backup Monitoring
**Monitor backup success:**
```bash
# Check last backup status
tail -20 /var/log/torrent-gateway-backup.log
# Verify recent backups exist
ls -la /opt/torrent-gateway/backups/ | head -10
# Check backup sizes (should be consistent)
du -sh /opt/torrent-gateway/backups/gateway_backup_*.tar.gz | tail -5
```
## Offsite Backup Configuration
### AWS S3 Integration
```bash
# Install AWS CLI
apt-get install awscli
# Configure backup upload
cat >> /opt/torrent-gateway/scripts/backup.sh << 'EOF'
# Upload to S3 after backup creation
if [ -n "$AWS_S3_BUCKET" ]; then
aws s3 cp "$BACKUP_FILE" "s3://$AWS_S3_BUCKET/backups/"
aws s3 cp "$DB_BACKUP_FILE" "s3://$AWS_S3_BUCKET/backups/"
echo "✅ Backup uploaded to S3"
fi
EOF
```
### rsync to Remote Server
```bash
# Add to backup script
cat >> /opt/torrent-gateway/scripts/backup.sh << 'EOF'
# Sync to remote server
if [ -n "$BACKUP_REMOTE_HOST" ]; then
rsync -av --compress backups/ "$BACKUP_REMOTE_HOST:/backups/torrent-gateway/"
echo "✅ Backup synced to remote server"
fi
EOF
```
## Security Considerations
### Backup Encryption
**Encrypt sensitive backups:**
```bash
# Create encrypted backup
./scripts/backup.sh
gpg --symmetric --cipher-algo AES256 backups/gateway_backup_*.tar.gz
# Decrypt for restore
gpg --decrypt backups/gateway_backup_*.tar.gz.gpg > /tmp/backup.tar.gz
```
### Access Control
**Backup file permissions:**
```bash
# Restrict backup access
chmod 600 backups/*.tar.gz
chown root:root backups/*.tar.gz
```
**Secure backup storage:**
- Use encrypted storage for offsite backups
- Implement access logging for backup access
- Regular audit of backup access permissions
## Recovery Time Objectives
### Target Recovery Times
**RTO (Recovery Time Objective):**
- Database only: < 5 minutes
- Full service: < 15 minutes
- Complete disaster recovery: < 2 hours
**RPO (Recovery Point Objective):**
- Maximum data loss: 24 hours (daily backups)
- Database transactions: < 1 hour (with WAL mode)
### Improving Recovery Times
**Reduce RTO:**
- Keep hot spare server ready
- Implement automated failover
- Use faster storage for backups
- Optimize restore scripts
**Reduce RPO:**
- Increase backup frequency
- Implement continuous replication
- Use database WAL mode
- Stream backups to offsite storage