È semplice spiegare cos'è un media server: avete presente Netflix? Aggiungeteci Spotify e Flickr.

In questo post però vorrei soffermarmi sulle serie tv, con un accenno ai film.

Cos'è Docker

Nell'articolo precedente, ho accennato l'utilizzo che faccio del mio server unRaid, spiegando che è molto semplice creare una "catena" di automazioni che permettono di scegliere le serie che si seguono, scaricarle e guardarle in streamingvia browser o applicazione.

In queste righe vorrei spiegarvi un po' come ho configurato il server unRaid. So che in molti utilizzano Windows, alcuni macOS e i prediletti Linux, quindi cercherò di rendere le righe successive il più generiche possibile.

Sappiamo benissimo però che questi sistemi operativi funzionano in modo diverso fra di loro. Per questo motivo l'articolo prevede l'utilizzo di Docker, che ci permette di astrarre il sistema e non essere vincolati dal OS che stiamo utilizzando.

Mentre le virtual machines virtualizzano l'hardware dei server, i container Docker si può dire che virtualizzino il sistema operativo sfruttando direttamente il kernel Linux. Wikipedia spiega bene come funziona Docker, e qui sotto vi lascio un'immagine presa direttamente da AWS che spiega un po' la differenza con le VM:

Installare Docker

Se avete letto l'articolo precedente, sono solito linkare la documentazione ufficiale per l'installazione di software. Farò lo stesso con Docker: Windows, Linux, MacOS. È un procedimento molto semplice e veloce, ma vi "obbliga" ad attivare Hyper-V se siete su Windows.

I vari containers

Visto che l'articolo non è una guida per scimmie🐒, voglio spiegarvi bene  come e perché.

Ho scelto Docker perché ci permette di non rompere niente: utilizzando software che vengono aggiornati spesso e che sono facili da installare e configurare in modo sbagliato, i container ci permettono di fare errori e di riconfigurarli in modo molto semplice, senza perdita di dati e compromissione del sistema operativo.

Il come è semplice: scegliamo i container, li configuriamo, li avviamo e li utilizziamo😎

Per il mio media server ho scelto 3 software principali:

  • Medusa, che ci permette di scegliere le serie e scaricare i Torrents. Si occupa anche di processare i file che scarichiamo rinominandoli e organizzandoli;
  • DelugeVPN, che ci permette di scaricare i Torrents che trova Medusa. In particolare, questa versione scaricherà sfruttando una VPN, quindi in "anonimato". Se non avete una VPN, basterà utilizzare la versione "liscia" del container di Deluge;
  • Plex, che è l'interfaccia adibita allo streaming della nostra libreria. Un'alternativa è Jellyfin che è opensource e ha molte funzionalità, ma non lo trovo abbastanza maturo.

Operazioni preliminari

Come prima cosa, scegliete un hard disk o uno share dove tenere i dati che verranno scaricati.
Personalmente ho una situazione del genere nel mio server:

cd /mnt/user/Media
tree -d -L 3
.
├── Downloads
│   ├── completed
│   ├── incomplete
├── Games
├── HandbrakeOutput
├── Movies
├── Music
├── Recordings
├── Series
│   ├── Game of Thrones
│   │   ├── Season 1
│   │   ├── Season 2
│   ├── Silicon Valley
│   │   ├── Season 1
└── Udemy


Il torrent verra scaricato da qBittorrent in Downloads/incomplete. Una volta terminato il download, il file verrà spostato in Downloads/completed. Medusa nel frattempo tiene d'occhio la cartella Downloads/completed: quando trova un file all'interno, lo processa e crea una cartella in /Series del tipo /Series/NomeSerie/SeasonN.

Create anche una cartella /appdata, possibilmente fuori dalla cartella /Media. La utilizzeremo per montare le cartelle dei containers sul nostro host

Quindi create la struttura che più vi aggrada, così iniziamo con la parte bella 🐱‍👤

Deluge

Per prendere dimestichezza con Docker, vediamo un po' cosa ci dice la pagina dell'immagine di binhex/arch-delugevpn.

tramite il comando docker run avvieremo il container dall'immagine generata dal Dockerfile. Niente di più semplice.

Ovviamente, dobbiamo configurare i percorsi, le variabili e le porte.

Attenzione: noterete che sono presenti le variabili PUID e PGID. Queste due variabili fanno riferimento all'ID e Group ID dell'utente (unix).
Se volete una spiegazione, leggete quel che dicono i ragazzi di linuxserver qui

Se siete su Windows, dovrebbe funzionare tutto omettendo le variabili PUID e PGID.

Se avete a disposizione una VPN (io mi trovo molto bene con NordVPN), seguite la documentazione. Avrete bisogno di username, password, file di configurazione e certificati.

Guardando un po' la configurazione di esempio, salta subito all'occhio che ci sono 3 opzioni principali per i comandi: -p, -v e -e.

  • -v: serve per collegare una cartella nel sistema host in quella del container, es. ```-v /cartellahost/data:/cartellacontainer/data
  • -p: serve per collegare una porta, es. 8080(host):80(container)
  • -e: si riferisce alle variabili presenti nell'immagine. Servono per configurare il container abilitando o disabilitando funzionailtà, ad esempio -e VPN_ENABLED=YES

Utilizzando di non avere una vpn, utilizzeremo l'immagine di binhex/arch-deluge.

I comandi sotto indicati si riferiscono a Linux. Se vi trovate su Windows, evitate di aggiungere le variabili PUID e PGID e non utilizzate i "\" alla fine di ogni riga. Consiglio di utilizzare qualcosa come la Git Bash per lanciare i comandi.

Per chi si trova su Linux: aggiungete le variabili PUID e PGID. Ottenete l'user id e il group id lanciando il comando id $user nel terminale.

PS: i path dell'host devono essere assoluti, quindi inserite l'indirizzo completo.

docker run -d \
    -p 8112:8112 \
    -p 58846:58846 \
    -p 58946:58946 \
    --name=deluge \
    -v ~/Media/Downloads:/data \
    -v ~/appdata/deluge:/config \
    -e DELUGE_DAEMON_LOG_LEVEL=info \
    -e DELUGE_WEB_LOG_LEVEL=info \
    -e UMASK=022 \
    -e PUID=1000 \
    -e PGID=985 \
    binhex/arch-deluge

La password dell'interfaccia web è deluge. Se visitate sul vostro browser l'indirizzo http://localhost:8112 e l'installazione è andata a buon fine, dovreste vedere qualcosa del genere:

Deluge Web Interface

Clickate su connect e modificate le impostazioni delle directory in questo modo:

Deluge Folders Config

Potete provare ad aggiungere un magnet link per constatare il corretto funzionamento del container: se il torrent viene aggiunto e le directory sull'host vengono create o comunque sono quelle giuste, Deluge funziona 🐒

PS: dalle impostazioni delle code (queue), fate in modo che i file passino alla cartella completed. Potete controllare la documentazione di deluge, ma le opzioni sono abbastanza eloquenti.

Medusa

Medusa sarà il prossimo container che andremmo ad installare. L'immagine che utilizzo è quella di binhex/arch-medusa.

Come per Deluge, dobbiamo bindare diversi path: uno per /media, uno per /data e uno per config.

Considerando la struttura delle mie cartelle, i bind sono questi:

~/Media/Series:/media dove Medusa butta le serie tv processate
~/Media/Downloads/completed:/data dove Medusa pesca i downloads
~/appdata/medusa:/config dove saranno presenti i files di configurazione

Fatta questa considerazione, andiamo al dunque:

docker run -d \
    -p 8081:8081 \
    --name=medusa \
    -v ~/Media/Series:/media \
    -v ~/Media/Downloads/completed:/data \
    -v ~/appdata/medusa:/config \
    -e UMASK=022 \
    -e PUID=1000 \
    -e PGID=985 \
    binhex/arch-medusa


Visitando http://localhost:8081 potete controllare che tutto funzioni in modo corretto:

Medusa Web Interface

La configurazione di Medusa è veramente semplice. Documentazione alla mano potete sbizzarrirvi.

La prima cosa da fare è quella di andare in Search Settings e per l'opzione **Send .torrent files** to selezionare Deluge (via WebUI). Inserite l'indirizzo http://localhost:8112 (se avete cambiato porte, modificate il link in modo appropriato) e la password ed avete finito. Così è come ho configurato il mio client:

Medusa Torrent Settings

Personalmente ho abilitato l'opzione Scheduled Postprocessor in Post Processing. Se avete riprodotto la posizione delle cartelle che vi ho mostrato prima, selezionate la cartella /data per il Post Processing Dir.

Medusa Postprocessing Settings

Ora potete aggiungere una serie andando su Shows->Add Shows->Add New Show. Nel passaggio successivo, ricordate di selezionare /media come cartella per il Parent Folder

Medusa Add Show

Se tutto è andato a buon fine, la home page di Medusa inizierà a riempirsi di Serie TV  ❤

Medusa Web Interface

Plex

Se siete arrivati fino a questo punto, sappiate che ci troviamo a 1326 parole. Un po' tantino ma neanche tanto. Il risultato però sarà quello di non dover più cercare torrent il giorno dell'uscita della puntata :3

Plex sarà il cuore pulsante del nostro sistema. I bravi ragazzi di linuxserver.io ci danno a disposizione un container bello e pronto da essere installato: linuxserver/plex.

Come al solito, le variabili sono riportate nella pagina di Docker Hub:
abbiamo bisogno di UID, GID, /config, /data/tvshows e /movies (volendo, ma vi spiegherò meglio successivamente) e /transcode, che attualmente non utilizzo e non ne parlerò qui sotto, per il semplice fatto che per il transcoding bisogna avere hardware adatto.

La mia configurazione è la seguente:

docker run -d \
  --name=plex \
  --net=host \
  -e PUID=1000 \
  -e PGID=985 \
  -e VERSION=latest \
  -v ~/appdata/plex:/config \
  -v ~/Media:/data/media \
  --restart unless-stopped \
  linuxserver/plex


Come vedete ho bindato /Media a data/media all'interno del container. Questo perchè Plex ci permette di creare librerie in base al contenuto durante la configurazione. Possiamo avere quindi una libreria per le serie tv e una per i film in cartelle separate anche all'interno di Plex. In questo caso, gli diamo accesso a tutta la cartella /Media, quindi non ci saranno problemi.
--net=host fa si che il network stack del container non sia isolato dall'host di docker ( il nostro pc/server ). Se volete modificare questa opzione, controllate la documentazione nel repo su Docker Hub.

Una volta lanciato il container, l'interfaccia sarà disponibile su http://localhost:32400/web.
Fate il login o create un account e impostate la vostra libreria. Se avete configurato tutto per bene, avrete una situazione simile a questa:

Plex Add Library

Ora potete sbizzarrirvi :D

Se volete automatizzare anche il download dei film, date uno sguardo a Couchpotato 🐱‍👤

Fine

Spero l'articolo sia stato di vostro gradimento e soprattutto che siate riusciti a mettere su lo stack, che da veramente molte soddisfazioni!

Se avete feedbacks scrivetemi pubblicamente o in privato, rispondo sempre.

È molto probabile che il prossimo articolo sarà su Nextcloud, quindi stay tuned 😎

Bye.