Docker: stack completo con Gextto, indexarr, Jackett, Prowlarr, FlareSolverr e aMule¶
Questa guida avvia tutto in Docker: Gextto con il suo gx-torrent gestito,
indexarr con le sue fonti native, Jackett e Prowlarr per gli indexer Torznab, FlareSolverr per le pagine protette
da Cloudflare e amuled per eD2k/Kad. È pensata per un host Linux con Docker
Engine e il plugin docker compose; non sostituisce l'installazione con
install.sh, che resta quella consigliata su una macchina dedicata.
Il file pronto è:
docker-full/docker-compose.yml
- Cosa avvii
- Requisiti
- Avvio rapido
- Cartelle e permessi
- Prima configurazione di Gextto
- indexarr
- Jackett, Prowlarr e FlareSolverr
- aMule, eD2k e Kad
- gx-torrent e identità del client
- Percorsi visti dai container
- Aggiornare
- Backup
- Problemi comuni
- Sicurezza
- Limiti di questa modalità
Cosa avvii¶
| Servizio | Immagine | Porta | Ruolo |
|---|---|---|---|
gextto |
compilata da docker-full/Dockerfile |
5000 | UI/API, daemon, gx-torrent gestito |
indexarr |
compilata dal checkout di indexarr (il suo Dockerfile) |
8788 | indexer Torznab/Newznab con fonti native, eD2k compreso |
amuled |
ngosang/amule |
4712 EC, 4662 TCP, 4672 UDP | eD2k e Kad |
jackett |
lscr.io/linuxserver/jackett |
9117 | indexer Torznab |
prowlarr |
lscr.io/linuxserver/prowlarr |
9696 | indexer Torznab |
flaresolverr |
ghcr.io/flaresolverr/flaresolverr |
8191 | superamento Cloudflare |
Gextto, indexarr e amuled usano network_mode: host: aMule ha bisogno
della rete dell'host per l'UPnP e per le porte eD2k, Gextto trova indexarr,
Jackett, Prowlarr, FlareSolverr e aMule su 127.0.0.1, e indexarr vi trova
FlareSolverr e la web API di aMule, come in un'installazione normale. Jackett,
Prowlarr e FlareSolverr restano su rete bridge e pubblicano le porte solo su
127.0.0.1 (vedi Sicurezza).
Requisiti¶
- Linux con Docker Engine e Docker Compose v2 (
docker compose version). - Almeno 4 GB di RAM liberi e spazio per i download, la libreria e i database.
- Le porte 5000 (UI), 6881 TCP/UDP (gx-torrent), 4662 TCP e 4672 UDP (aMule), 4712 (EC di aMule) libere sull'host.
- La porta 8788 (indexarr) libera, oppure un'altra scelta con
INDEXARR_PORT. - Le porte 9117, 9696 e 8191 libere se non usi altri container con gli stessi servizi.
- Il sorgente di indexarr accanto a questo repository (l'immagine si compila
da lì):
git clone https://github.com/buzzqw/indexarr.git ../indexarr. Una posizione diversa va inINDEXARR_SRCindocker-full/.env. - Un utente con UID/GID che possiede le cartelle montate. Gli esempi usano
1000:1000: cambiaPUID/PGIDindocker-full/.envse il tuo utente ha un altro ID (id -u,id -g).
[!IMPORTANT]
network_mode: hostnon è disponibile su Docker Desktop per macOS e Windows. Su quegli host usa l'installazione nativa di Gextto, oppure adatta il compose a una rete bridge (perdi UPnP e la comodità di127.0.0.1).
Avvio rapido¶
Dalla radice del repository:
cp docker-full/env.example docker-full/.env
# Modifica .env: PUID, PGID, AMULE_EC_PASSWORD e, se vuoi, TZ.
Prepara le cartelle prima di avviare i container, così non vengono create come root:
mkdir -p docker-full/data/{gextto,indexarr,amule,jackett,prowlarr,flaresolverr} \
docker-full/media/amule/{incoming,temp} \
docker-full/library
sudo chown -R "$(id -u):$(id -g)" docker-full/data docker-full/media docker-full/library
Compila le immagini con la versione dei checkout (per Gextto legge
build_number, version_series, gx-torrent.build_number e
gx_torrent.version_series; per indexarr il suo git describe):
./scripts/docker-full-build.sh
Avvia lo stack:
docker compose -f docker-full/docker-compose.yml up -d
Apri:
http://IP-DELL-HOST:5000
Segui il wizard. I log sono in:
docker compose -f docker-full/docker-compose.yml logs -f gextto
e nei file docker-full/data/gextto/gextto.log e
docker-full/data/gextto/gx-torrent/gx-torrent.log.
Per fermare tutto senza cancellare i dati:
docker compose -f docker-full/docker-compose.yml down
Cartelle e permessi¶
| Host | Dentro Gextto | Uso |
|---|---|---|
docker-full/data/gextto |
/data |
database, configurazione, log, stato di gx-torrent |
docker-full/media |
/media |
download e libreria multimediale |
docker-full/library |
/library |
archivio finale (opzionale, puoi usare /media) |
docker-full/media/amule/incoming |
/amule/incoming |
file completati da aMule, da importare |
docker-full/media/amule/temp |
non montato in Gextto | file temporanei di aMule |
docker-full/data/amule |
non montato in Gextto | configurazione di aMule |
docker-full/data/indexarr |
/data in indexarr |
database, configurazione, log e chiave del vault di indexarr |
Il percorso di aMule deve essere lo stesso dentro amuled e dentro Gextto:
per questo ./media/amule/incoming è montato come /amule/incoming in
entrambi. Se lo cambi, cambia entrambi i mount e la cartella di arrivo nelle
impostazioni di Gextto.
I file creati da Gextto appartengono all'UID/GID con cui gira il container
(PUID/PGID). Se vedi permission denied, correggi il proprietario delle
cartelle host e riavvia.
Prima configurazione di Gextto¶
Nel wizard:
- scegli la lingua e imposta la password/API key se vuoi proteggere l'API;
- come cartella download usa
/media(o una sottocartella, ad esempio/media/downloads); - come archivio usa
/library(o/media/library); - lascia gx-torrent come motore: il binario è già nell'immagine e Gextto lo avvia e lo sorveglia da solo;
- attiva i download quando sei pronto.
Non impostare gxtorrent_listen su un indirizzo pubblico senza token: il
default 127.0.0.1:8890 è quello giusto per questo stack. La pagina di
gx-torrent è raggiungibile dall'interno del container; per esporla usa
gxtorrent_listen e gxtorrent_token con cautela.
indexarr¶
indexarr è un indexer Torznab/Newznab con fonti native proprie: sostituisce
Jackett e Prowlarr per i siti che copre, e Gextto lo legge come qualsiasi altro
indexer. Apri la sua UI su http://IP-HOST:8788 (o sulla INDEXARR_PORT che
hai scelto).
- Impostazioni → Sicurezza: imposta subito utente e password, perché la UI ascolta su tutte le interfacce dell'host (rete host). La stessa pagina mostra la API key.
- Impostazioni → Rete: indirizzo di FlareSolverr
http://127.0.0.1:8191, poi Testa FlareSolverr. - Indexer → Aggiungi indexer: aggiungi dal catalogo le fonti che ti servono.
- In Gextto: Configurazione → Sorgenti → Aggiungi indexer, gestore
indexarr, URL
http://127.0.0.1:8788, la API key del punto 1. Salva e verifica.
Per le fonti eD2k indexarr può mandare i link allo stesso amuled: in App →
Client di download aggiungi aMule con l'indirizzo della web API
http://127.0.0.1:4711 e la password AMULE_WEBUI_PASSWORD.
Le guide di indexarr su fonti, impostazioni e API sono solo in inglese: README e guida d'uso. La sua interfaccia invece è tradotta anche in italiano.
La chiave del vault che cifra password e cookie di indexarr viene creata in
docker-full/data/indexarr/.config/indexarr/master.key. Senza di essa i
segreti salvati non si possono leggere: tienine una copia separata dai backup.
Jackett, Prowlarr e FlareSolverr¶
I tre servizi sono già in rete con Gextto. Apri le loro UI dall'host (o con un tunnel SSH, vedi sotto):
- Jackett:
http://127.0.0.1:9117 - Prowlarr:
http://127.0.0.1:9696 - FlareSolverr:
http://127.0.0.1:8191
Jackett¶
- Apri Jackett, aggiungi gli indexer che ti servono e copia la API key dalla pagina iniziale.
- In Gextto: Configurazione → Sorgenti → Aggiungi indexer.
- Nome:
jackett; URL:http://127.0.0.1:9117; API key: quella di Jackett; gestore: Jackett. Salva e prova la connessione.
Prowlarr¶
- Apri Prowlarr, aggiungi gli indexer e copia la API key da Settings → General.
- In Gextto aggiungi un indexer con URL
http://127.0.0.1:9696, la API key di Prowlarr e gestore Prowlarr. - Non serve configurare Gextto come "app" dentro Prowlarr: Gextto legge direttamente l'endpoint Torznab di Prowlarr.
FlareSolverr¶
In Configurazione → Sorgenti → FlareSolverr inserisci:
http://127.0.0.1:8191
e premi Test. FlareSolverr viene usato solo per gli indexer esterni che richiedono di superare Cloudflare; un indexer in rete locale non ci passa.
Accedere alle UI da un altro computer¶
Le porte 9117, 9696 e 8191 sono pubblicate solo su 127.0.0.1 dell'host. Da un
altro computer puoi usare un tunnel SSH:
ssh -L 9117:127.0.0.1:9117 -L 9696:127.0.0.1:9696 -L 8191:127.0.0.1:8191 utente@host
e poi aprire http://127.0.0.1:9117 e http://127.0.0.1:9696 dal tuo browser.
Se preferisci esporle sulla LAN, sostituisci nel compose
"127.0.0.1:9117:9117" con "9117:9117" (e analogamente per le altre) e
proteggile con firewall e password.
aMule, eD2k e Kad¶
amuled parte con la rete dell'host e genera la configurazione al primo avvio.
Il valore AMULE_EC_PASSWORD di .env è la password in chiaro delle
connessioni esterne (EC); l'immagine la trasforma nell'MD5 che aMule salva in
amule.conf.
In Gextto:
- Configurazione → eD2k e Kad;
- attiva eD2k e Kad tramite aMule;
- indirizzo
127.0.0.1, porta EC4712, password =AMULE_EC_PASSWORD; - salva, apri Scoperta → eD2k e premi Connetti.
La cartella di arrivo di aMule è /amule/incoming sia nel container sia in
Gextto. I file completati compaiono in Scarico e vengono importati come gli
altri download.
[!NOTE] Se cambi
AMULE_EC_PASSWORDdopo il primo avvio, aMule continua a usare l'hash vecchio: il file èdocker-full/data/amule/amule.conf. Fermaamuled, aggiornaECPassword(MD5 della nuova password:printf '%s' 'nuova' | md5sum) e riavvia, oppure elimina il file di configurazione e lascia che l'immagine lo rigeneri. Aggiorna anche la password in Gextto.
Le porte eD2k predefinite sono TCP 4662 e UDP 4672. Aprile sul router (o attiva
l'UPnP di aMule modificando amule.conf, che di default è generato con
UPnPEnabled=0). Senza porte aperte aMule funziona con ID basso e trova meno
fonti.
gx-torrent e identità del client¶
Il motore predefinito è gx-torrent, già incluso nell'immagine e avviato da Gextto. Annuncia il nome e la versione reali:
peer id -GX1.1.<build>-…
BEP 10 gx-core 1.1.<build>
tracker gx-core/1.1.<build>
In Configurazione → gx-torrent → identità del client annunciata puoi scegliere un preset di compatibilità:
gx-core(default, versione reale);qBittorrent(5.2.3);Transmission(4.1.3);Rain(2.4.4);anacrolix/torrent(1.61.0).
Il campo versione permette di sovrascrivere la versione del preset. Cambia
solo le stringhe annunciate (peer ID, BEP 10, User-Agent dei tracker HTTP e
WebSocket, creatore del .torrent), non il comportamento del protocollo.
Alcuni tracker privati accettano solo client in whitelist: controlla le loro
regole e non usare un preset per aggirare un divieto.
Come è stato verificato¶
L'identità è stata provata con client reali in Docker, con un tracker locale e un torrent di test:
| Client osservatore | Identità di Gextto | Cosa vede il client |
|---|---|---|
| qBittorrent 5.3.0 | gx-core |
client: gx-core 1.1.252, peer_id_client: -GX1.1.2 |
| qBittorrent 5.3.0 | preset qbittorrent |
client: qBittorrent 5.2.3, peer id -qB5230- |
| Transmission 4.1.3 | gx-core |
clientName: gx-core 1.1.252 |
| Transmission 4.1.3 | preset qbittorrent |
clientName: qBittorrent 5.2.3 |
Il test dimostra che il peer remoto riceve davvero l'identità scelta. Non dimostra che un tracker privato l'accetti: quello dipende dalle sue regole.
Percorsi visti dai container¶
Gextto vede i file come:
- download:
/media - archivio:
/library - arrivo aMule:
/amule/incoming
Se Jellyfin o Plex girano in un altro container e vedono la stessa libreria con
un altro percorso, imposta la mappatura in Configurazione → Jellyfin/Plex
(ad esempio percorso_gextto=percorso_jellyfin). Lo stesso vale per
qBittorrent, se un giorno lo usi al posto di gx-torrent.
Aggiornare¶
git pull
git -C ../indexarr pull
./scripts/docker-full-build.sh
docker compose -f docker-full/docker-compose.yml up -d
docker compose up -d ricrea solo i container con un'immagine nuova; i volumi
in docker-full/data, docker-full/media e docker-full/library restano.
Non usare l'aggiornamento interno di Gextto (gexttod --update) né
scripts/upgrade.sh di indexarr in questo stack: installer e servizi systemd
non sono attivi nei container.
Aggiorna Jackett, Prowlarr, FlareSolverr e aMule con:
docker compose -f docker-full/docker-compose.yml pull
docker compose -f docker-full/docker-compose.yml up -d
Backup¶
Ferma Gextto prima di copiare i database:
docker compose -f docker-full/docker-compose.yml stop gextto
cp -a docker-full/data/gextto /percorso/di/backup/gextto-$(date +%F)
docker compose -f docker-full/docker-compose.yml start gextto
Lo stesso per indexarr:
docker compose -f docker-full/docker-compose.yml stop indexarr
cp -a docker-full/data/indexarr /percorso/di/backup/indexarr-$(date +%F)
docker compose -f docker-full/docker-compose.yml start indexarr
La copia contiene anche la chiave del vault: conservala in un posto sicuro. Per
un backup completo copia anche docker-full/data/amule,
docker-full/data/jackett, docker-full/data/prowlarr e, se vuoi,
docker-full/library. I download in docker-full/media sono spesso grandi:
escludili o copiali con uno strumento incrementale.
Problemi comuni¶
| Sintomo | Cosa controllare |
|---|---|
| La porta 5000 è già in uso | Un'altra istanza di Gextto è attiva sull'host. Fermala (systemctl --user stop gextto) oppure cambia GEXTTO_LISTEN nel compose e la porta pubblicata. |
| La porta 8788 è già in uso | indexarr è già installato sull'host. Fermalo (systemctl --user stop indexarr) oppure imposta un'altra INDEXARR_PORT in .env e usa quella porta nell'URL di indexarr in Gextto. |
indexarr checkout not found durante il build |
Clona indexarr accanto a questo repository oppure imposta INDEXARR_SRC in docker-full/.env (relativo a docker-full/ o assoluto). |
| Gextto non vede indexarr | L'URL è http://127.0.0.1:8788 (rete host), non http://indexarr:8788; controlla docker compose ... logs indexarr. |
permission denied su /data o /media |
PUID/PGID in .env devono corrispondere al proprietario delle cartelle; esegui chown -R sulle cartelle host. |
| Gextto non vede Jackett/Prowlarr | Gextto usa la rete host: l'URL è http://127.0.0.1:9117 / http://127.0.0.1:9696, non http://jackett. Verifica che le porte siano pubblicate. |
| FlareSolverr non risponde | Controlla docker compose ... logs flaresolverr e apri http://127.0.0.1:8191 dall'host. |
| aMule non raggiungibile | La password EC in Gextto deve essere quella in chiaro di AMULE_EC_PASSWORD; la porta è 4712; amuled deve essere in esecuzione. |
| aMule ha ID basso | Apri TCP 4662 e UDP 4672 sul router, oppure abilita UPnP in amule.conf. |
| Nessun peer nei torrent | Apri 6881 TCP/UDP sul router/firewall; verifica che gx-torrent sia attivo. L'identità del client non c'entra con la raggiungibilità. |
| Il container non parte su macOS/Windows | network_mode: host non è supportato da Docker Desktop: usa Linux o l'installazione nativa. |
Versione mostrata 1.1.0 |
Hai compilato con i valori di default. Usa scripts/docker-full-build.sh, che legge i file di build del checkout. |
Sicurezza¶
- Cambia
AMULE_EC_PASSWORDeAMULE_WEBUI_PASSWORDprima del primo avvio. - Gextto ascolta su
0.0.0.0:5000(rete host): mettilo dietro un reverse proxy con HTTPS o limitane l'accesso con il firewall. Proteggi l'API con la sua API key. - indexarr ascolta su tutte le interfacce sulla porta 8788 (rete host) e non chiede login finché non lo imposti in Impostazioni → Sicurezza: fallo al primo avvio, oppure limita la porta con il firewall.
- Jackett, Prowlarr e FlareSolverr sono pubblicati solo su
127.0.0.1per default. FlareSolverr non ha autenticazione: non esporlo sulla LAN. - Non pubblicare la porta EC 4712 di aMule su Internet.
- Il gruppo Docker equivale a root sull'host: limita l'accesso al socket Docker.
Limiti di questa modalità¶
- Lo stack è per Linux: la rete host e l'UPnP di aMule non funzionano su Docker Desktop.
- Non ci sono systemd,
install.sh,gexttod --updatené il serviziogextto-update.path: aggiorna congit pull+ compose. - I container Jackett/Prowlarr/FlareSolverr/aMule hanno i loro aggiornamenti;
AUTO_UPDATE=trueper Jackett è comodo ma può cambiare versione senza un tuo intervento. - L'immagine include
ffprobe,ffmpegemkvmerge: servono alla pulizia opzionale delle tracce audio e non vanno installati a mano. - Le immagini compilano dal sorgente: il primo build richiede qualche minuto e
scarica
golang:1.27e Debian slim per Gextto,golang:1.26-alpinee Alpine per indexarr.
Per l'integrazione aMule completa (protocollo EC, cartelle, diagnostica) vedi anche eD2k e Kad con aMule. Per il motore e le identità client vedi gx-torrent.