Files
Seedmover/README.md

3.6 KiB

Readme


SeedMover

Gestionnaire de transferts dual-pane entre une seedbox et un NAS, accessible depuis navigateur et smartphone.

Fonctionnalités

  • Dual-pane — navigation indépendante dans chaque panneau
  • Multi-protocoles — Local et SFTP inclus, extensible via plugins
  • File d'attente — transferts séquentiels avec progression temps réel, pause et stop
  • Historique — suivi de tous les transferts (taille, durée, date, statut)
  • Connexions — ajout, édition, test depuis l'interface, persistées entre redémarrages
  • Panneaux par défaut — sauvegarde la vue de démarrage en un clic

Démarrage rapide

# Générer une SECRET_KEY
python3 -c "import secrets; print(secrets.token_hex(32))"

# Lancer
docker compose up -d

Accès : http://<ip>:5000

Configuration docker-compose.yml

Variable Défaut Description
SEEDBOX_PATH /mnt/seedbox Chemin local seedbox
NAS_PATH /mnt/nas Chemin local NAS
APP_USERNAME admin Identifiant
APP_PASSWORD changeme Mot de passe
SECRET_KEY (à changer) Clé de session Flask
CACHE_TTL 60 TTL du cache de listing (secondes)
HISTORY_MAX 50 Nombre max d'entrées dans l'historique
SESSION_LIFETIME 86400 Durée de session (secondes)

Ajouter un protocole

Créer plugins/monprotocole.py, hériter de AbstractFS, implémenter les méthodes, définir PLUGIN_NAME et PLUGIN_LABEL. Le plugin est détecté automatiquement au démarrage.

Structure

seedmover/
├── app.py
├── plugins/
│   ├── base.py       ← interface abstraite
│   ├── local.py      ← système de fichiers local
│   └── sftp.py       ← SFTP via Paramiko
├── data/             ← volume Docker (connexions, historique)
├── templates/
│   ├── index.html
│   └── login.html
└── docker-compose.yml

Générer une SECRET_KEY sécurisée

python3 -c "import secrets; print(secrets.token_hex(32))"

Volumes

volumes:
  - /mnt/nas/Useed/Media_useed:/mnt/seedbox:ro  # seedbox, lecture seule
  - /mnt/nas/BOB4-Syno:/mnt/nas                 # NAS, lecture/écriture

Utilisation

  1. Se connecter sur http://ip:5000
  2. Naviguer dans la seedbox (panneau gauche) avec double-clic
  3. Naviguer vers le dossier destination sur le NAS (panneau droit)
  4. Sélectionner un ou plusieurs fichiers/dossiers côté seedbox (clic simple)
  5. Cliquer sur ⟶ Copier vers NAS
  6. Suivre la progression dans la file de transfert en bas

Raccourcis

  • Double-clic — ouvrir un dossier
  • Clic simple — sélectionner/désélectionner
  • ↻ Actualiser — forcer un rechargement (bypass cache)
  • 📁 — créer un nouveau dossier
  • ✏ Renommer — renommer un élément côté NAS
  • ⏸ Pause / ▶ Reprendre — suspendre le transfert en cours
  • ⏹ Stop — annuler le transfert et supprimer le fichier partiel
  • Échap — fermer les modales
  • Entrée — valider les modales

Stack technique

  • Backend : Python 3.12, Flask, Flask-SocketIO, Eventlet
  • Frontend : HTML/CSS/JS vanilla, Socket.IO
  • Transport : copie par chunks de 4MB avec progression WebSocket

Notes techniques

  • Streaming chunk par chunk (1MB) sans buffer intermédiaire — RAM stable pendant les transferts
  • malloc_trim() appelé après chaque transfert pour rendre la mémoire au système
  • Verrou par connexion pour thread-safety Paramiko (évite les "Garbage packet")
  • Prefetch SFTP désactivé pour éviter le chargement du fichier entier en RAM