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.0.tar.gz (36.6 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.0-py3-none-any.whl (43.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cryptbackup-1.0.0.tar.gz
  • Upload date:
  • Size: 36.6 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.0.tar.gz
Algorithm Hash digest
SHA256 80be9c225c4face62f9c753a97d9fbb2b4fd904cd2ac44057f7b5b71a043a810
MD5 26cde59f872ee954e3d22f225a7a7125
BLAKE2b-256 b4643ff77fd6d7f4037c03f6197ce4b2861e8c6e5283b4fa547aaa3e75506218

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cryptbackup-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 43.6 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dc95566d7581de715ba17875753a56a22703459eab04151942d4626cbb7375be
MD5 c949319272b62ee0c6a48bcbc85f9f19
BLAKE2b-256 d2697f8902af7e03f80fcfcabdf6207261664a97d9525a91e6055b9bdfe1f050

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