this post was submitted on 16 May 2025
1 points (100.0% liked)

Self-Hosted Alternatives to Popular Services

222 readers
1 users here now

A place to share, discuss, discover, assist with, gain assistance for, and critique self-hosted alternatives to our favorite web apps, web...

founded 2 years ago
MODERATORS
 
This is an automated archive made by the Lemmit Bot.

The original was posted on /r/selfhosted by /u/ShuaAlfaro on 2025-05-16 08:41:16+00:00.


First of all, please excuse my English in case anything is off; I'm not a native speaker. While my spoken English is good, my written English is not as good.

Hi, I'd like to show you the setup I'm using for my music, TV, and movie streaming service.

If you have any suggestions or ideas to make it better, I'm all ears. Or if you need any extra info.

BTW: If you want to copy something from here, check the indentations, when copying and pasting to Notepadd++ they sometimes move.

I'm using:

Plex: Media Server

Jellyfin: Media Server

Navidrome: Music Server

Wiregard: VPN

qBittorent: Download Manager

Flaresolverr: Proxy Manager for Prowlarr

Jellyserr: Request Manager for Plex and Jellyfin (In this case, I'm using two instances since Jellyserr doesn't allow multiple accounts, so one for Plex and the other for Jellyfin)

Prowlarr: Indexer Manager for Radarr, Sonarr, and Lidarr

Radarr: Media Manager for movies

Sonarr: Media Manager for TV shows

Lidarr: Media Manager for music

Readarr: Media Manager for books

Bazarr: Subtitle Manager

I have it divided into 4 separate containers for reasons that will be explained below.

I leave the compose files below.

First container is Mediarr: Plex, Jellyfin, Flaresolverr, Jellyserr (Both containers), Prowlarr, Radarr, Sonarr, Lidarr, Readarr, Bazarr.

services:
#Plex
 plex:
  image: lscr.io/linuxserver/plex:latest
  container_name: plex
#  network_mode: host
  environment:
    - PUID=998
    - PGID=100
    - TZ=TZ/TZ
    - VERSION=docker
    - PLEX_CLAIM= claim-sFdA9-TkHWHwRu8rtxxN
    - device=/dev/dri:/dev/dri
  volumes:
    - /patch/to/config:/config
    - /patch/to/media:/Media
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Jellyfin
 jellyfin:
  image: lscr.io/linuxserver/jellyfin:latest
  container_name: jellyfin
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=TZ/TZ
#   - JELLYFIN_PublishedServerUrl=your.domain.com #optional
  volumes:
    - /patch/to/config:/config
    - /patch/to/cache:/cache
    - /patct/to/tv:/data/tvshows
    - /patch/to/movies:/data/movies
    - /patch/to/music:/data/music
  ports:
    - 8096:8096
    - 8920:8920 #optional
    - 7359:7359/udp #optional
    - 1900:1900/udp #optional
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Flaresolverr
 flaresolverr:
  image: ghcr.io/flaresolverr/flaresolverr:latest
  container_name: flaresolverr
  environment:
    - LOG_LEVEL=${LOG_LEVEL:-info}
    - LOG_HTML=${LOG_HTML:-false}
    - CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
    - TZ=TZ/TZ
  ports:
    - 8191:8191
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Jellyserr Jellyfin
 jellyseerr_jelly:
    image: fallenbagel/jellyseerr:latest
    container_name: jellyseerr_jelly
    environment:
      - LOG_LEVEL=debug
      - TZ=TZ/TZ
    ports:
      - 5055:5055
    volumes:
      - /patch/to/config:/app/config
    networks:
      MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
    restart: "unless-stopped"

#Jellyserr Plex
 jellyseerr:
  image: fallenbagel/jellyseerr:latest
  container_name: jellyseerr
  environment:
    - LOG_LEVEL=debug
    - TZ=TZ/TZ
  ports:
    - 5055:5055
  volumes:
    - /Docker/Jellyseerr/config:/app/config
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Bazarr
 bazarr:
  image: lscr.io/linuxserver/bazarr:latest
  container_name: bazarr
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=TZ/TZ
  volumes:
    - /patch/to/config:/config
    - /patch/to/movies:/movies
    - /patct/to/tv:/tv
  ports:
    - 6767:6767
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Prowlarr
 prowlarr:
  image: lscr.io/linuxserver/prowlarr:latest
  container_name: prowlarr
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=TZ/TZ
  volumes:
    - /patch/to/config:/config
  ports:
    - 9696:9696
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Radarr
 radarr:
  image: lscr.io/linuxserver/radarr:latest
  container_name: radarr
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=TZ/TZ
  volumes:
    - /Docker/Mediarr/Radarr/data:/config
    - /srv/dev-disk-by-uuid-B0169C9A169C6360/Media/Peliculas:/movies #optional
    - /srv/dev-disk-by-uuid-B0169C9A169C6360/Media/Downloads:/downloads #optional
  ports:
    - 7878:7878
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Readarr
 readarr:
  image: lscr.io/linuxserver/readarr:develop
  container_name: readarr
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=TZ/TZ
  volumes:
    - /patch/to/config:/config
    - /patch/to/books:/books #optional
    - /patch/to/downloads:/downloads
  ports:
    - 8787:8787
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Sonarr
 sonarr:
  image: lscr.io/linuxserver/sonarr:latest
  container_name: sonarr
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=TZ/TZ
  volumes:
    - /patch/to/config:/config
    - /patct/to/tv:/tv
    - /patch/to/downloads:/downloads #optional
  ports:
    - 8989:8989
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

#Lidarr
 lidarr:
  image: ghcr.io/hotio/lidarr:pr-plugins
  container_name: lidarr
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=TZ/TZ
  volumes:
    - /patch/to/config:/config
    - /patch/to/music:/music
    - /patch/to/downloads:/downloads
  networks:
    MacVlan:
      ipv4_address: xxx.xxx.xxx.xxx
  restart: "unless-stopped"

networks:
    MacVlan:
        external: true

Please note that I am using Lidarr with plugins, if you want to use regular Lidarr you can simply change the link for the image

Second container is Navidrome (I have it in a separate container in case I want to turn off the "Mediarr" container and not be left without music.)

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: Navidrome
    ports:
      - "4533:4533"
    environment:
          - ND_LOGLEVEL=info
          - ND_SCANSCHEDULE=30m
          - ND_SESSIONTIMEOUT=24h
          - TZ=TZ/TZ
          - ND_COVERJPEGQUALITY=100
          - ND_DEFAULTLANGUAGE=en (Put es if youre spanish speaker)
          - ND_LASTFM_APIKEY=xxxxxxxxxx #optional (if youre using lasfm scrobble)
          - ND_LASTFM_SECRET=xxxxxxxxxx #optional (if youre using lasfm scrobble)
          - ND_LASTFM_LANGUAGE=en (Put es if youre spanish speaker)
          - ND_SPOTIFY_ID=xxxxxxxxxx(if youre using spotify for metadata or something else)
          - ND_SPOTIFY_SECRET=xxxxxxxxxx(if youre using spotify for metadata or something else)
          - ND_PORT=4040
    volumes:
          - /patch/to/config:/data
          - /patch/to/music:/music:ro
    networks:
      MacVlan:
        ipv4_address: xxx.xxxx.xxx.xxx
    restart: "unless-stopped"
networks:
    MacVlan:
        external: true

Third container is qBittorrent (Same reason as Navidrome, if I ever turn off "Mediarr" I use qBittorrent for other downloads)

services:
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=TZ/TZ
      - WEBUI_PORT=8080
      - TORRENTING_PORT=6881
    volumes:
      - /patch/to/config:/config
      - /patch/to/downloads:/downloads #optional
    ports:
      - 8080:8080
      - 6881:6881
      - 6881:6881/udp
    networks:
      MacVlan:
        ipv4_address: xxx.xxx.xxx.xxx
    restart: "unless-stopped"
networks:
    MacVlan:
        external: true

Forth container is Wireguard

services:
  wireguard:
    image: ghcr.io/linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=TZ/TZ
      - SERVERURL=your.domain.com #optional
      - SERVERPORT=51820 #optional
      - PEERS=5 #optional
      - PEERDNS=auto #optional (If you're using Pihole, I recommend keeping it set to auto)
Below you can configure Pihole's DNS resolver.)
      - INTERNAL_SUBNET=10.13.13.0 #optional
      - ALLOWEDIPS=0.0.0.0/0 #optional
    volumes:
      - /patch/to/config:/config
      - /patch/to/libraries:/lib/modules
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    dns:
      - xxx.xxx.xxx.xxx (Your pihole ip address)
    restart: "unless-stopped"

There's something special about using Wireguard in my specific case.

I'm using OMV as my primary system, and almost all of my containers are on a MacVLAN network, so the host can't see the MacVLAN containers (and in my specific case, I can't use pihole as my DNS resolver in this setup).

If that's your case, you want to copy the way I did it, or you want your containers on MacVLAN and pihole in "normal mode," you'll need this command in a scheduled task in OMV.

This is so the Host can see the MacVlan containers.

sleep 600; ip link add (a name for the network) link enp0s25 type macvlan  mode bridge && ip addr add (an ip inside your MacVlan container network that is not on use) dev (same name as the other) && ip link set (same name as the other) up && ip route add (ip subnet for the MacVlan network) dev (same name as t...
***
Content cut off. Read original on https://old.reddit.com/r/selfhosted/comments/1knvyck/everything_you_need_for_your_streaming_server/
no comments (yet)
sorted by: hot top controversial new old
there doesn't seem to be anything here