Skip to content

v2.3.0 - Backup & Restore with Scheduled Backups

Choose a tag to compare

@Kha-kis Kha-kis released this 15 Oct 18:53
· 645 commits to main since this release

πŸŽ‰ Version 2.3.0 - Backup & Restore System

This release introduces a comprehensive backup and restore system with scheduled backups, automatic retention management, and complete data portability.

✨ New Features

πŸ” Complete Backup & Restore System

  • Encrypted Backups: AES-256-GCM encryption with PBKDF2 key derivation
  • Complete Data Export: Database + secrets + metadata in a single encrypted file
  • Password Protection: User-defined passwords for backup encryption (not stored anywhere)
  • Portable Backups: Move backups between different servers and Docker installations
  • Automatic Restart: Application automatically restarts after restore (production/Docker)

⏰ Scheduled Backups

  • Configurable Intervals: Hourly, Daily, or Weekly backup schedules
  • Automatic Execution: Background scheduler checks every 60 seconds for due backups
  • Retention Management: Automatically keeps N most recent scheduled backups
  • Separate Tracking: Manual vs scheduled backups tracked separately
  • Persistent Settings: Backup schedule configuration stored in database

πŸ“¦ Backup Management UI

  • Dedicated Settings Tab: New Backup tab in Settings page
  • Backup List: View, download, and manage all existing backups
  • One-Click Operations: Create, restore, download, and delete backups
  • Progress Indicators: Loading states and status messages for all operations
  • Backup Metadata: View timestamp, size, type (manual/scheduled), and app version

πŸ”§ System Management

  • Manual Restart Endpoint: API endpoint for graceful application restart
  • Backup Password Salvage: Preserves backup passwords when recovering from malformed secrets
  • Defensive Error Handling: Multiple layers of error handling for file operations

πŸ› οΈ Technical Improvements

Backend

  • New BackupScheduler service for automatic scheduled backups
  • New BackupSettings database model for schedule persistence
  • Enhanced LifecycleService with exit code 42 for launcher-managed restarts
  • Backup files stored in backups/manual/ and backups/scheduled/ directories
  • Rate limiting on backup/restore/restart endpoints

Frontend

  • React Query hooks with optimistic updates
  • Zod schemas for backup settings validation
  • Typed API client functions for all backup operations
  • Themed components matching existing UI design

Security

  • Double encryption: Service API keys encrypted in DB, then encrypted again in backup
  • Password-based backup access with PBKDF2 key derivation
  • Rate limiting protection on sensitive endpoints
  • No backup passwords stored or logged

πŸ“š Documentation

  • BACKUP_RESTORE.md: Comprehensive 664-line guide covering:
    • Feature overview and usage instructions
    • Security considerations and best practices
    • Troubleshooting common issues
    • API usage examples
    • Migration workflows between servers

πŸ”„ Database Changes

New BackupSettings model:
```prisma
model BackupSettings {
id Int @id @default(1)
enabled Boolean @default(false)
intervalType BackupIntervalType @default(DISABLED)
intervalValue Int @default(24)
retentionCount Int @default(7)
lastRunAt DateTime?
nextRunAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedat
}

enum BackupIntervalType {
DISABLED
HOURLY
DAILY
WEEKLY
}
```

πŸ› Bug Fixes

  • Fixed TypeScript production build errors in authentication hooks
  • Moved 401 error handling to useEffect to comply with React rules
  • Fixed backup password preservation when recovering from invalid JSON
  • Removed redundant optional chaining in user display components
  • Added explicit return types to prevent type inference issues

πŸ“‹ API Endpoints

New endpoints added:

  • `GET /api/backup` - List all backups
  • `POST /api/backup/create` - Create manual backup
  • `POST /api/backup/restore` - Restore from uploaded file
  • `POST /api/backup/restore-from-file` - Restore from server-side backup
  • `GET /api/backup/:id/download` - Download backup by ID
  • `DELETE /api/backup/:id` - Delete backup
  • `GET /api/backup/settings` - Get backup settings
  • `PUT /api/backup/settings` - Update backup settings
  • `POST /api/system/restart` - Manual restart endpoint

πŸ”§ Breaking Changes

None. This is a purely additive release with full backward compatibility.

🐳 Docker Images

Published to:

  • Docker Hub: `khak1s/arr-dashboard:2.3.0`, `khak1s/arr-dashboard:latest`
  • GitHub Container Registry: `ghcr.io/kha-kis/arr-dashboard:2.3.0`, `ghcr.io/kha-kis/arr-dashboard:latest`

Both `linux/amd64` and `linux/arm64` platforms supported.

πŸ“₯ Installation

Docker (Recommended)

```bash
docker pull khak1s/arr-dashboard:2.3.0
docker run -d
--name arr-dashboard
-p 3000:3000
-v /path/to/data:/app/data
khak1s/arr-dashboard:2.3.0
```

Unraid

Update the template to version 2.3.0 or use the Community Applications auto-update feature.

πŸ™ Contributors

  • @Kha-kis
  • AI-assisted development with Claude Code

Full Changelog: v2.2.0...v2.3.0