Ajout readme
This commit is contained in:
311
Readme.md
Normal file
311
Readme.md
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Se connecter sur http://ip:5000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Naviguer dans la seedbox (panneau gauche) avec double-clic
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Naviguer vers le dossier destination sur le NAS (panneau droit)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Sélectionner un ou plusieurs fichiers/dossiers côté seedbox (clic simple)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Cliquer sur ⟶ Copier vers NAS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
Reference in New Issue
Block a user