Skip to main content

Système de backup incrémental avec chiffrement AES-256

Project description

🔐 MyBackup — Système de backup incrémental intelligent

Sauvegarde automatique avec chiffrement AES-256, compression Zstandard et détection en temps réel

Python 3.10+
License: MIT
Platform: Cross-platform


Table des matières


🎯 Fonctionnalités

  • Backup incrémental : sauvegarde uniquement les fichiers modifiés depuis la dernière version
  • Chiffrement : AES-256-GCM (authentifié)
  • Compression : Zstandard (zstd)
  • Surveillance en temps réel (watch) / intervalle configurable
  • Destinations multiples : disque externe, NAS, partition, clé USB, cloud chiffré
  • Versioning : historique par fichier (versions datées)
  • CLI moderne (Typer + Rich) avec options dry-run et verbose
  • Restauration granulaire : par fichier, dossier, date ou version

📋 Prérequis

  • Python 3.10+
  • Systèmes supportés : Windows 10/11, macOS (Intel/Apple Silicon) et distributions Linux modernes
  • Destination de backup : disque externe, NAS, partition séparée, clé USB, etc.

🚀 Installation rapide

  1. Cloner le dépôt :
git clone https://github.com/stephdeve/backup-system.git
cd backup-system
  1. Créer et activer un environnement virtuel :
  • Windows PowerShell :
python -m venv venv
.\venv\Scripts\Activate.ps1
  • Windows CMD :
python -m venv venv
.\venv\Scripts\activate.bat
  • macOS / Linux (bash, zsh) :
python -m venv venv
source venv/bin/activate
  1. Installer les dépendances et le package en mode dev :
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -e .

⚙️ Initialisation

Initialiser MyBackup (crée configuration, DB et clé de chiffrement) :

mybackup init

Ceci crée (chemin selon OS) :

  • Windows : %USERPROFILE%\.mybackup\config.yaml et %USERPROFILE%\.mybackup\backups.db
  • macOS / Linux : ~/.mybackup/config.yaml et ~/.mybackup/backups.db
  • Un emplacement de stockage sur la ou les destinations configurées

Important : sauvegardez votre clé de chiffrement ! Sans elle, la restauration est impossible.


📖 Utilisation

Configurer les sources et destinations

Ajouter des dossiers à sauvegarder (exemples Windows et POSIX) :

# Windows
mybackup add "C:\Users\VotreNom\Documents" --exclude "*.tmp,~*,desktop.ini"

# macOS / Linux
mybackup add "/home/votreuser/Documents" --exclude "*.tmp,~*,.DS_Store"

Configurer la destination :

# Disque externe (Windows)
mybackup config set destination "D:\Backups"

# NAS (Windows UNC)
mybackup config set destination "\\192.168.1.100\backups"

# Destination POSIX (macOS / Linux)
mybackup config set destination "/mnt/backups"

Afficher la configuration :

mybackup config show

Lancer un backup

Backup de toutes les sources :

mybackup backup

Backup d'une source particulière :

mybackup backup --source "C:\Users\VotreNom\Documents"   # Windows
mybackup backup --source "/home/votreuser/Documents"      # macOS / Linux

Simulation (dry-run) :

mybackup backup --dry-run --verbose

Statut et historique

Afficher le statut :

mybackup status

Affiche : nombre de fichiers sauvegardés, espace utilisé / économisé, dernier backup, sources.

Lister les versions d'un fichier :

mybackup list "C:\Users\VotreNom\Documents\rapport.pdf"
# ou
mybackup list "/home/votreuser/Documents/rapport.pdf"

Restaurations

Restaurer la dernière version d'un fichier :

mybackup restore --file "C:\Users\VotreNom\Documents\important.docx"
# ou
mybackup restore --file "/home/votreuser/Documents/important.docx"

Restaurer à une date spécifique :

mybackup restore --file "C:\Users\VotreNom\Documents\rapport.pdf" --date 2026-01-15

Restaurer une version précise :

mybackup restore --file "C:\Users\VotreNom\app.py" --version 3

Restaurer vers un autre emplacement :

mybackup restore --file "C:\Users\VotreNom\doc.txt" --destination "C:\Restored\doc.txt"
# ou
mybackup restore --file "/home/votreuser/doc.txt" --destination "/home/votreuser/Restored/doc.txt"

Restaurer tout un dossier :

mybackup restore --directory "C:\Users\VotreNom\Documents" --destination "C:\Restored"
# ou
mybackup restore --directory "/home/votreuser/Documents" --destination "/home/votreuser/Restored"

Lister tous les fichiers disponibles pour restauration :

mybackup restore --list

Nettoyage / Rétention

Conserver N jours et un nombre de versions par fichier :

mybackup clean --keep-days 30 --keep-versions 10
# Simulation
mybackup clean --dry-run

🔧 Configuration avancée

Fichier de configuration :

  • Windows : %USERPROFILE%\.mybackup\config.yaml
  • macOS / Linux : ~/.mybackup/config.yaml

Exemple structure :

version: '1.0.0'
created_at: '2026-01-20T14:30:00'

encryption:
  algorithm: AES-256-GCM
  key: 'VOTRE_CLE_SECRETE_ICI'

compression:
  enabled: true
  algorithm: zstd
  level: 3  # 1 (rapide) à 22 (max compression)

sources:
  - path: C:\Users\VotreNom\Documents
    exclude: ['*.tmp', '~*', 'desktop.ini']
    added_at: '2026-01-20T14:35:00'

destinations:
  primary: D:\Backups
  secondary: null

watch:
  enabled: true
  interval: 300  # secondes
  realtime: true

retention:
  keep_days: 30
  keep_versions: 10
  auto_clean: false

Modifier via CLI :

mybackup config set compression.level 5
mybackup config set retention.auto_clean true
mybackup config set watch.interval 600

Ou éditer directement le fichier de config selon votre OS (ex. ~/.mybackup/config.yaml ou %USERPROFILE%\.mybackup\config.yaml).


📊 Comment ça marche (aperçu technique)

Pour chaque fichier :

  1. Calcul du hash SHA-256 (détecte modifications)
  2. Compression Zstandard (zstd)
  3. Chiffrement AES-256-GCM (Cryptography.io)
  4. Stockage du binaire chiffré (.enc) sur la destination
  5. Enregistrement des métadonnées dans la base SQLite (hash, taille, timestamp, version)

Structure sur destination (exemple) :

D:\Backups\
├── a3f5c892e1b4...enc  (version 1 de app.py)
├── d9g3h456f2c8...enc  (version 2 de app.py)
└── ...

La DB contient : chemin original, version, hash, tailles (original/compressé/chiffré), timestamps, ratio de compression.


🔒 Sécurité

  • Algorithme : AES-256-GCM (authentifié)
  • Bibliothèque : cryptography (best-effort FIPS-aware usage)
  • Clé : stockée dans le fichier de configuration par défaut — sauvegardez-la hors-site !

Sauvegarde de la clé (exemples) :

  • Windows PowerShell :
copy $env:USERPROFILE\.mybackup\config.yaml F:\backup_key.yaml
  • macOS / Linux :
cp ~/.mybackup/config.yaml /mnt/secure/backup_key.yaml

Sans la clé : restauration impossible. Conservez plusieurs copies sécurisées.

Intégrité : vérification SHA-256 avant et après chiffrement ; corruption détectée à la restauration.


🐛 Dépannage rapide

  • "MyBackup n'est pas initialisé" → exécuter mybackup init
  • "Destination manquante" → mybackup config set destination "D:\Backups" (ou chemin POSIX)
  • "Clé de chiffrement invalide" → restaurer votre config depuis votre copie de sauvegarde
  • Backup lent : diminuer la compression (niveau 1), désactiver la compression ou exclure plus de fichiers
  • Permission denied : vérifier permissions (NTFS sur Windows, permissions POSIX sur macOS/Linux)

📈 Roadmap

Sprint 2 (prévu)

  • Daemon de surveillance en arrière-plan
  • Backup automatique toutes les 5 minutes
  • Notifications d'erreur
  • Commande mybackup watch

Futurs

  • Priorisation intelligente (IA)
  • Dashboard web (FastAPI)
  • Support multi-plateformes (Windows, macOS, Linux) -- améliorations en cours
  • Intégration cloud chiffrée

🤝 Contribution

Ce projet est un projet personnel d'apprentissage — suggestions et contributions bienvenues. Ouvrez une issue ou une PR avec des propositions concrètes.


📄 Licence

MIT License — utilisation libre.


👨‍💻 Auteur

StephDev — Développeur (Cotonou, Bénin). Projet réalisé dans le cadre d'un apprentissage Python avancé.


🙏 Remerciements

  • cryptography.io
  • Zstandard (zstd)
  • Typer & Rich
  • Watchdog

⚡ Quick Start (résumé)

# 1. Installer
python -m venv venv
# Windows PowerShell
.\venv\Scripts\Activate.ps1
# macOS / Linux
source venv/bin/activate
pip install -r requirements.txt
pip install -e .

# 2. Initialiser
mybackup init

# 3. Configurer
# Windows
mybackup add "C:\Users\VotreNom\Documents"
mybackup config set destination "D:\Backups"
# macOS / Linux
mybackup add "/home/votreuser/Documents"
mybackup config set destination "/mnt/backups"

# 4. Backup
mybackup backup

# 5. Restaurer
mybackup restore --file "C:\Users\...\fichier.txt"  # ou chemin POSIX

<<<<<<< HEAD Vos données sont maintenant protégées. 🎉

Vos données sont maintenant protégées. 🎉

0d82b3e2327da458013841402feabe552baef083

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cryptbackup-1.0.2.tar.gz (35.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cryptbackup-1.0.2-py3-none-any.whl (41.9 kB view details)

Uploaded Python 3

File details

Details for the file cryptbackup-1.0.2.tar.gz.

File metadata

  • Download URL: cryptbackup-1.0.2.tar.gz
  • Upload date:
  • Size: 35.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.4

File hashes

Hashes for cryptbackup-1.0.2.tar.gz
Algorithm Hash digest
SHA256 5489b8ab1fbd4da13a446601eb49dae2c45e5b0bc96fa068a0377253cec39a0d
MD5 fbbab68c9ef632fc21e425de54425c78
BLAKE2b-256 e77b592e5621e41c72d1fa00cb64a4ea0076dd83fb1ab805362088effb0416f8

See more details on using hashes here.

File details

Details for the file cryptbackup-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: cryptbackup-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 41.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.4

File hashes

Hashes for cryptbackup-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a6c14761813e09cc536dc4c54e03866396762fa9f59994933450578ff2cbc2bf
MD5 23255ce5bf240a5e899b8484343971e4
BLAKE2b-256 3cd96f668521db78ae9b7a0737455d530a08693bdc08380d5a1a75eb6ddb6153

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page