A powerful and flexible remote backup tool for developers and system administrators
Key Features • Getting Started • Usage • Advanced Topics • Contributing
AeonSync redefines remote backups with its powerful feature set:
- 🔄 Flexible Backup Modes: Daily snapshots or multiple backups per day
- 🔗 Efficient Incremental Backups: Leverages rsync's
--link-dest
for optimal storage use - 🔐 Secure Remote Syncing: Rock-solid SSH encryption for data transfer
- ⏱️ Smart Retention Policies: Automatic management of your backup history
- 🕰️ Version Control: Restore specific file versions with ease
- 🖥️ Intuitive CLI: Seamless command-line experience powered by Typer
- 📊 Rich Metadata: Comprehensive insights into each backup operation
- Python 3.12+
- SSH access to remote server/NAS
- rsync on local and remote systems
pip install aeonsync
Basic command structure:
# Perform a backup (multiple per day by default)
aeon sync --remote user@host:/path/to/backups
# Restore a file
aeon restore [OPTIONS] FILE [DATE]
# List available backups
aeon list-backups
The sync command is used to create backups:
aeon sync [OPTIONS]
Options:
--remote TEXT
: Remote destination in the format [user@]host:path--source PATH
: Source directories to backup (can be specified multiple times)--retention INTEGER
: Number of days to retain backups--dry-run
: Perform a dry run without making changes--verbose
: Enable verbose output--daily
: Create only one backup per day (overrides default behavior)
The restore command provides functionality for file recovery:
aeon restore [OPTIONS] [FILE] [DATE]
Options:
--output PATH
: Output directory for restored file or directory--interactive
: Use fully interactive mode for restore--diff
: Show diff between local and backup versions--preview
: Show a preview of the file before restoring
To view available backups:
aeon list-backups [OPTIONS]
This command displays a detailed list of all backups, including dates, file counts, and total sizes.
AeonSync can be configured using command-line options or by modifying the configuration file:
hostname = "myworkstation"
remote_address = "user@nas.local"
remote_path = "/volume1/backups"
remote_port = 22
retention_period = 30
source_dirs = ["/home/user/projects", "/var/www", "/etc"]
exclusions = [".cache", "*/node_modules", "*.tmp", ".venv"]
ssh_key = "/home/user/.ssh/id_rsa"
verbose = False
log_file = "/home/user/.local/share/aeonsync/aeonsync.log"
default_daily_backup = False # Set to True to allow only one backup per day
AeonSync organizes your backups as follows:
/volume1/backups/
└── myworkstation/
├── latest -> 2024-03-15
├── 2024-03-15/
├── 2024-03-14/
├── 2024-03-13.1/
├── 2024-03-13/
└── ...
- Each backup is stored in a date-stamped directory
- Multiple backups per day append a sequence number (e.g.,
2024-03-13.1
) - The
latest
symlink always points to the most recent backup
AeonSync can be used in various scenarios:
Protect your projects and documents with daily backups to your Synology NAS:
aeon sync --remote user@synology:/volume1/backups --source /home/user/projects --source /home/user/documents
Safeguard your web applications and databases:
aeon sync --remote backupuser@remote-server:/backups --source /var/www --source /var/lib/mysql
Keep your code safe with multiple backups per day:
aeon sync --remote user@dev-server:/backups --source /home/dev/workspace
Comprehensive backup solution for critical business data:
aeon config --hostname business-server --remote-address nas.local --remote-path /volume1/business-backups
aeon sync --source /home/shared --source /var/financial-data --retention 90
To set up the development environment:
- Clone the repository:
git clone https://github.com/hyperb1iss/aeonsync.git cd aeonsync
- Install Poetry if you haven't already:
pip install poetry
- Install dependencies:
poetry install
- Activate the virtual environment:
poetry shell
To run tests:
pytest
To run linting checks:
poetry run lint
Contributions to AeonSync are welcome! Here's how you can contribute:
- Fork the repository
- Create a new branch:
git checkout -b feature-branch-name
- Make your changes and commit them:
git commit -m 'Add some feature'
- Push to the branch:
git push origin feature-branch-name
- Submit a pull request
Please ensure your code adheres to the project's style guide (we use Ruff for formatting) and passes all tests.
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.
📚 Documentation • 🐛 Report Bug • 💡 Request Feature
Created by Stefanie Jane 🌠
If you find this project useful, buy me a Monster Ultra Violet! ⚡️