Client aMule Docker pour ZimaBoard 832 / ZimaOS avec dashboard moderne, gestion de serveurs multi-sources, monitoring et intégration VPN Gluetun.
- aMule daemon headless avec Web UI (AmuleWebUI-Reloaded)
- Dashboard moderne (port 8078) avec authentification
- Ajout de liens
ed2k://(fichier ou liste de serveurs), un ou plusieurs à la fois, avec confirmation d'état - Onglet Serveurs avec import multi-sources
- Recherche : utilise la Web UI aMule classique (port 4711) — l'onglet Recherche du dashboard a été retiré
- 3 sources pré-configurées : eMule Security (officiel, prioritaire), Peerates, FlyerNet
- Scan automatique toutes les 24h de toutes les sources activées
- Panel Paramètres pour ajouter/supprimer/activer/désactiver des sources
- Support des fichiers
server.metET des pages HTML (scraping IP:port) - Import de sources personnalisées via URL
- Les paramètres sont persistants dans
dashboard-settings.json
- Bootstrap automatique (téléchargement
nodes.dat) - Monitor Kad : vérification toutes les 15 min, reconnexion auto si déconnecté
- Rafraîchissement périodique de
nodes.dat - Bouton de reconnexion manuelle dans les Paramètres
- Auto-restart aMule optionnel (cron)
- Backup auto de la config avec rotation
- Mise à jour auto de l'IP filter (emule-security.org)
- Mise à jour auto de la liste de serveurs par amuled lui-même (
addresses.datgénéré depuis les sources activées)
- Obfuscation supportée mais non obligatoire (le chiffrement obligatoire coupe la majorité des pairs)
- IP Filter mis à jour automatiquement
- Filtrage messages/spam activé
- Dashboard protégé par mot de passe
- Tout le trafic passe par Gluetun VPN
- Vitesses temps réel, état ED2K/Kad, espace disque
- Visualiseur de logs (Kad monitor, scanner, backup, etc.)
- Healthcheck Docker avec redémarrage auto
git clone <ce-repo>
cd Emule_DockerÉdite docker-compose.yml et remplace les mots de passe et la clé NordVPN.
Ou utilise un fichier .env :
NORDVPN_PRIVATE_KEY=ta_cle_wireguard
AMULE_GUI_PWD=MonMotDePasse
AMULE_WEBUI_PWD=MonMotDePasse
DASHBOARD_PWD=MonMotDePassedocker compose up -d --buildSi Gluetun tourne déjà séparément, utilise network_mode: "container:gluetun" et ajoute les ports aMule dans ton Gluetun existant :
ports:
- "4662:4662"
- "4665:4665/udp"
- "4672:4672/udp"
- "4711:4711"
- "4712:4712"
- "8078:8078"| Service | URL | Port |
|---|---|---|
| Dashboard | http://<ip>:8078 |
8078 |
| Web UI aMule classique | http://<ip>:4711 |
4711 |
data/
├── amule-config/ # Config aMule (amule.conf, server.met, nodes.dat, addresses.dat…)
│ ├── dashboard-settings.json # Paramètres du dashboard (sources serveurs, etc.)
│ └── dashboard-history.json # Historique des actions du dashboard
├── downloads/
│ ├── incoming/ # Téléchargements terminés
│ └── temp/ # Téléchargements en cours (même volume : pas de copie cross-device)
├── backups/ # Sauvegardes config
└── logs/ # Logs de diagnostic (/var/log/amule-diag)
Chrome et Firefox refusent qu'une page web s'enregistre comme gestionnaire du protocole ed2k:// (liste blanche de schémas). Quatre façons d'envoyer des liens au dashboard :
- Bookmarklet (Paramètres → Bookmarklet) : glisse le bouton dans ta barre de favoris. Sur une page contenant des liens ed2k, clique dessus : le dashboard s'ouvre dans un nouvel onglet et ajoute les liens. Fonctionne depuis les sites HTTPS (le bookmarklet ne fait pas de requête depuis la page, il ouvre
http://<ip>:8078/#add=…). - Coller : Ctrl+V n'importe où sur le dashboard (hors champ de saisie) avec des liens ed2k dans le presse-papiers.
- Glisser-déposer : fais glisser un lien ed2k depuis un autre onglet vers le dashboard.
- Clic direct sur les liens ed2k (Windows) :
tools/windows/contient un gestionnaire de protocole. Copieed2k-to-amule.cmddansC:\Tools\, éditeDASHBOARD_URL, puis double-cliqueregister-ed2k-handler.reg. Le navigateur proposera ensuite « Ouvrir aMule ? » sur chaque lien ed2k (coche « Toujours autoriser »). Aucun mot de passe n'est stocké : c'est ta session navigateur qui est utilisée.
Derrière un VPN sans port forwarding (NordVPN par exemple), aMule obtient un Low ID et Kad est « firewalled ». C'est normal et ça fonctionne, mais tu n'es joignable que par les clients High ID. Pour un High ID il faut un VPN avec port forwarding (ProtonVPN, AirVPN, PIA) : voir les exemples commentés dans docker-compose.yml.
| Variable | Description | Défaut |
|---|---|---|
GUI_PWD |
Mot de passe EC/GUI | auto-généré |
WEBUI_PWD |
Mot de passe Web UI | auto-généré |
DASHBOARD_PWD |
Mot de passe dashboard | = WEBUI_PWD |
DASHBOARD_ENABLED |
Activer le dashboard | true |
DASHBOARD_PORT |
Port du dashboard | 8078 |
SERVER_UPDATE_ENABLED |
MAJ auto serveurs | true |
BACKUP_ENABLED |
Backup auto config | true |
MOD_AUTO_RESTART_ENABLED |
Auto-restart aMule | true |
MOD_FIX_KAD_GRAPH_ENABLED |
Fix crash Kad graph | true |
MOD_FIX_KAD_BOOTSTRAP_ENABLED |
Bootstrap Kad auto | true |
AMULE_MAX_CONNECTIONS |
Connexions max | 800 |
AMULE_MAX_SOURCES_PER_FILE |
Sources max/fichier | 800 |
AMULE_MAX_CONN_PER_5SEC |
Nouvelles connexions / 5 s | 60 |
SOURCE_BOOST_AUTO_PAUSE_ENABLED |
Auto-pause des DL sans source | false |
TRUSTED_PROXY_CIDRS |
Réseaux dont on accepte X-Forwarded-For (reverse proxy) |
vide |
DASHBOARD_VERBOSE_PARSE |
Logs détaillés des appels amulecmd | 0 |
VPN_WAIT_TIMEOUT |
Attente du tunnel VPN au démarrage (s, 0 = aucune) |
180 |
AMULE_STOP_GRACE |
Délai laissé à amuled pour sauvegarder à l'arrêt (s) | 55 |
- Authentification :
POST /api/login{"password": "..."}→ cookie de session (aléatoire, 30 jours). Pour un script ou l'extension navigateur :POST /api/sessions/create{"label": "..."}renvoie un token sans expiration à passer enAuthorization: Bearer <token>.GET /api/sessionsliste,POST /api/sessions/revoke{"id": "..."}révoque. - Actions d'écriture (
/api/pause,/api/resume,/api/cancel,/api/add_ed2k,/api/connect,/api/kad/reconnect,/api/scan_now,/api/source_boost) : POST avec corps JSON ({"hash": "..."},{"link": "..."},{"target": "ed2k"}). La forme GET reste acceptée une version avec l'en-têteDeprecation: true. - Lecture :
statusetshow dlsont exécutés par un thread de fond toutes lesrefresh_interval_secsecondes ; les requêtes HTTP lisent la mémoire (aucunamulecmdpar requête). |AMULE_DOWNLOAD_CAPACITY| Capacité DL (Ko/s) |300| |AMULE_UPLOAD_CAPACITY| Capacité UL (Ko/s) |80|
Le conteneur gère lui-même son cycle de vie, sans dépendre de depends_on (qui n'est pas respecté quand le démon Docker relance les conteneurs après un reboot du NAS) :
- À l'arrêt : l'entrypoint intercepte SIGTERM et le transmet à
amuled, puis attendAMULE_STOP_GRACE(55 s par défaut) qu'il sauvegarde ses.met/.part.met.stop_grace_period: 90scôté compose laisse à Docker le temps d'attendre. Sans ça, amuled était SIGKILL en pleine écriture et le démarrage suivant échouait en code 134 (SIGABRT). - Au démarrage : les fichiers d'état vides (0 octet, résultat d'un arrêt brutal) sont mis de côté en
.corrupt-<date>, et les.part.mettronqués sont restaurés depuis leur.BAK. L'entrypoint attend ensuite le tunnel VPN (VPN_WAIT_TIMEOUT, 180 s) avant de lancer aMule. - En cas de crash : amuled est relancé automatiquement avec un backoff (5→60 s) ; le conteneur reste actif pour que le dashboard et les logs restent accessibles, et le healthcheck passe
unhealthy. Le code de sortie est traduit en clair dans les logs (134 = SIGABRT, 137 = OOM/kill, 139 = segfault…).
Gluetun recréé ⇒ recréer aMule aussi (son réseau est celui de Gluetun) :
docker compose up -d --force-recreate gluetun amule
docker exec amule curl -s https://api.ipify.orgdocker exec amule /opt/scripts/kad-monitor.shdocker exec amule /opt/scripts/source-scanner.shVia le dashboard (onglet Paramètres > Logs) ou :
docker exec amule cat /var/log/kad-monitor.log
docker exec amule cat /var/log/source-scanner.logpython -m unittest discover -s testsdocker exec amule ls /backups/
docker exec amule tar xzf /backups/amule-config-XXXXXXXX.tar.gz -C /home/amule/
docker restart amuleBasé sur ngosang/docker-amule. Sources serveurs : emule-security.org, peerates.net, FlyerNet.