The complete guide to building your personal self hosted server for streaming and ad-blocking.

Captain’s note: This OC was originally posted in reddit but its quality makes me wants to ensure a copy survices in lemmy as well.


We will setup the following applications in this guide:

  • Docker
  • AdguardHome - Adblocker for all your devices
  • Jellyfin/Plex - For watching the content you download
  • Qbittorrent - Torrent downloader
  • Jackett - Torrent indexers provider
  • Flaresolverr - For auto solving captcha in some of the indexers
  • Sonarr - *arr service for automatically downloading TV shows
  • Radarr - *arr service for movies
  • Readarr - *arr service for (audio)books
  • lidarr - *arr service for music
  • Bazarr - Automatically downloads subtitles for Sonarr and Radarr
  • Ombi/Overseer - For requesting movies and tv shows through Sonarr and Radarr
  • Heimdall - Dashboard for all the services so you don’t need to remember all the ports

Once you are done, your dashboard will look something like this.

Heimdall Dashboard

I started building my setup after reading this guide https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/.

Hardware

You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.

Hardware

Operating system

I will be using Ubuntu server in this guide. You can select whatever linux distro you prefer.

Download ubuntu server from https://ubuntu.com/download/server. Create a bootable USB drive using rufus or any other software(I prefer ventoy). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “Install OpenSSH server”. Don’t install docker during the setup as the snap version is installed.

Once installation finishes you can now reboot and connect to your machine remotely using ssh.

ssh username@server-ip 
# username you selected during installation
# Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.

Create the directories for audiobooks, books, movies, music and tv.

I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.

We will be using hardlinks so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the trash-guides to have a better understanding.

mkdir ~/server
mkdir ~/server/media # Media directory
mkdir ~/server/torrents # Torrents

# Creating the directories for torrents
cd ~/server/torrents
mkdir audiobooks  books  incomplete  movies  music  tv 

cd ~/server/media
mkdir audiobooks  books  movies  music  tv

Installing docker and docker-compose

Docker https://docs.docker.com/engine/install/ubuntu/

# install packages to allow apt to use a repository over HTTPS
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
# Add Docker’s official GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Setup the repository
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# Add user to the docker group to run docker commands without requiring root
sudo usermod -aG docker $(whoami) 

Sign out by typing exit in the console and then ssh back in

Docker compose https://docs.docker.com/compose/install/

# Download the current stable release of Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Apply executable permissions to the binary
sudo chmod +x /usr/local/bin/docker-compose

Creating the compose file for Adguard home

First setup Adguard home in a new compose file.

Docker compose uses a yml file. All of the files contain version and services object.

Create a directory for keeping the compose files.

mkdir ~/server/compose
mkdir ~/server/compose/adguard-home
vi ~/server/compose/adguard-home/docker-compose.yml

Save the following content to the docker-compose.yml file. You can see here what each port does.

version: '3.3'
services:
    run:
        container_name: adguardhome
        restart: unless-stopped
        volumes:
            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'
            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'
        ports:
            - '53:53/tcp'
            - '53:53/udp'
            - '67:67/udp'
            - '68:68/udp'
            - '68:68/tcp'
            - '80:80/tcp'
            - '443:443/tcp'
            - '443:443/udp'
            - '3000:3000/tcp'
        image: adguard/adguardhome

Save the file and start the container using the following command.

docker-compose up -d

Open up the Adguard home setup on YOUR_SERVER_IP:3000.

Enable the default filter list from filters→DNS blocklist. You can then add custom filters.

Filters

Creating the compose file for media-server

Jackett

Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.

There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.

jackett:
    container_name: jackett
    image: linuxserver/jackett
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/jackett:/config'
      - '/home/${USER}/server/torrents:/downloads'
    ports:
      - '9117:9117'
    restart: unless-stopped
prowlarr:
		container_name: prowlarr
    image: 'hotio/prowlarr:testing'
    ports:
      - '9696:9696'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/prowlarr:/config'
    restart: unless-stopped

Sonarr - TV

Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.

sonarr:
    container_name: sonarr
    image: linuxserver/sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    ports:
      - '8989:8989'
    volumes:
      - '/home/${USER}/server/configs/sonarr:/config'
      - '/home/${USER}/server:/data'
    restart: unless-stopped

Radarr - Movies

Sonarr but for movies.

radarr:
    container_name: radarr
    image: linuxserver/radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    ports:
      - '7878:7878'
    volumes:
      - '/home/${USER}/server/configs/radarr:/config'
      - '/home/${USER}/server:/data'
    restart: unless-stopped

Lidarr - Music

lidarr:
    container_name: lidarr
    image: ghcr.io/linuxserver/lidarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/liadarr:/config'
      - '/home/${USER}/server:/data'
    ports:
      - '8686:8686'
    restart: unless-stopped

Readarr - Books and AudioBooks

# Notice the different port for the audiobook container
readarr:
    container_name: readarr
    image: 'hotio/readarr:nightly'
    ports:
      - '8787:8787'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/readarr:/config'
      - '/home/${USER}/server:/data'
    restart: unless-stopped

readarr-audio-books:
    container_name: readarr-audio-books
    image: 'hotio/readarr:nightly'
    ports:
      - '8786:8787'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/readarr-audio-books:/config'
      - '/home/${USER}/server:/data'
    restart: unless-stopped

Bazarr - Subtitles

bazarr:
    container_name: bazarr
    image: ghcr.io/linuxserver/bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/bazarr:/config'
      - '/home/${USER}/server:/data'
    ports:
      - '6767:6767'
    restart: unless-stopped

Jellyfin

I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.

I will talk about the devices section later on.

For the media volume you only need to provide access to the /data/media directory instead of /data as jellyfin doesn’t need to know about the torrents.

jellyfin:
    container_name: jellyfin
    image: ghcr.io/linuxserver/jellyfin
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    ports:
      - '8096:8096'
    devices:
      - '/dev/dri/renderD128:/dev/dri/renderD128'
      - '/dev/dri/card0:/dev/dri/card0'
    volumes:
      - '/home/${USER}/server/configs/jellyfin:/config'
      - '/home/${USER}/server/media:/data/media'
    restart: unless-stopped

plex:
    container_name: plex
    image: ghcr.io/linuxserver/plex
    ports:
      - '32400:32400'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
      - VERSION=docker
    volumes:
      - '/home/${USER}/server/configs/plex:/config'
      - '/home/${USER}/server/media:/data/media'
    devices:
      - '/dev/dri/renderD128:/dev/dri/renderD128'
      - '/dev/dri/card0:/dev/dri/card0'
    restart: unless-stopped

Overseer/Ombi - Requesting Movies and TV shows

I use both. You can use ombi only if you don’t plan to install plex.

ombi:
    container_name: ombi
    image: ghcr.io/linuxserver/ombi
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/ombi:/config'
    ports:
      - '3579:3579'
    restart: unless-stopped

overseerr:
    container_name: overseerr
    image: ghcr.io/linuxserver/overseerr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/overseerr:/config'
    ports:
      - '5055:5055'
    restart: unless-stopped

Qbittorrent - Torrent downloader

I use qflood container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.

Qbittorrent only needs access to torrent directory, and not the complete data directory.

qflood:
    container_name: qflood
    image: hotio/qflood
    ports:
      - "8080:8080"
      - "3005:3000"
    environment:
      - PUID=1000
      - PGID=1000
      - UMASK=002
      - TZ=Asia/Kolkata
      - FLOOD_AUTH=false
    volumes:
      - '/home/${USER}/server/configs/qflood:/config'
      - '/home/${USER}/server/torrents:/data/torrents'
    restart: unless-stopped

Heimdall - Dashboard

There are multiple dashboard applications but I use Heimdall.

heimdall:
    container_name: heimdall
    image: ghcr.io/linuxserver/heimdall
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/heimdall:/config'
    ports:
      - 8090:80
    restart: unless-stopped

Flaresolverr - Solves cloudflare captcha

If your indexers use captcha, you will need flaresolverr for them.

flaresolverr:
    container_name: flaresolverr
    image: 'ghcr.io/flaresolverr/flaresolverr:latest'
    ports:
      - '8191:8191'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    restart: unless-stopped

Transcoding

As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for transcoding. If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.

https://jellyfin.org/docs/general/administration/hardware-acceleration.html Read up this guide to setup hardware acceleration for your gpu.

Generally, the devices are same for intel gpu transcoding.

devices:
      - '/dev/dri/renderD128:/dev/dri/renderD128'
      - '/dev/dri/card0:/dev/dri/card0'

To monitor the gpu usage install intel-gpu-tools

sudo apt install intel-gpu-tools

Now, create a compose file for media server.

mkdir ~/server/compose/media-server
vi ~/server/compose/media-server/docker-compose.yml

And copy all the containers you want to use under services. Remember to add the version string just like adguard home compose file.

Configuring the docker stack

Start the containers using the same command we used to start the adguard home container.

docker-compose up -d

Jackett

Navigate to YOUR_SERVER_IP:9117

Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.

Indexers

Qbittorrent

Navigate to YOUR_SERVER_IP:8080

The default username is admin and password adminadmin. You can change the user and password by going to Tools → Options → WebUI

Change “Default Save Path” in WebUI section to /data/torrents/ and “Keep incomplete torrents in” to /data/torrents/incomplete/

Create categories by right clicking on sidebar under category. Type category as TV and path as tv. Path needs to be same as the folder you created to store your media. Similarly for movies type Movies as category and path as movies. This will enable to automatically move the media to its correct folder.

Sonarr

Navigate to YOUR_SERVER_IP:8989

  • Under “Download Clients” add qbittorrent. Enter the host as YOUR_SERVER_IP port as **8080,** and the username and password you used for qbittorrent. In category type TV (or whatever you selected as category name(not path) on qbittorent). Test the connection and then save.
  • Under indexers, for each indexer you added in Jackett
    • Click on add button
    • Select Torzab
    • Copy the tornzab feed for the indexer from jackett
    • Copy the api key from jackett
    • Select the categories you want
    • Test and save
  • Under general, define the root folder as /data/media/tv

Repeat this process for Radarr, Lidarr and readarr.

Use /data/media/movies as root for Radarr and so on.

The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.

Bazarr

Navigate to YOUR_SERVER_IP:6767

Go to settings and then sonarr. Enter the host as YOUR_SERVER_IP port as 8989. Copy the api key from sonarr settings→general.

Similarly for radarr, enter the host as YOUR_SERVER_IP port as 7878. Copy the api key from radarr settings→general.

Jellyfin

Go to YOUR_SERVER_IP:8096

  • Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from /data/media. Repeat this for movies, tv, music, books and audiobooks.
  • Go to dashboard→playback, and enable transcoding by selecting as VAAPI and enter the device as /dev/dri/renderD128

Monitor GPU usage while playing content using

sudo intel_gpu_top

Heimdall

Navigate to YOUR_SERVER_IP:8090

Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.

Updating docker images

With docker compose updates are very easy.

  • Navigate to the compose file directory ~/server/compose/media-server.
  • Then docker-compose pull to download the latest images.
  • And finally docker-compose up -d to use the latest images.
  • Remove old images by docker system prune -a

What’s next

  • You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.
  • You can read about port forwarding to access your server over the internet.
  • Tiritibambix@lemmy.ml
    link
    fedilink
    English
    arrow-up
    80
    ·
    edit-2
    9 months ago

    This is a freaking great guide. I wish I had this wonderful resource when I started selfhosting. Thanks for this.

    People might also want to have a look at pihole as an alternative to adguard for add blocking. It is awesome.

    I prefer homepage over heimdall. It is more configurable, but less noob friendly.

    Jellyseer is a fork of overseer that integrates very well with jellyfin. Reiveer is promising for discovering and adding content.

    • Moneo@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      9 months ago

      Seconded.

      I found heimdall unreliable and not very lightweight. Considering I essentially just wanted bookmarks it made more sense to switch to an app similar to homepage.

  • spaceaape@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    56
    ·
    9 months ago

    I find Organizrr to be much more comprehensive dashboard. And Lol at running plex just to use overseerr but still streaming with Jelly 😂 just use Jellyseerr, delete plex/over, and save a TON of system resources.

  • Dhs92@programming.dev
    link
    fedilink
    English
    arrow-up
    56
    arrow-down
    1
    ·
    9 months ago

    Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending Prowlarr instead.

  • Norgur@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    38
    arrow-down
    11
    ·
    9 months ago

    Thank you for putting in the effort!

    Yet… I don’t get why using the *Arr stack and Plex is so popular. Plex is annoying as fuck and tries to shill you their paid bullshit at every corner. The Arr stack is buggy and having a separate system for recommendations and requests and for library management is super cumbersome for me. Compare that with Stremio… I could never convince the wife to use Plex with overseer at all. Stremio is super convenient.

    Im just saying this because I spent my weekend getting another Arr stack running after years of absence and noticed that the whole thing is as convoluted and fiddly as ever and that really got me wondering why people just take this as the industry standard for torrenting.

    • db0@lemmy.dbzer0.comOPM
      link
      fedilink
      English
      arrow-up
      36
      ·
      9 months ago

      I’d love to have an effort-thread about Streamio if you’re willing to write one

      • Norgur@discuss.tchncs.de
        link
        fedilink
        English
        arrow-up
        16
        arrow-down
        1
        ·
        9 months ago

        I might just do that when I find the time. It’s way too unknown imho. Yes, it’s not the right choice if you want to keep everything you watched, but for everything you want to watch once and be done with, it’s a better solution in my opinion.

    • ribboo@lemm.ee
      link
      fedilink
      English
      arrow-up
      28
      arrow-down
      3
      ·
      9 months ago

      People keep saying this about Plex, yet I’ve received one pop up about paying them during the last 6 months. That was while I tried to use a pay feature. Not once otherwise.

      There are plenty of apps that I can’t use due to their annoyance when you’re in the free tier. Plex have not bothered me in the least.

      Why am I not using streamio? Well, we have an Apple TV so that’s tough. Might get something else down the line, but I pirate to save money, not to save money on entertainment and spend it on equipment instead.

      • Z4rK@lemmy.world
        link
        fedilink
        English
        arrow-up
        14
        arrow-down
        4
        ·
        edit-2
        9 months ago

        Why I am not using Plex:

        • It kept adding its own menu items / sections to my home screen with its shilled content like some annoying TV streams etc. Ever so often after updates etc it would keep adding it back
        • It phones home
        • Their servers has been hacked at least two times
        • They dealt poorly with the hacks so I don’t trust them to know anything about my content or usage

        Their last hack was the straw for me. I have a lifetime Plex Pass. I still refuse to use Plex anymore.

          • Z4rK@lemmy.world
            link
            fedilink
            English
            arrow-up
            1
            ·
            9 months ago

            From my experience, their communication about the last security breach was slow, lackluster and left me wanting. End result was that I did no longer trust them. In reality I may have been biased and already subconsciously made up my mind about their trustworthiness. Everyone have to make their own opinion and decisions.

            • mint_tamas@lemmy.world
              link
              fedilink
              English
              arrow-up
              2
              ·
              9 months ago

              Are you referring to the one that lastpass blamed their own lean on? Which turned out to be a 5 year old, long fixed CVE?

              • Z4rK@lemmy.world
                link
                fedilink
                English
                arrow-up
                1
                ·
                9 months ago

                lol that’s funny, didn’t know that was the cause for the latest LastPass breach. I just noped tf out of LastPass after that without looking back.

                No I was just referring to their breach in August 2022 where I guess I was annoyed that they didn’t just invalidate/reset everyone’s password immediately. Instead, everyone had to try do to it on their servers, which couldn’t handle the traffic, so then a lot were either unable to reset password, unable to set new one, unable to reclaim server etc.

                Also, when trying to calm us with mentioning everything they didn’t think was affected by the breach, it just made me realize that I’m done letting a company like Plex have all that data available to me.

                Finally, they have to my knowledge still not acknowledged how the breach took place, just that they have taken steps to avoid it in the future.

      • deweydecibel@lemmy.world
        link
        fedilink
        English
        arrow-up
        6
        arrow-down
        1
        ·
        9 months ago

        It’s not just popups, it’s the irrelevant bullshit that clutters up the UI.

        It’s that they’re “pushing”. A lot of people have an inherent dislike of having shit pushed on them, regardless of how extreme or avoidable it is. Plex absolutely pushes their services in the way they design their UI.

        It’s your library, afterall. It’s your computer doing the work, your Internet connection being streamed from, your network it’s running on. It’s not unreasonable to want your library to not be put next to garbage you didn’t put there.

        Also, your kidding yourself if you don’t think Plex is going to get progressively worse and more pushy. They are on a very clear trajectory, it’s just a matter of time.

    • neosheo@beehaw.org
      link
      fedilink
      English
      arrow-up
      13
      ·
      9 months ago

      Arr and stremio serve different purposes. If you just want to watch content yourself then do stremio.

      If you want to keep certain movies yourself and want to supply a streaming service to friends and family then arr is better.

      Arr has ability to watch your content with no internet.

      If your into foss software arr is also way to go

    • Kekin@lemy.lol
      link
      fedilink
      English
      arrow-up
      8
      ·
      9 months ago

      With the Arr stack I like that I can select which torrents I want to download. I don’t know if that’s possible with Stremio?

      Also it doesn’t seem streamio is available for Apple TV. I would give it a try otherwise

    • Facebones@reddthat.com
      link
      fedilink
      English
      arrow-up
      3
      ·
      9 months ago

      I loved XBMC when it was a MC for XB lol. I agree about Plex though. I have to tie into your servers for my own personal use? No thank you!

      • antipiratgruppen@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        1
        ·
        edit-2
        9 months ago

        On AndroidTV, Kodi (formerly XBMC) with the Jellyfin addon (or Jellycon addon if you’re only casting from another client, and don’t need to sync the libraries) is still a much better video player than the Jellyfin app for AndroidTV imo. It’s more versatile regarding video codecs, and so much more customizable. Also, I really like the Arctic Zephyr skin!

    • DrQuint@lemm.ee
      link
      fedilink
      English
      arrow-up
      3
      arrow-down
      1
      ·
      9 months ago

      I wasn’t doing the whole “self host thing”, and just running things as needed, but I still got to a point where I questioned why I needed those for. I basically could do things faster by just manually searching on qBit’s external gui attached to Jackett’s trackers. The extra *arr step just made it more fiddly to setup, and gave me less control on the output.

    • Nioxic@lemmy.dbzer0.com
      link
      fedilink
      English
      arrow-up
      1
      ·
      9 months ago

      Ive been using free plex for years and ive not seen a peep about paying for anything… except on the login screen whomich i rarely see.

      I have a browser shortcut directly to my video content sorted into folders.

    • Tau@sopuli.xyz
      link
      fedilink
      English
      arrow-up
      1
      ·
      9 months ago

      Because if you are using Stremio (without Debris) sometimes you have to wait a long time for it to download the torrent and sometimes it doesn’t even load. I use Stremio when I want to watch the first episode of something and if I decide I want to watch the rest I add it trough Sonarr

  • neosheo@beehaw.org
    link
    fedilink
    English
    arrow-up
    26
    ·
    9 months ago

    Nice. Just want to point out that there is jellyseerr for jellyfin as an alternative to overseerr.

    There is also reiverr which is new which allows managing sonarr,radarr, and jellyfin (basically it providers an interface to watch jellyfin content and also add episodes and movies to sonarr/radarr. I use reiverr for me as admin but it doesnt do requests as of now so i keep jellyseerr for my users

    There is also watchtower on docker that automatically updates your images

    And finally there is rdt-client (real-debrid torrent client) which is a real debrid client that pretends to be qbittorrent and allows sonarr/radarr to download from real debrid instead of torrenting it

    • db0@lemmy.dbzer0.comOPM
      link
      fedilink
      English
      arrow-up
      19
      arrow-down
      1
      ·
      9 months ago

      It sounds like you have enough changes to make a new more modern guide ;)

  • bort@feddit.de
    link
    fedilink
    English
    arrow-up
    16
    ·
    edit-2
    9 months ago

    I recommend to use relevativ paths in the compose files. e.g.

      - '/home/${USER}/server/configs/heimdall:/config'
    

    becomes

      - './configs/heimdall:/config'
    

    you may want to add “:ro” to configs while you are at it.


    also I like to put my service in /srv/ instead of home.


    also I don’t see anything about https/ssl. I recommend adding a section for letsencrypt.


    when services rely on each other, it’s a good idea to put them into the same compose file. (on 2nd thought: I am not sure if you already do that? To me it is not clear, if you use 1 big compose file for everything or many small ones. I would prefer to have 1 big one)

    you can use “depends_on” to link services together.


    you should be consistent with conventions between configurations. And you should remove config-properties that serve no purpose.:

    • you don’t need to specifiy “container_name”, when it would be same name as the service
    • PUID=1000 and PGID=1000 shouldn’t be needed, I think.
    • sometimes you add explicit “:latest” to the version, and sometimes you don’t

    while you are at it, you may want to consider using an .env file where you could move everything that would differ between different deployment. e.g.

    • PUID
    • TZ
    • exposed ports, maybe

    consider using podman instead of docker. The configuration is pretty much identical to docker-syntax. The main difference is, that it doesn’t require a deamon with root privileges.


    you may want to consider to pin version for the containers.

    pro version pinning:

    • no unexpected changes, when you restart the container (e.g. because you accidentally pulled)

    con version pinning:

    • when you DO want to make an update, you have to spent 2 minutes to go to docker hub to find out which version you want.
    • panicnow@lemmy.world
      link
      fedilink
      English
      arrow-up
      8
      ·
      9 months ago

      I so wish someone would make a cleaned up version that uses something like Podman and better conventions. Honestly, it needs to be a wiki like document that is slowly updated, improved and even varied. Because when I look at these comments I lose faith in implementing the original post.

      • clanginator@lemmy.world
        link
        fedilink
        English
        arrow-up
        4
        ·
        9 months ago

        Yes, a wiki is an EXCELLENT idea. IDK if there are any plans to add wiki functionality on Lemme, but man it’d be nice.

      • whofearsthenight@lemm.ee
        link
        fedilink
        English
        arrow-up
        3
        ·
        edit-2
        9 months ago

        Honestly, the original is pretty good, bare bones start up. Most of those comments are recommendations, not show stoppers.

        Like, the suggestion to use lets encrypt is kinda moot if you don’t expose to the outside world. I personally choose to add a VPN (wireguard) and access services from outside of my network through that. OP kinda mentions adding a vpn as well, I do that through gluetun.

        I’ll also take just about any opportunity I can to point out yams.media which got me started using docker for this and you can see how easy it is from this post to add additional services. You can be a real noob and still get a functional server in like 10 minutes.

  • Varixable@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    14
    ·
    9 months ago

    I want to echo thanks for this, because this is such an incredible resource and it’s finally motivated my lazy ass to get to work setting up my server.

    Best community, thanks again for this excellent guide.

  • Knocturnal@lemmy.world
    link
    fedilink
    English
    arrow-up
    11
    ·
    9 months ago

    Wow, this is so detailed.

    I was looking into setting up some stuff because it seems like a fun project to me, but it was very daunting.

    Having it all here definitely helps a lot and gives me motivation to start.

  • iminahurry@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    11
    ·
    9 months ago

    Just a tip, you can do all this even without an array of monitors. In fact, if you’re feeling really adventurous, you can even just use your smartphone with no monitors involved.

  • clericc@feddit.de
    link
    fedilink
    English
    arrow-up
    8
    ·
    9 months ago

    the hyphened “docker-compose” cmd is deprecated and does not receive updates anymore. Use “docker compose” (as in a subcommand of the docker cli) instead. You might docker compose files that the old thing refuses.

    • Blxter@lemmy.zip
      link
      fedilink
      English
      arrow-up
      1
      ·
      5 months ago

      Yup I figured this out yesterday just started trying this guide I was sitting there like am I slow… Where I mess up lmao.

  • nucleative@lemmy.world
    link
    fedilink
    English
    arrow-up
    6
    ·
    edit-2
    9 months ago

    I use minidlna, qbittorrent, qbittorrent-nox on a very old raspberry pi. A 4tb USB hard drive is attached via a powered hub. I can stream 4k Atmos using vlc installed on my “smart” tv. Can’t it be this simple? What’s the reason to dive into docker and plex?

    • Appoxo@lemmy.dbzer0.com
      link
      fedilink
      English
      arrow-up
      6
      ·
      9 months ago

      Docker eases the automated setup.
      Yours surely does work but docker compose is really nice if you want to have multiple types of one thing on the same hardware (like 2 sonarr/radarr for 4K content).
      Simply impossible with regular installs.
      Also while yes it complicates somethings it also makes maintenance so easy with updates than anything else.
      Remove the image and you are only left with files you put in /path/to/folder.
      Remove a conventional program and you’d need to hunt down the files it created somewhere in the file structures like AppData or /opt and other folders.

      • wraith@lemm.ee
        link
        fedilink
        English
        arrow-up
        2
        ·
        9 months ago

        Can you elaborate on why you’d need two instances of radarr/sonarr running at once?

        • bort@feddit.de
          link
          fedilink
          English
          arrow-up
          3
          ·
          edit-2
          9 months ago

          the option to have two instances is nice for maintenance stuff, e.g.

          • you broke your instance and want to migrate to a fresh one
          • you want to try out a new workflow/plugin/fork/version without committing to it

          another benifit of containers:

          • you can do desaster recovery on a single service without affect the other services on the same machine
          • handling incompatable lib-versions becomes trivial. (e.g. two different php versions on the same machine is usually a pain).
          • wraith@lemm.ee
            link
            fedilink
            English
            arrow-up
            2
            ·
            9 months ago

            But they can pull different quality profiles based on your list preferences right? I don’t see why you need one instance for downloading 4k and one for 1080p.

            • rustyj@lemmy.world
              link
              fedilink
              English
              arrow-up
              3
              ·
              edit-2
              9 months ago

              Depends on the setup. Maybe you run everything off a raspberry pi and can’t afford to transcode 4k, so you have a separate 4k library for local users only. I could also see wanting to separate the volumes when you have multiple servers attached to a single NAS.

              IDK, I don’t personally bother with 4k, but I imagine it’s a little more to manage if you’re sharing your media out with friends/family.

            • Appoxo@lemmy.dbzer0.com
              link
              fedilink
              English
              arrow-up
              1
              ·
              9 months ago

              I don’t do it but I read that those are the reason for doing it were having both versions side by side without trumping another and without doing a manual automatic transcode by something like plex/handbrake.
              Or that you would do a separate 4K library so when you share the library with family the fanily will only watch content that fits in the upstream pipe and doesn’t transcode while you could watch crisp 4K content.

    • lemmyvore@feddit.nl
      link
      fedilink
      English
      arrow-up
      1
      ·
      9 months ago

      Plex/Jellyfin is only needed if you need any of its features: remote access, ability to transcode (for reduced bandwidth when remote or when the client device doesn’t support the codec), showing the media as a “library”, search, last watched, ability to fetch information and subtitles about the media, per-user preferences and watch list etc.

      You can also achieve some of these things with local apps like Kodi, Archos Player, BubbleUPnP etc. Or you can just do what you do and play files directly over a file share.

      Docker helps you keep your main system much cleaner and helps with backups and recovering after failures/reinstall/upgrades.

      With Docker the base OS is very basic indeed and just needs some essential things like SSH and Docker installed, so you can use a super reliable OS like Debian stable and not care that it doesn’t have super recent versions of various apps, because you install them from Docker images anyway.

      The OS is not affected by what you install with Docker so it’s very easy to reinstall if needed, and you never have to mess with its packages to get what you want.

      Docker also lets you separate the app files from the persistent files (like configs, preferences, databases etc.) so you can backup the latter separately and preserve them across reinstalls or upgrades of the app.

      Docker also makes it very easy to do things like experiment with a new app, or a new version of an app, or run an app in an environment very unlike your base OS, or get back the exact same environment every time etc. All of these are classic problems when you run apps directly on the OS — if you’ve been doing that for a while you’ve probably run into some issues and know what I mean.