El Streaming Està Trencat VI: La Pila Completa
Prou de fer-ho esperar, oi?
De bromes a part, considero que els posts anteriors d’aquesta sèrie són extremadament importants. Cadascun cobreix una peça crítica:
- Streaming is Broken II: Choosing Hardware. On vam aprendre sobre una configuració de servidor domèstic de baix cost amb els meus dos cèntims sobre emmagatzematge.
- Streaming is Broken III: The Foundation (OS, Docker, and “Day One”). On vam configurar el nostre OS, Docker, i vam preparar el terreny per al que vindria després.
- Streaming is Broken IV: The Fortress: VPN and Gluetun. Un capítol que normalment no trobaràs en altres tutorials, centrat en seguretat i privadesa.
- Streaming is Broken V: Hardlinks and Permissions. Consells per evitar mals de cap futurs en les nostres configuracions.
Però si hagués de triar només un post per explicar com configurar un servidor domèstic, seria aquest.
Sense més dilació, comencem.
La Pila Multimèdia
qBittorrent
Com vaig dir en posts anteriors, la pirateria és el pitjor crim del món, m’encanten les empreses que ofereixen serveis dolents, i gaudeixo pagant més per menys. És clar, per raons legals, dic això.

Ara, parlant seriosament, el flux del nostre servidor multimèdia domèstic serà el següent:
- Cercarem pel·lícules i sèries a Overseerr (tot s’explicarà més endavant)
- Overseerr enviarà sol·licituds a Radarr (Pel·lícules) i Sonarr (Sèries)
- Radarr i Sonarr cercaran el material en llocs indexats per Prowlarr, la funció única del qual serà gestionar aquests indexadors
- qBittorrent descarregarà el fitxer. Radarr i Sonarr identificaran automàticament el fitxer i mouran la descàrrega a les seves pròpies carpetes
- Jellyfin serà la nostra aplicació de streaming a la TV, iPad, ordinador, etc. És on veurem el contingut adquirit
Amb això en ment, comencem amb el primer element a configurar de la nostra llista: el descarregador.
Al nostre docker compose, tindrem alguna cosa així:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- WEBUI_PORT=8080
volumes:
- /home/donkey/EmuleVision/Settings/Qbittorrent:/config
- /home/donkey/EmuleVision:/data
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
Aquí, com vaig explicar en el meu post de seguretat, qBittorrent estarà protegit mitjançant VPN, i Gluetun serà qui protegeixi el nostre contenidor. En el meu cas, connectat a un servei de VPN de pagament (té integracions amb NordVPN, Surfshark, etc.). Com que parlem de descarregar fitxers multimèdia, oblida’t de les VPN gratuïtes: a més de ser limitades per raons òbvies, són extremadament insegures.
És important deixar clar que per evitar filtracions d’IP, qBittorrent dependrà absolutament que Gluetun estigui funcional. Si la VPN cau, qBittorrent s’aturarà automàticament. Aquesta és la bellesa del depends_on amb condition: service_healthy. El contenidor ni tan sols s’iniciarà si Gluetun no està llest.
En aquest cas i d’ara endavant, configurarem els permisos i la zona horària (PUID, PGID i TZ) de la mateixa manera. Per això, crea un fitxer .env per a aquests paràmetres.
Exemple bàsic:
PUID=1000
PGID=1000
TZ=Etc/UTC
Per configurar l’aplicació en si, no reinventaré la roda. Enllaçaré el tutorial corresponent de TRaSH Guides per a cada tecnologia:
- Basic-Setup - Configuració bàsica dels paràmetres més comuns.
- Paths - On establir la teva ubicació d’arrel de descàrrega.
- How to add Categories - Com configurar categories per a qBittorrent, i com pots gestionar i organitzar els teus torrents en grups. Les aplicacions Starr poden utilitzar categories en qBittorrent per fer un seguiment de les descàrregues a monitoritzar, en lloc de vigilar cada torrent del teu client.
- Port forwarding - On al teu client de descàrrega hauries d’afegir el port que has reenviat amb el teu Servei VPN.
Prowlarr: El Gestor d’Indexadors
Prowlarr és l’heroi anònim d’aquesta pila. És l’intermediari que connecta el teu Radarr i Sonarr als indexadors de torrents. Pensa-hi com una operadora de centraleta dels anys 50, excepte que en lloc de connectar trucades telefòniques, connecta les teves sol·licituds de descàrrega a llocs de torrents.
prowlarr:
image: ghcr.io/hotio/prowlarr:latest
container_name: prowlarr
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/Prowlarr:/config
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped

Notes el patró aquí? També està darrere de Gluetun. Tot el que toqui la internet pública per a “mètodes d’adquisició alternatius” es queda darrere de la VPN. Sense excepcions.
La configuració de Prowlarr és senzilla:
- Afegeix els teus indexadors (rastrejadors públics o privats)
- Connecta’l a Radarr i Sonarr mitjançant claus API
- Deixa que sincronitzi automàticament
La bellesa és que configures els indexadors una vegada a Prowlarr, i es propaguen a totes les teves aplicacions Arr. No més copiar i enganxar URLs de rastrejadors en cinc interfícies diferents.
Per a una configuració detallada, consulta TRaSH Guides - Prowlarr.
FlareSolverr: L’evasió del Cloudflare
Alguns indexadors es protegeixen amb les mesures anti-bot de Cloudflare. FlareSolverr és un navegador sense capçalera que resol aquests desafiaments automàticament.
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
network_mode: "service:gluetun"
environment:
- TZ=${TZ}
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
El configures una vegada a Prowlarr, i ell s’encarrega de la resta. Quan Prowlarr accedeix a un lloc protegit per Cloudflare, FlareSolverr intervé, resol el repte i retorna els resultats. És com tenir un advocat robot especialitzat en passar guardes de seguretat. La guia és aquí
Sonarr: El gestor de sèries de TV
Sonarr és on passa la màgia per a les sèries de televisió. Supervisa la teva “llista de seguiment”, cerca a Prowlarr nous episodis, els envia a qBittorrent i organitza tot automàticament.
sonarr:
image: ghcr.io/linuxserver/sonarr:latest
container_name: sonarr
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/Sonarr:/config
- /home/donkey/EmuleVision:/data
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped

Punts clau de configuració:
- Carpetes Arrel: Estableix a
/data/media/tv - Client de Descàrrega: Apunta a qBittorrent a
localhost:8080(recorda, comparteixen la mateixa pila de xarxa a través de Gluetun) - Perfils de Qualitat: Utilitza Configuracions de Qualitat de TRaSH Guides per evitar descarregar versions de qualitat basura
Sonarr automàticament:
- Cercarà nous episodis quan s’emetin
- Actualitzarà episodis existents si apareixen versions de millor qualitat
- Reanomenarà fitxers segons l’esquema de noms preferit
- Moureu les descàrregues completades a la teva biblioteca de mitjans utilitzant Hardlinks (recordes aquella publicació?)
Radarr: El gestor de pel·lícules
Radarr és el germà de Sonarr, però per a pel·lícules. La mateixa lògica, tipus de contingut diferent.
radarr:
image: ghcr.io/linuxserver/radarr:latest
container_name: radarr
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/Radarr:/config
- /home/donkey/EmuleVision:/data
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped

La configuració reflecteix la de Sonarr:
- Carpeta Arrel:
/data/media/movies - Client de Descàrrega: qBittorrent a
localhost:8080 - Perfils de Qualitat: TRaSH Guides per a Radarr
La diferència és el tipus de contingut. Radarr fa el seguiment de pel·lícules individuals en lloc de sèries/temporades/episodis. També s’integra perfectament amb serveis com les llistes de Trakt o IMDb si vols automatitzar l’addició de pel·lícules a la teva col·lecció.
Bazarr: L’especialista en subtítols
Recordes quan em vaig queixar de la qualitat basura dels subtítols de Netflix a la primera publicació? Bazarr resol això.
bazarr:
image: ghcr.io/linuxserver/bazarr:latest
container_name: bazarr
restart: unless-stopped
network_mode: "service:gluetun"
environment:
- TZ=${TZ}
- PUID=${PUID}
- PGID=${PGID}
volumes:
- /home/donkey/EmuleVision/media/movies:/movies
- /home/donkey/EmuleVision/media/tv:/tv
- /home/donkey/EmuleVision/Settings/Bazarr:/config
depends_on:
gluetun:
condition: service_healthy

Bazarr automàticament:
- Descarrega subtítols per a les teves pel·lícules i sèries
- Admet múltiples idiomes
- Sincronitza amb OpenSubtitles, Subscene i altres proveïdors
- Pot fins i tot actualitzar subtítols existents si apareixen versions millors
La configuració és senzilla: connecta’l a Sonarr i Radarr mitjançant claus API, selecciona els teus idiomes i proveïdors preferits i deixa’l funcionar. El teu thriller polonès finalment tindrà subtítols en anglès comprensibles.
Kaizoku: El descarregador de manga
Per a aquells que consumeixen més que només pel·lícules i sèries, Kaizoku s’encarrega de l’adquisició de manga.
kaizoku:
image: ghcr.io/oae/kaizoku:latest
container_name: kaizoku
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- KAIZOKU_PORT=3002
volumes:
- /home/donkey/EmuleVision/Settings/Kaizoku:/config
- /home/donkey/EmuleVision:/data
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
Fa el seguiment de sèries de manga, descarrega automàticament nous capítols i els organitza per al teu plaer de lectura. Pensa-hi com a Sonarr, però per a còmics.
Overseerr: El gestor de sol·licituds
Aquest és el component orientat a l’usuari. Overseerr és amb el que interactuen els membres de la teva família quan volen veure alguna cosa.
overseerr:
image: lscr.io/linuxserver/overseerr:latest
container_name: overseerr
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ports:
- "5055:5055"
volumes:
- /home/donkey/EmuleVision/Settings/Overseerr:/config
restart: unless-stopped

Nota alguna cosa diferent? Sense Gluetun. Overseerr no descarrega res. És només una interfície de sol·licituds. La teva dona vol veure Gossip Girl? Obre Overseerr, ho cerca, fa clic a “Sol·licitar”, i Sonarr s’encarrega de la resta.
Plex: El Frontend de Streaming
Aquí és on tot s’uneix. Plex és el teu servei de streaming personal.
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- VERSION=docker
- PLEX_CLAIM=claim-6DcZ6Chj7tSXYU4n6GS7
network_mode: host
volumes:
- /home/donkey/EmuleVision/Settings/Plex:/config
- /home/donkey/EmuleVision/media/movies:/data/movies
- /home/donkey/EmuleVision/media/tv:/data/tvshows
devices:
- /dev/dri:/dev/dri
restart: unless-stopped

Detalls crítics:
network_mode: host - A diferència dels altres contenidors, Plex necessita accés directe a la xarxa per a la detecció DLNA i el màxim rendiment de streaming. Recordes el diagrama d’arquitectura de l’entrada sobre la VPN? Aquest és el “Grup Net”.
devices: /dev/dri - Això exposa el codificador de maquinari Intel QuickSync al contenidor. Sense això, la transcodificació assassinaria la teva CPU. Amb això, la GPU del teu N100 maneja la transcodificació 4K mentre la CPU fa la migdiada.
PLEX_CLAIM - Aquest token vincula el teu servidor Plex al teu compte de Plex en l’arrencada inicial. L’obtens de plex.tv/claim. Caduca després de 4 minuts, així que genera’l just abans del teu primer
docker compose up.Sense dependència de Gluetun - Plex fa streaming localment. Passar vídeo 4K de 80Mbps a través d’un túnel VPN és una bogeria. Aquest trànsit es queda a la teva xarxa local (LAN), ràpid i net.
Essencials de configuració:
- Habilita l’Acceleració de Maquinari (Intel QuickSync) a Configuració → Transcoder
- Configura les teves biblioteques (
Moviesapuntant a/data/movies,TV Showsapuntant a/data/tvshows) - Configura l’accés remot (Plex ho gestiona automàticament, però pots desactivar-ho per a ús només a la LAN)
- Instal·la l’aplicació de Plex a la teva TV, telèfon, tauleta
La bellesa de Plex sobre les alternatives de codi obert és el poliment. Les aplicacions són natives, ràpides i funcionen perfectament en tots els dispositius imaginables. La teva dona no necessitarà un tutorial per veure Gossip Girl al seu iPad.
Per a una configuració detallada, consulta la documentació oficial de Plex.
La Pila de Suport
Portainer: El Tauler de Control de Docker
Gestionar contenidors via CLI està bé quan estàs configurant les coses. Però quan alguna cosa falla a les 2 de la matinada i necessites reiniciar un servei ràpidament, una interfície web és inestimable.
portainer:
image: portainer/portainer-ce:2.20.2
container_name: portainer
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
- /home/donkey/EmuleVision/Settings/Portainer:/data
ports:
- "9000:9000"
restart: unless-stopped
Portainer et dóna:
- Estat dels contenidors d’un cop d’ull
- Reiniciar/aturar/eliminar amb un clic
- Visualització de registres sense necessitar SSH
- Monitorització de l’ús de recursos
Accedeix-hi a http://la-teva-ip-del-servidor:9000.
Homepage: El Tauler de Control Unificat
Homepage és el teu centre de control de missió. Agrega tots els teus serveis en una única interfície bonica.
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
volumes:
- /home/donkey/EmuleVision/Settings/Homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock
environment:
- HOMEPAGE_ALLOWED_HOSTS=*
ports:
- "3000:3000"
restart: unless-stopped

El configures amb fitxers YAML per mostrar:
- Estat dels serveis
- Enllaços ràpids
- Integracions d’API (cua de descàrrega de Sonarr, afegits recents de Jellyfin)
- Estadístiques del sistema
Això es converteix en la teva pàgina d’inici preferida. No més memoritzar quin servei està en quin port.
Scrutiny: El Monitor de Salut dels Discs
Recordes aquell SSD de 512GB en què confiem? Necessitem monitoritzar la seva salut.
scrutiny:
image: ghcr.io/analogj/scrutiny:master-omnibus
container_name: scrutiny
cap_add:
- SYS_RAWIO
devices:
- /dev/sda:/dev/sda
volumes:
- /run/udev:/run/udev:ro
- /home/donkey/EmuleVision/Settings/Scrutiny:/opt/scrutiny/config
- /home/donkey/EmuleVision/Settings/Scrutiny/influxdb:/opt/scrutiny/influxdb
ports:
- "8086:8080"
restart: unless-stopped

Scrutiny llegeix les dades S.M.A.R.T. del teu disc i t’alertarà si detecta degradació. Els SSD no fallen gradualment; fallen sobtadament. Això et dóna un avís abans d’una pèrdua de dades catastròfica.
FileBrowser: El Gestor de Fitxers Web
A vegades necessites accedir als fitxers directament sense fer SSH o muntar un recurs compartit Samba.
filebrowser:
image: filebrowser/filebrowser:latest
container_name: filebrowser
environment:
- PUID=${PUID}
- PGID=${PGID}
volumes:
- /home/donkey/EmuleVision/Settings/Filebrowser/filebrowser.db:/database.db
- /home/donkey/EmuleVision/Settings/Filebrowser/.filebrowser.json:/.filebrowser.json
- /home/donkey/EmuleVision:/srv
ports:
- "8082:80"
restart: unless-stopped
FileBrowser proporciona:
- Gestió de fitxers basada en web
- Capacitats de pujada/baixada
- Controls de permisos d’usuari
- Enllaços per compartir fitxers
Útil per a aquelles rares vegades en què necessites afegir un fitxer manualment o comprovar alguna cosa sense accés al terminal.
Kavita i Calibre-Web: La pila de lectura
Per als entusiastes dels llibres:
kavita:
image: jvmilazz0/kavita:latest
container_name: kavita
environment:
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/Kavita:/kavita/config
- /home/donkey/EmuleVision/media/manga:/manga
- /home/donkey/EmuleVision/media/comics:/comics
ports:
- "5000:5000"
restart: unless-stopped
calibre-web:
image: lscr.io/linuxserver/calibre-web:latest
container_name: calibre-web
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/CalibreWeb:/config
- /home/donkey/EmuleVision/books:/books
ports:
- "8083:8083"
restart: unless-stopped
- Kavita: Per a manga i còmics (fitxers CBZ/CBR)
- Calibre-Web: Per a llibres electrònics (EPUB, MOBI, PDF)

Tots dos ofereixen interfícies de lectura basades en web amb seguiment del progrés, gestió de metadades i suport per a aplicacions mòbils.
El Docker Compose complet
Aquí és com tot encaixa. Fixa’t en la segregació de xarxa entre el grup VPN (Gluetun + els clients de descàrrega) i el grup net (Jellyfin, Overseerr, etc.):
version: '3'
services:
gluetun:
image: qmcgaw/gluetun
container_name: gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
- "8080:8080" # Qbittorrent
- "9696:9696" # Prowlarr
- "8191:8191" # Flaresolverr
- "8989:8989" # Sonarr
- "7878:7878" # Radarr
- "3002:3002" # Kaizoku
- "6881:6881" # Port Torrent
- "6881:6881/udp"
- "6767:6767" # Bazarr
- "8090:8090"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- VPN_SERVICE_PROVIDER=custom
- VPN_TYPE=openvpn
- OPENVPN_USER=${VPN_USER}
- OPENVPN_PASSWORD=${VPN_PASS}
- OPENVPN_CUSTOM_CONFIG=/gluetun/custom.conf
- FIREWALL_VPN_INPUT_PORTS=6881
- BLOCK_MALICIOUS=no
- BLOCK_ADS=no
- BLOCK_SURVEILLANCE=no
- FIREWALL_INPUT_PORTS=8080,9696,8191,8989,7878,3002,6767,8090
volumes:
- ./Settings/Gluetun:/gluetun
restart: always
healthcheck:
test: ["CMD-SHELL", "ping -c 1 1.1.1.1 || ping -c 1 8.8.8.8 || ping -c 1 9.9.9.9 || exit 1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 20s
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- WEBUI_PORT=8080
volumes:
- /home/donkey/EmuleVision/Settings/Qbittorrent:/config
- /home/donkey/EmuleVision:/data
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
prowlarr:
image: ghcr.io/hotio/prowlarr:latest
container_name: prowlarr
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/Prowlarr:/config
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
network_mode: "service:gluetun"
environment:
- TZ=${TZ}
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
sonarr:
image: ghcr.io/linuxserver/sonarr:latest
container_name: sonarr
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/Sonarr:/config
- /home/donkey/EmuleVision:/data
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
radarr:
image: ghcr.io/linuxserver/radarr:latest
container_name: radarr
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/Radarr:/config
- /home/donkey/EmuleVision:/data
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
bazarr:
image: ghcr.io/linuxserver/bazarr:latest
container_name: bazarr
restart: unless-stopped
network_mode: "service:gluetun"
environment:
- TZ=${TZ}
- PUID=${PUID}
- PGID=${PGID}
volumes:
- /home/donkey/EmuleVision/media/movies:/movies
- /home/donkey/EmuleVision/media/tv:/tv
- /home/donkey/EmuleVision/Settings/Bazarr:/config
depends_on:
gluetun:
condition: service_healthy
kaizoku:
image: ghcr.io/oae/kaizoku:latest
container_name: kaizoku
network_mode: "service:gluetun"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- KAIZOKU_PORT=3002
volumes:
- /home/donkey/EmuleVision/Settings/Kaizoku:/config
- /home/donkey/EmuleVision:/data
depends_on:
gluetun:
condition: service_healthy
restart: unless-stopped
overseerr:
image: lscr.io/linuxserver/overseerr:latest
container_name: overseerr
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ports:
- "5055:5055"
volumes:
- /home/donkey/EmuleVision/Settings/Overseerr:/config
restart: unless-stopped
adguardhome:
image: adguard/adguardhome
container_name: adguardhome
ports:
- "53:53/tcp"
- "53:53/udp"
- "3001:3000"
volumes:
- /home/donkey/EmuleVision/Settings/AdGuard/work:/opt/adguardhome/work
- /home/donkey/EmuleVision/Settings/AdGuard/conf:/opt/adguardhome/conf
restart: unless-stopped
calibre-web:
image: lscr.io/linuxserver/calibre-web:latest
container_name: calibre-web
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/CalibreWeb:/config
- /home/donkey/EmuleVision/books:/books
ports:
- "8083:8083"
restart: unless-stopped
kavita:
image: jvmilazz0/kavita:latest
container_name: kavita
environment:
- TZ=${TZ}
volumes:
- /home/donkey/EmuleVision/Settings/Kavita:/kavita/config
- /home/donkey/EmuleVision/media/manga:/manga
- /home/donkey/EmuleVision/media/comics:/comics
ports:
- "5000:5000"
restart: unless-stopped
filebrowser:
image: filebrowser/filebrowser:latest
container_name: filebrowser
environment:
- PUID=${PUID}
- PGID=${PGID}
volumes:
- /home/donkey/EmuleVision/Settings/Filebrowser/filebrowser.db:/database.db
- /home/donkey/EmuleVision/Settings/Filebrowser/.filebrowser.json:/.filebrowser.json
- /home/donkey/EmuleVision:/srv
ports:
- "8082:80"
restart: unless-stopped
portainer:
image: portainer/portainer-ce:2.20.2
container_name: portainer
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
- /home/donkey/EmuleVision/Settings/Portainer:/data
ports:
- "9000:9000"
restart: unless-stopped
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
volumes:
- /home/donkey/EmuleVision/Settings/Homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock
environment:
- HOMEPAGE_ALLOWED_HOSTS=*
ports:
- "3000:3000"
restart: unless-stopped
scrutiny:
image: ghcr.io/analogj/scrutiny:master-omnibus
container_name: scrutiny
cap_add:
- SYS_RAWIO
devices:
- /dev/sda:/dev/sda
volumes:
- /run/udev:/run/udev:ro
- /home/donkey/EmuleVision/Settings/Scrutiny:/opt/scrutiny/config
- /home/donkey/EmuleVision/Settings/Scrutiny/influxdb:/opt/scrutiny/influxdb
ports:
- "8086:8080"
restart: unless-stopped
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- VERSION=docker
- PLEX_CLAIM=
network_mode: host
volumes:
- /home/donkey/EmuleVision/Settings/Plex:/config
- /home/donkey/EmuleVision/media/movies:/data/movies
- /home/donkey/EmuleVision/media/tv:/data/tvshows
devices:
- /dev/dri:/dev/dri
Llista de comprovació del primer arrencada
Després d’executar docker compose up -d, aquesta és la teva seqüència d’inici:
Espera que Gluetun s’inicii - Comprova els registres:
docker logs gluetun- Busca “VPN connection successful”
- Verifica la IP:
docker exec gluetun curl ifconfig.me
Configura Prowlarr (port 9696)
- Afegeix indexadors
- Connecta amb Sonarr/Radarr mitjançant claus API
- Prova FlareSolverr si utilitzes indexadors protegits
Configura qBittorrent (port 8080)
- Canvia la contrasenya per defecte
- Estableix la ruta de descàrrega:
/data/downloads/torrents - Afegeix categories:
tv,movies - Segueix les Guies TRaSH
Configura Sonarr (port 8989)
- Afegeix Prowlarr com a indexador
- Afegeix qBittorrent com a client de descàrrega (localhost:8080)
- Estableix la carpeta arrel:
/data/media/tv - Importa perfils de qualitat de les Guies TRaSH
Configura Radarr (port 7878)
- Igual que Sonarr, però amb carpeta arrel:
/data/media/movies
- Igual que Sonarr, però amb carpeta arrel:
Configura Bazarr (port 6767)
- Connecta amb Sonarr/Radarr
- Afegeix proveïdors de subtítols (OpenSubtitles, Subscene)
- Estableix els idiomes preferits
Configura Jellyfin (port 8096)
- Afegeix biblioteques: Pel·lícules (
/data/movies), Sèries de TV (/data/tvshows) - Habilita l’acceleració per maquinari (Intel QuickSync)
- Crea comptes d’usuari
- Afegeix biblioteques: Pel·lícules (
Configura Overseerr (port 5055)
- Connecta amb Jellyfin
- Connecta amb Sonarr/Radarr
- Habilita les sol·licituds dels usuaris
Consells d’optimització de rendiment
Gestió d’emmagatzematge
Com que estem treballant amb un SSD de 512GB, la gestió de l’espai és crítica:
- Habilita l’eliminació automàtica a Sonarr/Radarr després de X dies
- Estableix límits de qualitat - No descarreguis remuxos de 80GB a menys que realment els necessitis
- Monitoritza l’ús del disc mitjançant Homepage o Scrutiny
- Neteja periòdica - Elimina contingut vist que no tornaras a veure
Optimització de xarxa
- Reenviament de ports - Reenvia el port 6881 a la teva VPN per maximitzar les velocitats de descàrrega
- WiFi de 5GHz per a la TV Box - Com es va comentar a l’entrada sobre maquinari, WiFi AC > Ethernet de 100Mbps per a streaming 4K
- Reproducció Directa en lloc de Transcodificació - Configura els clients de Jellyfin perquè suportin els teus formats de fitxer de manera nativa
Enduriment de seguretat
- Canvia totes les contrasenyes per defecte
- Deshabilita l’accés remot a menys que sigui absolutament necessari
- Manté les credencials VPN de Gluetun a .env - Mai les codifiquis directament
- Actualitzacions regulars - Executa
docker compose pull && docker compose up -dmensualment
Resolució de problemes comuns
“qBittorrent no s’inicia”
- Comprova els registres de Gluetun:
docker logs gluetun - Verifica les credencials VPN a
.env - Assegura’t que la comprovació d’estat passa:
docker inspect gluetun | grep Health
“Sonarr/Radarr no pot arribar a qBittorrent”
- Comparteixen la xarxa de Gluetun, utilitza
localhost:8080 - No utilitzis noms de contenidor o IPs
- Comprova les regles del tallafocs a la configuració de Gluetun
“La transcodificació de Jellyfin és lenta”
- Verifica que l’acceleració per maquinari estigui habilitada
- Comprova que
/dev/driestigui muntat correctament - Instal·la intel-media-va-driver-non-free a l’amfitrió
“Els subtítols no es descarreguen”
- Comprova els registres de Bazarr per problemes amb els proveïdors
- Verifica que les claus API siguin correctes
- Alguns proveïdors limiten la freqüència; espera i torna-ho a provar
“Els Hardlinks no funcionen”
- Tots els contenidors han de mapejar el mateix volum arrel (
/data) - Les descàrregues i el contingut han d’estar al mateix sistema de fitxers
- Comprova la propietat dels fitxers (PUID/PGID)
Què ve ara?
Ara tenim un servidor domèstic completament funcional que rivalitza amb qualsevol servei de streaming. Però això és només la base. En entrades futures, cobriré:
- Automatització avançada: Scripts personalitzats per a eliminació, notificacions i manteniment
- Accés remot: Exposar el teu servidor de manera segura mitjançant Tailscale o Cloudflare Tunnels
- Optimització 4K: Mapeig de tons HDR, perfils de qualitat específics i gestió d’amplada de banda
- Estratègies de còpia de seguretat: Protegint la teva configuració i contingut
- Gestió multi-usuari: Biblioteques separades, restriccions de visualització i quotes d’amplada de banda
- Integració amb Trakt/IMDb: Sincronització automàtica de llistes de seguiment
- Personalització avançada de Jellyfin: Connectors, temes i configuracions específiques per client
La bellesa d’aquest sistema és que és modular. Pots afegir o eliminar serveis segons sigui necessari. No t’importa el manga? Elimina Kaizoku. Vols afegir gestió de música? Afegeix Lidarr. L’arquitectura escala amb les teves necessitats.
Has transformat un mini PC barat en una infraestructura de nivell empresarial. Has pres el control del teu consum de contingut allunyant-te de les corporacions que et cobren més per menys. I has après els fonaments de la contenidorització, xarxes i arquitectura de sistemes pel camí.

El servidor està construït. La pila està completa. Ara endavant i adquireix (legalment, és clar) el contingut que realment vols veure.
Ens veiem a la propera entrada.