The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker.
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.
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.
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.
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.
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 typeTV
(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.
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.
The code base in reiverr is beautiful and svelte kit is amazing.
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.
FYI Jellyseerr is a fork of Overseerr specifically for Jellyfin
Awesome guide! I will say, Jackett isn't maintained anymore so you should probably be recommending Prowlarr instead.
Jackett GitHub shows activity in the last day, so I'm not sure where you got the idea that it wasn't maintained.
Hm, maybe that was purely for TrueCharts. If so, that's my bad. However, after moving to Prowlarr I'd say it is much nicer and tends to be more reliable for my use case.
From main post
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.
You can use Jellyseer and remove plex entirely. It's a fork of overseer.
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.
I'd love to have an effort-thread about Streamio if you're willing to write one
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.
Thanks for putting this together. I am currently looking to build a self hosted media server and I think you may have just convinced me to go with the build you wrote up
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.
Why I am not using Plex:
Their last hack was the straw for me. I have a lifetime Plex Pass. I still refuse to use Plex anymore.
Curious, when did they handle hack poorly?
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.
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?
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.
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.
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
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
You can select which torrent you use with Stremio
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!
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!
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
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.
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.
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
It sounds like you have enough changes to make a new more modern guide ;)
Definitely saving this for later. Thanks!!!
I recommend to use relevativ paths in the compose files. e.g.
becomes
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.:
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.
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:
con version pinning:
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.
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.
There is a wiki, at least for dbzer0 users. db0 made a post about it in !div0@lemmy.dbzer0.com. Not sure if other servers will implement it, but would be cool to see!
Its up and running.
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.
your yams.media link takes me to an error page. I am curious about it because Docker seems to be the bane of my existence in this setup.
I fixed it (forgot to include https:// in the link so Lemmy treated it like an internal link) but this is basically just a script to setup docker lol.
I actually find the yams much easier to follow. Thank you for this!
I'd encourage you to dig around after you set this up. It's basically setting up a docker compose file, and once you get how docker compose works, it's really, really easy to add your own services. Like if you use usenet, throwing sabnzbd in here is very simple. Or if for some reason you want to run plex and jellyfin at the same time.
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.
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.
Wow. This is great, but man that seems like a lot of points of potential failure. Helpful to have a guide but this remains intimidating to me.
You can use the guide to install just Jellyfin and Qbittorrent.
You'll have to do what the *arr are doing manually — search torrents yourself and track down each episode etc., then add them to Qbittorrent, then transfer the files to where Jellyfin expects them when they're done downloading, look for subtitles etc.
It's not as nice as the *arr setup because it can't "take requests", basically you have to be the one to get the stuff that your friends and family ask for and manage it with Jellyfin... on the other hand it's much faster to get going — and you can always add *arr stuff later, one by one.
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.
But can you do it without a display?
ssh user@192.168.69.420
Access denied.
Wrong password then
But you don't know, because you need a screen to read it.
You don’t need to see the commands to type them
Yes but the result might be worth a read.
Print it on paper!
Depends remoting in with a phone is considered using a display?
Does your phone have a display?
Well yesh but is the phone display not the computer display...
Wow such different display, almost not considered a display.
I'm sorry, it is a display.
Any reason for not using Prowlarr?
Reiverr is able to replace a number of the UIs for those services. https://github.com/aleksilassila/reiverr
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.
Yup I figured this out yesterday just started trying this guide I was sitting there like am I slow... Where I mess up lmao.
And now all of this, but in nixos 🤔
I've never used nixos but with nixos would it be possible to do all that with just the configuration file ?
Yes, without any docker, or with docker if you like
But really the point is not to use docker, you just write an additional configuration file for the service you want. It looks like docker-compose but shorter, and you already have everything preconfigured (db, users, storage, etc)
Docker is not safe if not ran rootless. With nixos you can write a docker-compose-like file for the service to be docker/podman/baremetal/VM/anything
And you can find all the parameters/env variables on https://search.nixos.org/options?channel=23.05&from=0&size=50&sort=relevance&type=packages&query=Nextcloud
This search is for nextcloud, you can not only install the app and specify the login and password, but specify things like installed apps, default files, themes, which reverse proxyto use, and whether use some rules/headers/filtering
Like that nixos is the future, really
It's going to be about as popular as Kubernetes for general use.
Nixos is great but really it has its learning curve.
Docker-Compose is more friendly because all people use it.
I use NixOs and it's beautifull
saving this post
Is there a guide for using something other than Ubuntu? Is TrueNAS a suitable alternative?
You could do it, especially if you're running Truenas Scale since that's Linux. On Core you could do it inside a VM (I have Jellyfin set up inside an Ubuntu VM with persistent samba mounts to access my media).
On Scale the recommended way would probably be through helm charts, though config might look a bit different than the Docker Compose files here. There are charts for I think all the services mentioned: https://truecharts.org/charts/description_list
Personally I'm planning on waiting just a little bit longer for Scale to become more stable and then I'm going to migrate, rather than trying to set up all these services in a VM on my Core machine today.
Yeah this stuff just confuses the shit out of me but I definitely don't want any telemetry on my server and I don't trust canonical anymore. TrueNAS is the one I was planning to use but I'm hoping for something comprehensive.
Why do you distrust Canonical? I'm just dipping my toes into this world for the first time so I don't really know anything about anyone yet.
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?
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.
Can you elaborate on why you’d need two instances of radarr/sonarr running at once?
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:
Literally in the comment...
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.
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.
That is a cool option I hadn’t thought of trying.
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.
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.
Nice guide! However, I've always wondered if all of these even make sense. Like, can't you just stream from the internet? I understand having thing on your physical storage device is an extra degree of freedom but it's very rare for me watching something more then once. Also while you can technically run it off a Raspberry Pi, it's not really recommended and you would need a separate PC which just adds to the cost. Meanwhile, with a simple app like Cloudstream, you can just get whatever you want whenever you want. The only advantage I see of the *arr +media server approach is not needing to connect to a VPN.
EDIT: After reading the replys just realized I should have specified by streaming sites I mean the shady ones, in my country we use different words and I see how that can confuse some people
I used to be in your camp, but then switched to plex setup etc.
Main reasons:
I'm seeing the trend of media being removed from people and I'm getting sick of it. I want my shit to be mine and available to me at a moments notice.
My collection basically exists if all top movies / shows that I can rotate watching.
It makes it so that my tech illiterate family can enjoy everything too without knowing how anything works.
I could cancel all those greedy corporate assholes splitting everything into a thousand services.
not discrediting you, this is just my point of view. Media being removed is in not really a problem on streaming sites since there's usually many where you can watch the same thing, and as for point 4 streaming sites are basically the same.
I guess it's just different usage because I don't really like rewatching things and my family doesn't usually watch movies/TV series.
So in the end the only thing I don't like with how I do it is not being able to physically have the files
EDIT: I just realized I should have specified by streaming sites I mean the shady ones, in my country we use different words
I meant free streaming sites with reuploads, but the other point still stand strong, thanks
The nature of pirating means that specific media/torrents/indexes/domains are frequently down or unavailable. A solution today might be taken down or raided by authorities tomorrow.
It's just a little more stable/redundant to have media stored locally. Plus, by streaming from something like cloud stream, you're not contributing to torrent seeding, not to mention that a turnkey solution is a large target for authorities, so it's possible if not likely that it'll stop working someday and you'll have to find something else.
It's not for everyone certainly, but if you can afford it it's a nice solution.
Either the content will have a lower bitrate or lower resolution.
Personally I just think it's easier to pick out the movies and shows I want to watch, and then be sure that they will be there once I sit down to watch them. No uncertainty, no hunting down a good stream or missing episode, everything is just there and ready. The process is very simple once everything is set up, and you can still delete video files after you watch them if you want to.
It's all about use case. You don't rewatch shows or movies, so maybe storing media isn't for you. I'm often rewatching or just having background stuff playing, so it's nice having it available.
On top of that, I was tired of streaming services removing content. Netflix removing It's Always Sunny actually got me started, and the subsequent removal of episodes from shows confirmed I made the right choice. I actually have control over my media, in that I can put a playlist of any number of shows together I want.
I have playlists for 70's-80's shows like The Brady Bunch, The A-Team, Knight Rider, just hit shuffle and it's 1,000 episodes of random nostalgia. I can set up programs like DizqueTV and set up my own TV channels on top of this. Why pick and choose a show when TV can pick for me?
In regards to "the hardware" I ran my Plex server on a Pi3 for years. Unless you're pushing 4k content or certain filetypes, the Pi is more than enough.
In addition to all this, I'm not reliant on my internet. If power goes out partially, I still have access to my hard drives and have always been able to pop on a show or movie while I clean up in the dark. Or sometimes the internet just goes out and it's really nice being unaffected.
I think it's been 7 or 8 years since I started in college, I've spent about $600 total on hard drives that I'm still using today? The money I've spent is invested into my server, rather than paying some service for something I can do myself. A service that has to submit to the will of the government, I was curious of the price range of Cloudstream and saw that they took the site and code down, so it's just another streaming situation that's no different, except the chance of payment being sent to the actual people who worked on the show is now completely gone. Even just $30/month after 5 years is $1,800.
I pirate content because I can't trust Netflix/Hulu/Disney to not fuck with their content. So why would I pay another 3rd party to do the same thing? Moreover, when I subscribe to these streaming services I can contribute to the metrics to say, "Hey, I want more It's Always Sunny after S14!".
Finally - it's a hobby as well. I like computers. Linux another the shit out of me but I've enjoyed setting up a server used for more than just media. On the Pi I would just search for what I wanted and add it as I see fit. Obviously, there's the *arrs as well which can get it all automated for you. That's a bit of setup on its own, but it's fairly straightforward.
Is all these blocks just.. pasted into the terminal?
Is i really that easy??
No these blocks would be parts of a docker-compose.yml file.
Then you can just run 'docker compose up -d'
Absolutely incredible, thank you for this 🙇🏽♂️
As an FYI to anyone trying this, I ran into the following problems and solved them.
sudo mkdir /etc/systemd/resolved.conf.d sudo touch /etc/systemd/resolved.conf.d/adguardhome.conf sudo nano /etc/systemd/resolved.conf.d/adguardhome.conf #Copy this in and save [Resolve] DNS=127.0.0.1 DNSStubListener=no
#Overwrite with the following. Make sure if your adapter isn''t labeled ens33, you change it appropriately. network: renderer: networkd ethernets: ens33: addresses: - 192.168.1.200/24 nameservers: addresses: [192.168.1.1] routes: - to: default via: 192.168.1.1 version: 2
Hey so I know this is really old but I have been running my adguard home on a raspi for a while now but am trying to move it over to run with everthing else. The only problem is that whenever I set the "DNSStubListener=no" it breaks all the API things for homepage and overseerr/tautuli etc do you know of a way to fix?
Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/
I'd like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer.
Yeah you can. You have to use direct play since rpi is too weak to transcode
Yes, you can use a Pi4 to accomplish the results of this guide, I used a Pi3B+ for a few years without any major issues. However, you will not be able to follow this guide to get it set up, as Pi's are a different architecture and so you need different images for the initial setup regarding Ubuntu. Mostly everything after that will be the same though.
Just keep some spare copies of your setup mirror imaged to another SD card once you're all done and you are golden. Configure your download settings in Sonarr/Radarr to avoid 4k content, that's the only real limitation of the Pi's, outside of the SD card lifespan (solved mostly by just not logging).
@spacecowboy - not being able to write an image will make the Pi4 as a server a biiit more difficult. Do you have an android phone? There's etchdroid or Pi SD Card imager, which materials to use for can cost under $10 (you'd want the SD card reader that can plug into your phones port, for example). It's fleeting otherwise, chances are high that you will get it set up and then the SD card will die and you'd be out of luck regardless.. If the Pi is your only computer for now, then I'd keep it that way. Either way, I do highly suggest some backup SD cards, they are cheap and you rarely need more than 32gb for the operating system and basic usage - anything with heavy logging or storage should be kept on an external hard drive.
While it's possible with an android device, even maybe a library computer with permission for USB devices and temporary downloads would be a good option. It's really nice to be able to get your server all setup and then make a duplicate of the SD card, which I don't believe is possible on android. It's imperative to have a backup since SD cards do have a lifespan, using it as a main server with no backups is putting all your eggs in one basket. All it takes is forgetting to disable logging and the clock starts ticking.
It's also nice to be able to test out different operating systems, as you might find that Buster has more overhead than something like DietPi, a command line based OS, as well as being slightly less straightforward for your needs if the Pi is going to be a headless server. But like I said, if you're using the Pi as a regular computer, DietPi won't be a viable option since it has no GUI.
Thank you for this detailed response. I was able to buy a USB-stick-style SD/mSD reader/writer and a couple of 128gb cards to go with it. I have ubuntu up and running now and a backup as well. I tried following this guide but I keep running into issues around the docker compose part. I think I am in over my head at this point and will just make a local setup the way I know how and try again in the future.
Thanks for the tips about saving my bacon with multiple SD cards.
Yes it is possible, Ive been running simmilar setup on 4 gb model. Raspberry pi is too weak to transcode so you are stuck with direct play - aka you have to download (set in radarr/sonarr) quality that your player supports, but thats easy task for *arr stack.
You can probably use PC in local library, but you might need to bring your SD card reader. Its good to have option to start over if something goes wrong like SD card dying
Thanks for the info! I did end up purchasing a new microSD and USB writer/reader and went to the library, up on Ubuntu now.
I'm working on getting this up and running on my pi 4. If I'm successful, I will post a guide
I am currently too stupid to be able to follow this guide, but I will bookmark it for when I am better educated on how computer do.
Thank you for preserving this resource!
Go follow a basic Linux cli guide for 30 minutes and that's all you need to be able to follow this guide other than potentially googling what certain commands do.
I have a raspberry pi chilling on the desk. I should try this items.
Saving for later, this is the way everyone, try to be more like this legend.
👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏
It's nice to have everything in one place, but that's not a complete guide. For instance, you mention Jellyfin and Plex, but from this text it's impossible to figure out how they work, what's the difference between these two and what should I choose. If you add a bit more context, it'll be a great material!
They are both media servers. Plex is closed source and requires you to make an account with them to use whereas jellyfin is open source and requires no account.
Basically when you set them up you just pick a directory for movies and tv shows and any video files in that directory can be streamed thru the app or web ui
I prefer jellyfin because of the differences i mentioned earlier but i use both (you can point them at the same directories). I haven't really had any issues with jellyfin performance but run plex as a backup.
Plex has plex shares too where you can stream other peoples content from your server. Idk if jellyfin has that feature
Thank you for the reply! That's useful information. I think the guide would be better if it was part of it.
Bookmarked and will try to install on Saturday. Do I need a specific server or can I just do this on my dezktpt?
Anywhere you have docker. I run it on my NAS.
Damn dude, saving this shit! Thanks for writing this up!
Thank you for the guide. What are your thoughts on Jellyseer instead of Overseer? So that we can eliminate the need for Plex in the setup.
I run arr stack and jellyfin server on windows 11. Also use tailscale for remote access
This is a beautiful guide. thank you so much for taking the time!
👍👍
Amazing guide!
This needs to be saved. Thank you good (whatever the fuck we call ourselves lemites, lames, etc....).
I'm partial to users
Lemmings 🐭
Any advice if I want to use a seedbox?
I don't have much advise to give here, but a relevant question is: are you planning on running the services (except for torrent client) locally, or on a dedicated server that's running as the seedbox as well? I think running it all on the seedbox would be the easiest to setup, and, from my understanding, you can pretty much just rent a dedicated server from a provider you trust and follow this guide. Maybe you'll need to change a few things regarding the routing.
Also, explore if any dedi server/seedbox providers provide 1-click solutions for Jellyfin + qBittorrent + *arr etc. That would be easier, if you don't wanna fiddle widdit!
I tried a few days ago but
I couldn’t have docker containers on a separate drive
And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
Did you try again?
I have it running outside of docker; I’ll eventually try again but I had people mad that they couldn’t watch their shows as I migrated from plex
Keep trying please
Can anyone assist with an issue? I get to this part of the guide: > Save the following content to the docker-compose.yml file.
I am not quite sure how to “save” it. I tried the :wq thing and it seemed to work? But then when I tried starting the contaner by inputting >docker-compose up -d
I get >usr/local/bin/docker-compose: line 1: Not: command not found
I’m stuck at this point. Any tips would be appreciated!
Perhaps the manual is a bit outdated. In recent versions of Docker,
docker-compose
is installed as a plugin for thedocker
command. So instead of usingdocker-compose up -d
, try usingdocker compose up -d
(note the white space between "docker" and "compose").That input results this response from the terminal:
no configuration file provided: not found
If you run ls, does the file appear in the list?
It does not
I had to press ZZ (shift-z twice) to save and exit the compose file before running 'docker-conpose up -d'
That brought me back out of the file writing screen but when I run the docker-compose up -d it tells me the same as before, "/usr/local/bin/docker-compose: line 1: Not: command not found"
Double check the code, especially if you copy and pasted anything. Make sure indents use tabs and not spaces. I had a lot of issues like this when copying and pasting compose files.
I started using nano editor (sudo nano docker-compose.yml) instead and never see this issue. Might be worth a try.
I'll need to take a closer look at this later.
Saving
Look into jellyfin + jellyserr
Truenas scale with truecharts makes all this fairly easy to get going. You don't even really need to understand kubernetes all that well. I use traefik for ingress and just set up a bunch of dns aliases so I don't have to remember port numbers
So what I could use is something that hase like phases... phase 1 being just ripping your own to whatever and being able to watch that on your tv... then other bite-sized phases. Some of us have kids lol. We don’t get hours at a time.
I appreciate the effort but the ad-block server does not work for YouTube on smart TVs. For all other applications (pc, android) I already have ad-block or ReVanced that stops ads.
With that, it just doesn't give enough value to dedicate a PC to run Linux for media server. I have Emby running dlna server on my gaming PC, that i can wake up from my phone whenever I need to stream something on my 70" TV in living room.
y'all need to make some guides I think :)
Youtube/Google serves ads from the same domain as video content so obviously DNS blockers do not work.
Can you elaborate on that last part? Waking up with your phone.
Yes, using network apps like Fing to send a Wake-on-lan magic packet to my PC.
Probably WOL (Wake on Lan). You have to enable it in the motherboard and then you can send a magic packet to the PC through the network. On android I use WolOn app by Bitklog to wake my PCs.
There really isn't a single good name in this entire area of software. Just a massive cringefest.
Half of this stuff is like widely loved and open source. What is so cringe
The names of stuff. They're weird to him. That's the issue he's having. Basically a complete lack of self awareness.
Funny coming from the person saying 'cringe.'
I know one or both changed their name and idk if theyre even still around but makes me think of wefwef and mlem for lemmy what cringy fucking names. I know the name isnt a huge deal if the software is good but for one second can we not sound exactly as cringy as a people imagine us lol
Yes, wefwef got the memo and changed its name to Voyager. Maybe it's an age issue - most pirates are young.