9.5 KiB
Media Downloader Versioning & Backup Guide
Version Management
Current Version
The current version is stored in /opt/media-downloader/VERSION:
12.12.1
Versioning Scheme
This project follows Semantic Versioning (SemVer):
MAJOR.MINOR.PATCH (e.g., 6.0.0)
- MAJOR: Incompatible API changes, major feature overhauls
- MINOR: New features, backward-compatible changes
- PATCH: Bug fixes, security patches, backward-compatible fixes
Version History
See CHANGELOG.md for complete version history.
Recent Versions:
- v6.0.0 (2025-10-26) - Database CLI, ImgInn fixes, installer updates, version control
- v5.0.0 (2025-10-25) - File hash deduplication, directory reorganization, documentation
- v4.x - Multi-platform support, scheduler, Immich integration
Backup System Integration
Backup Central Integration
Media Downloader is integrated with Backup Central for automated backups.
Profile ID: profile-media-downloader
Schedule: Daily at 00:00 (midnight)
Destination: /media/backups/Ubuntu/restic-repo (shared restic repository)
Re-adding the Backup Profile
If you need to recreate the backup profile, run:
cd /opt/media-downloader
sudo ./scripts/add-backup-profile.sh
This script will:
- Remove existing profile (if present)
- Create new profile with correct settings
- Restart Backup Central service
- Verify profile was created
What Gets Backed Up
Included:
/opt/media-downloader/config/- All configuration files/opt/media-downloader/database/- SQLite databases (main + scheduler)/opt/media-downloader/cookies/- Authentication cookies/opt/media-downloader/sessions/- Instagram session files/opt/media-downloader/modules/- All Python modules/opt/media-downloader/wrappers/- Subprocess wrappers/opt/media-downloader/utilities/- Utility scripts/opt/media-downloader/scripts/- Backup and install scripts/opt/media-downloader/*.py- Main application files/opt/media-downloader/VERSION- Version file/opt/media-downloader/CHANGELOG.md- Change log/opt/media-downloader/README.md- Documentation/opt/media-downloader/INSTALL.md- Installation guide/opt/media-downloader/requirements.txt- Dependencies/opt/media-downloader/db- Database CLI wrapper
Excluded:
/opt/media-downloader/temp/- Temporary downloads/opt/media-downloader/logs/- Log files/opt/media-downloader/venv/- Virtual environment (reproducible)/opt/media-downloader/.playwright/- Playwright cache (reproducible)/opt/media-downloader/debug/- Debug files*.log,*.log.*- All log files*.pyc,__pycache__- Python bytecode*.db-shm,*.db-wal- SQLite temporary files- Swap files:
*.swp,*.swo,*~
Retention Policy
- Daily: 7 days
- Weekly: 4 weeks
- Monthly: 12 months
- Yearly: 2 years
Notifications
- Success: Disabled (runs daily, would spam)
- Warning: Enabled (Pushover)
- Failure: Enabled (Pushover)
Creating Version Backups
Manual Version Backup
To create a version-stamped locked backup:
cd /opt/media-downloader
./scripts/create-version-backup.sh
This will:
- Read version from
VERSIONfile - Create timestamp
- Generate backup name:
{version}-{timestamp} - Run backup using Backup Central
- Lock the backup (prevent deletion)
Example backup name:
6.0.0-20251026-143000
This matches backup-central's naming convention: {version}-{YYYYMMDD-HHMMSS}
When to Create Version Backups
Create manual version backups:
- Before releasing a new version - Capture stable state
- After major changes - Database schema, config structure
- Before risky operations - Large refactors, dependency updates
- Milestone achievements - Feature completions, bug fixes
Scheduled Backups
Daily backups run automatically:
- Time: 00:00 (midnight)
- Managed by: Backup Central scheduler
- Type: Incremental (restic)
- Not locked - Subject to retention policy
Backup Management
List All Backups
backup-central list -P profile-media-downloader
View Profile Details
backup-central profiles --info profile-media-downloader
Manual Backup
backup-central backup -P profile-media-downloader
Create Custom Named Backup
backup-central backup -P profile-media-downloader -n "before-upgrade" -l
Restore from Backup
# List snapshots
backup-central list -P profile-media-downloader
# Restore specific snapshot
backup-central restore <snapshot-id> -P profile-media-downloader -t /opt/media-downloader-restore
Lock/Unlock Backups
# Lock important backups (prevent deletion)
backup-central lock <backup-id>
# Unlock backups
backup-central unlock <backup-id>
Version Release Process
1. Update Code & Test
- Make changes
- Test thoroughly
- Verify all platforms work
- Check database operations
2. Update Version
# Edit VERSION file
echo "6.1.0" > /opt/media-downloader/VERSION
3. Update CHANGELOG
- Document all changes in
CHANGELOG.md - Follow existing format
- Include:
- New features
- Bug fixes
- Breaking changes
- Upgrade notes
4. Create Version Backup
./scripts/create-version-backup.sh
5. Tag & Commit (if using git)
git add VERSION CHANGELOG.md
git commit -m "Release v6.1.0"
git tag -a v6.1.0 -m "Version 6.1.0 release"
git push && git push --tags
6. Verify Backup
backup-central list -P profile-media-downloader --limit 5
Disaster Recovery
Full System Restore
-
Install base system
sudo mkdir -p /opt/media-downloader -
Restore from backup
backup-central restore <snapshot-id> -P profile-media-downloader -t /opt -
Reinstall dependencies
cd /opt/media-downloader python3 -m venv venv source venv/bin/activate pip install -r requirements.txt playwright install chromium -
Set permissions
sudo chown -R $USER:$USER /opt/media-downloader chmod +x /opt/media-downloader/media-downloader.py chmod +x /opt/media-downloader/db chmod +x /opt/media-downloader/scripts/*.sh -
Verify
/opt/media-downloader/media-downloader.py --version ./db stats
Partial Restore (Config Only)
# Restore just config directory
backup-central restore <snapshot-id> \
-P profile-media-downloader \
-i "/opt/media-downloader/config" \
-t /tmp/restore
# Copy to production
sudo cp -r /tmp/restore/opt/media-downloader/config/* /opt/media-downloader/config/
Database Restore
# Restore just database
backup-central restore <snapshot-id> \
-P profile-media-downloader \
-i "/opt/media-downloader/database" \
-t /tmp/restore
# Stop scheduler
sudo systemctl stop media-downloader
# Replace database
sudo cp /tmp/restore/opt/media-downloader/database/*.db /opt/media-downloader/database/
# Restart
sudo systemctl start media-downloader
Backup Verification
Verify Backup Integrity
# Check backup profile health
backup-central health
# Verify specific profile
backup-central profiles --stats profile-media-downloader
Test Restore
Periodically test restores to ensure backups are usable:
# 1. Create test restore directory
mkdir -p /tmp/media-downloader-test-restore
# 2. Restore to test location
backup-central restore latest -P profile-media-downloader -t /tmp/media-downloader-test-restore
# 3. Verify critical files exist
ls -la /tmp/media-downloader-test-restore/opt/media-downloader/config/
ls -la /tmp/media-downloader-test-restore/opt/media-downloader/database/
# 4. Check database integrity
sqlite3 /tmp/media-downloader-test-restore/opt/media-downloader/database/media_downloader.db "PRAGMA integrity_check;"
# 5. Clean up
rm -rf /tmp/media-downloader-test-restore
Troubleshooting
Backup Fails
Check destination:
ls -la /media/backups/Ubuntu/restic-repo
Check logs:
backup-central list -P profile-media-downloader
sudo journalctl -u backup-central -f
Manual test:
backup-central backup -P profile-media-downloader --dry-run
Version Script Fails
Check VERSION file:
cat /opt/media-downloader/VERSION
Verify profile exists:
backup-central profiles list | grep media-downloader
Test backup manually:
backup-central backup -P profile-media-downloader -n "test-backup"
Best Practices
Version Management
- ✅ Update VERSION file before creating version backup
- ✅ Always update CHANGELOG.md with version
- ✅ Use semantic versioning (MAJOR.MINOR.PATCH)
- ✅ Lock important release backups
- ✅ Tag releases in git (if using version control)
Backup Strategy
- ✅ Create version backup before major changes
- ✅ Test restores quarterly
- ✅ Verify backup notifications work
- ✅ Monitor backup sizes (check for bloat)
- ✅ Keep locked backups for major versions
- ✅ Document any custom backup procedures
Security
- ✅ Backups include credentials (cookies, sessions, config)
- ✅ Ensure backup destination is secure
- ✅ Restrict access to backup restoration
- ✅ Consider encryption for sensitive data
- ✅ Don't commit credentials to git
See Also
- CHANGELOG.md - Full version history
- README.md - Main documentation
- INSTALL.md - Installation guide
- Backup Central Documentation