this post was submitted on 18 Jun 2026
87 points (93.9% liked)

Selfhosted

59999 readers
525 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam.

  3. Posts here are to be centered around self-hosting. Please ensure it is clear in your post how it relates to self-hosting.

  4. Don't duplicate the full text of your blog or git here. Just post the link for folks to click.

  5. Submission headline should match the article title.

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 3 years ago
MODERATORS
 

If anyone else is having issues setting these up, message me and I will zip the whole build to you and walk you through setup.

UPDATE:

So I've made some major progress but still have a persistent issue. Radarr, sonarr, and lidarr are set to rename files, rename folders, and move them to the root directory. Even after importing the media the do not do that. I have both the boxes for renaming ticked, I have hard links turned off, they all have permissions for all the directories involved, and they have the media available in the program. If anyone knows how to fix this I'd love the help. I literally did all of this because I don't want to manually rename 1600 files into a consistent scheme and Radarr apparently doesn't want to either.

I used yams.media to do the full install. It was incredibly easy to use for most of the installation and setup. The Mullvad wireguard setup was a pain. The VPN part of yams specifically says to follow the instructions to the letter but the link it gives is a 404. The mullvad.md it was supposed to take me to was just "TLDR" and two code boxes with no explanation. I managed to bungle my way through with some knowledge from past attempts and the yams VPN test says I'm in Switzerland and my client is ready to go.

Yams wouldn't let me set the directories I needed (it wants one directory for everything and I'm sorting them into different mounted drives) but it was actually remarkably easy to copy the yams config folders into my preferred directory and the yaml file directly into portainer to create a portainer stack running everything I needed. I even learned how to use the env and "advanced env input" in portainer to correct all the variable sections instead of writing all of them myself. All in all, it was exactly what I was wanting to do when I posted the TLDR.

~~Tl;dr: I understand docker is supposed to help get things running on different systems easily, can someone give me a copy of their working Arr stack?~~

Frustrated venting I'm past being new to this server thing having run mine for over a year so I guess I can officially say I'm just bad at it. I've been working on getting Sonarr, Radarr, and, lidarr running since 4 in the afternoon, discounting dinner that's 6 hours of constantly failing to get these to work. This is my 5th time trying since I learned about it in April.

I've given up on the automatic downloads, I've given up on the request system, I'm even done with the torrenting, I'll just do that on my phone. All I want is something that format my 5TB of media to Title (date) instead of MOVIE_TITLE_ALL_UNDERSCORE, or TB_1000, or movie.videoformat.year.special.deluxe.username.host.visit.my.site.please. I was sold on this idea that self hosting was a relatively easy thing that anyone can get into and while I have a good understanding of how a config.yml is supposed to look and work, and I've got a decent understanding of ssh and sftp between two computers, but trying to grt any one of these things to run is soul crushing. I literally work in the foster system and my worst cases do not give me the stress this does. I just want to get it fixed so I can watch Pokemon with my family and offer it to people who will never bother to log on.

~~Edit: OMFG I moved them back into individual folders and they work now. 6 hours of videos and tutorials and not a single thing saying they absolutely have to be in their own folders or it won't work.~~ edit unclear, brain stuck in toaster

Edit 2: turns out, Radarr can't find movies at /movies/movie.mkv and needs /movies/folder/movie.mkv. Now Radarr can import movies but all other problems persist.

top 50 comments
sorted by: hot top controversial new old
[–] iltg@sh.itjust.works 3 points 17 hours ago (2 children)

just joining in on the misery. arr-s overpromise and underdeliver, tried for a month and gave up with just jellyfin and qbittorrent web. jellyfin is ok at masking the atrocious file names and directory structure, bless its soul

[–] motruck@lemmy.zip 2 points 11 hours ago

What did you try to do and how did it under deliver?

[–] Postmortal_Pop@lemmy.world 2 points 16 hours ago

That's what I'll be doing if I can't make it do the Renames. I just can't handle seeing all that extra nonsense in the name files.

[–] fervent_apathy@anarchist.nexus 3 points 23 hours ago (2 children)

Yams (Yet another media server) starts you off with a full media arr stack, as well as your client of choice, torrent & nzb clients, and walks you through connecting all the pieces.

It also has built in methods for setting up a VPN tunnel for your torrents, which is definitely recommended. After running through the setup, you'll end up with a compose file, and full docker media server stack. (I think even music arr client is included, but its been a long time since I set this up).

[–] Postmortal_Pop@lemmy.world 1 points 16 hours ago

So I actually used it to set everything up last night and it did actually work all the way through, 9/10 easy. My only issue was that it expected a file structure that didn't jive with the goblin tech I'm using for my server.

That said, it was surprisingly easy to modify the entire stack and copy it into portainer. I'm still working my way through the setup, but so far it's smooth sailing.

[–] TrippinMallard@lemmy.ml 1 points 19 hours ago* (last edited 19 hours ago) (1 children)

Does it also use VPN network for arr containers? So their torrent queries are also through VPN?

[–] Postmortal_Pop@lemmy.world 1 points 16 hours ago

Not oc but just used it myself. It makes a gluten network in docker for the torrenting. It doesn't run the others through it but you can modify the yaml to make the change yourself. If you want yams entirely it has a custom yaml that you can modify and a default that gets reset with every update. Modify the custom to change the network for the other arrs. Also, if I understand the system correctly, you only need to put prowler in the box with qbittorrrent. When using prowlarr, the arrs just say "hey I don't have a thing" to prowlarr and prowlarr specifically finds the torrent and delivers it to qbit to download.

[–] Syndication@lemmy.today 30 points 2 days ago (4 children)

I am really glad to read stuff like this. Not because I like seeing someone struggle, but rather it makes me feel less alone that I am not the only one getting frustrated with things that seemingly work perfectly for everyone else that I run into every error/obstacle in the book lol. If I post for help in online forums like Lemmy, the replies make me feel so stupid and sometimes the replies are even condescending, which is extremely demotivational at times and makes me not want to ever ask to get it fixed. But eventually I get there and say screw all that and keep on going till it works. I'm happy you posted this and got your problem fixed my friend.

Also extremely relatable with the media server that friends and family refuse to use while paying like $30 a month on stupid subscriptions lmao

[–] Alfredolin@sopuli.xyz 2 points 1 day ago

Hahaha so true. At least the struggling part. I spent a lot of time before getting my things running smoothly, but hei I was a full beginner. It 's not that I don't dare too ask, it's just that usually I try hard to find a solution before asking and mostly get it working. But yeah, that's many hours of setup.

Last paragraph: definitely.

[–] Postmortal_Pop@lemmy.world 4 points 1 day ago

I get this feeling hard. You're comment 3 out of 11 that I woke up to, comment one sent me to yet another guide to read and comment 2 congradulated me for getting it working. That's on me for not classifying at midnight on a work night that the only thing I fixed was Radarr can now find the movies. Everything else is still broken.

Everyone talks about docker being an easy way to share things around, I'd assume it'd be easier to zip a working installation and send it my way than to find a guide I haven't read.

Considering all of them are supposed to integrate with each other they're relatively hard to integrate. I find it rather astounding they haven't figured out service discovery.

[–] irmadlad@lemmy.world 2 points 1 day ago

We're rowing the same boat

[–] the_shwa@programming.dev 20 points 1 day ago (2 children)

Here is my docker-compose.yml file with sensitive info scrubbed, its been working for me for a few years now. It sounds like the problem you are having is not with Docker but something in your configuration once the container is running. Feel free to message me if you have questions.

services:
  gluetun:
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    image: qmcgaw/gluetun:v3
    devices:
      - /dev/net/tun:/dev/net/tun
    environment:
      - VPN_SERVICE_PROVIDER=
      - VPN_TYPE=
      - WIREGUARD_PRIVATE_KEY=
      - WIREGUARD_ADDRESSES=
      - SERVER_COUNTRIES=
      - DNS_ADDRESS=
      - HTTP_CONTROL_SERVER_ADDRESS=
      - HTTPPROXY_LISTENING_ADDRESS=
      - TZ=America/New_York
    ports:
      - 3129:3129/tcp # HTTP proxy
      - 8388:8388/tcp # Shadowsocks
      - 8388:8388/udp # Shadowsocks
      - 9047:9047 # Gluten http_control
      - 9046:9046 # qbittorent webui
      - 9696:9696 # Prowlarr
      - 7878:7878 # Radarr
      - 8989:8989 # Sonarr
      - 8686:8686 # Lidarr
    volumes:
      - /etc/localtime:/etc/localtime:ro
    restart: 'unless-stopped'

  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:5.1.4
    container_name: qbittorrent
    network_mode: "service:gluetun"
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
      - WEBUI_PORT=9046
    volumes:
      - /mnt/drive/volumes/qbittorrent/data:/config
      - /mnt/nas/Downloads:/downloads
    depends_on:
      - gluetun

  prowlarr:
    container_name: prowlarr
    network_mode: "service:gluetun"
    image: ghcr.io/hotio/prowlarr:latest
    volumes:
      - /mnt/drive/volumes/prowlarr/config:/config
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - gluetun
    restart: 'unless-stopped'

  byparr:
    container_name: byparr
    image: ghcr.io/thephaseless/byparr:latest
    network_mode: "service:gluetun"
    init: true
    depends_on:
      - gluetun
    restart: 'unless-stopped'

  radarr:
    container_name: radarr
    network_mode: "service:gluetun"
    image: ghcr.io/hotio/radarr:latest
    volumes:
      - /mnt/drive/volumes/radarr/config:/config
      - /mnt/movies:/mnt/Movies
      - /mnt/nas/Downloads:/downloads
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - gluetun

  sonarr:
    container_name: sonarr
    network_mode: "service:gluetun"
    image: ghcr.io/hotio/sonarr:latest
    volumes:
      - /mnt/drive/volumes/sonarr/config:/config
      - /mnt/nas/TV:/mnt/TV
      - /mnt/nas/Downloads:/downloads
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - gluetun
    restart: 'unless-stopped'

  lidarr:
    container_name: lidarr
    network_mode: "service:gluetun"
    image: ghcr.io/hotio/lidarr:pr-plugins
    volumes:
      - /mnt/drive/volumes/lidarr/config:/config
      - /mnt/nas/Music:/mnt/Music
      - /mnt/nas/Downloads:/downloads
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - gluetun
    restart: 'unless-stopped'
[–] archy@lemmy.world 1 points 12 hours ago* (last edited 12 hours ago)

Isn't passing arrs traffic through the VPN NOT recommended? What are the advantages of that? I don't have byparr in my stack but do have flaresolverr. I haven't had issues (besides Cloudflare changing the backend). Wondering whether I should pass arrs through the tunnel as well

[–] Reannlegge@lemmy.ca 4 points 1 day ago (1 children)

Cool I have different docker-compose.yml files for each service did not even think to put them in one.

[–] the_shwa@programming.dev 2 points 1 day ago (2 children)

I think they have to be for the gluetun(vpn container) dependency, but I could be mistaken. It does make it easier to docker compose up -d and have the whole stack startup.

[–] GreatRam@lemmy.world 7 points 1 day ago

They dont. I have gluetun and qbittorrent in one docker compose and the starrs in a separate docker compose.

[–] Reannlegge@lemmy.ca 2 points 1 day ago (1 children)

I use wireguard so I wouldn’t know.

[–] the_shwa@programming.dev 1 points 1 day ago

So do I, I'm just using it in gluetun so that I can pass all the traffic from this stack of containers in this yaml file through it and not other traffic. Gluetun is a pretty cool project, it made it easy too setup a connection to mullvad. https://github.com/passteque/gluetun

[–] rangber@lemmy.zip 22 points 2 days ago* (last edited 2 days ago) (1 children)

The joy of struggle and learning! You learned 6 hours worth of what doesn't work.

[–] irmadlad@lemmy.world 6 points 1 day ago

This is literally how I learn. Read, Do, Fuck It Up, ad nauseam until I get it right, and then write that shit down.

[–] Drigo@sopuli.xyz 7 points 1 day ago (1 children)

I'm currently in my research phase, before I begin setting up my are stack. But I found this video, and it seems like it's just the thing you're looking for:

Ultimate automated media server 2026

In the description, he has this link to his GitHub for automated setup with all Docker containers needed etc https://github.com/loponai/arrstack

He also has a newer video on the area stack, haven't watched it myself yet

[–] Postmortal_Pop@lemmy.world 3 points 1 day ago

I have watched this one, automation avenue is actually the one that got me the furthest before wireguard and gluten stumbled me. I haven't checked the new one though.

[–] plantsmakemehappy@lemmy.zip 7 points 1 day ago (4 children)
load more comments (4 replies)
[–] LincolnsDogFido@lemmy.zip 2 points 1 day ago

This may or may not help, but I went through the exact same sort of struggles that you did when I first started. Setting up all this was my first forray into Linux and learning about permissions and file systems was a hurdle but having conquered that my primary issues were always caused by one of the following:

  • file path mapping
  • permissions
  • port routing in gluetun
  • gluetun/mullvad incompatibilities

Now that I actually seem to have a handle on all this....mind you, I'm no expert, but I can walk people through it in plain english. I eventually ended up switching to Proton VPN and use cloudflare tunnels to access my services from outside the network.

[–] Zwuzelmaus@feddit.org 10 points 2 days ago

What a wonderful rant!

[–] SavinDWhales@lemmy.world 6 points 2 days ago (1 children)

Not exactly your use case, but maybe someone will find it useful:

I really like https://compose.ajnart.dev/ - the creator of homarr (a dashboard with a lot of integrations) build a tool for creating docker compose files.

You can configure what services you'd like to run or use a predefined template (e.g. "the dad" with Jellyfin, Nextcloud, Pihole, Homarr and Home Assistant).

You'd still have to understand what you are doing, of course.

[–] Postmortal_Pop@lemmy.world 3 points 1 day ago

I'm down for something that makes the compose for me. I already get that part but it would be nice to not have to copy, paste, and fill my template each time.

Since it's mentioned and this is a general suggestion, if you're looking at Home Assistant, understand that the Docker version and the OS version are different and all of the videos don't warn you about that. If you use the Docker version you have to manually install all the plugins where the OS has an app store. I didn't know and all I wanted it for was chore-ops.

[–] lka1988@lemmy.dbzer0.com 3 points 1 day ago* (last edited 1 day ago)

Here's mine. I have separate stacks for media players (Plex, JF) and downloaders (sabnzbd, qbittorrent), so I added their networks to the config. I also chose to mount the volumes directly in the YAML instead of the VM's fstab, I found it plays a bit nicer that way. None of this is exposed to the internet. And I need to reconfigure the *seerrs, since Jellyseerr and Overseerr merged into one project...

volumes:
  movies:
    driver_opts:
      type: nfs
      o: addr=192.168.1.175,nolock,soft,nfsvers=4
      device: :/Movies
  tvshows:
    driver_opts:
      type: nfs
      o: addr=192.168.1.175,nolock,soft,nfsvers=4
      device: :/TV_Shows
  music:
    driver_opts:
      type: nfs
      o: addr=192.168.1.175,nolock,soft,nfsvers=4
      device: :/Music
  torrents:
    driver_opts:
      type: nfs
      o: addr=192.168.1.175,nolock,soft,nfsvers=4
      device: :/Torrents
  prerolls:
    driver_opts:
      type: nfs
      o: addr=192.168.1.175,nolock,soft,nfsvers=4
      device: :/Plex_prerolls
  books:
    driver_opts:
      type: nfs
      o: addr=192.168.1.175,nolock,soft,nfsvers=4
      device: :/Books
  downloads:
    driver_opts:
      type: nfs
      o: addr=192.168.1.175,nolock,soft,nfsvers=4
      device: :/Downloads
services:
  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /var/lib/docker/volumes/sonarr_config:/config
      - tvshows:/TV_Shows
      - torrents:/Torrents
      - downloads:/Downloads
    ports:
      - 8989:8989
    networks:
      - plex_default
      - downloaders_default
  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /var/lib/docker/volumes/radarr_config:/config
      - movies:/Movies
      - torrents:/Torrents
      - downloads:/Downloads
    ports:
      - 7878:7878
    networks:
      - plex_default
      - downloaders_default
  lidarr:
    image: lscr.io/linuxserver/lidarr:latest
    container_name: lidarr
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /var/lib/docker/volumes/lidarr_config:/config
      - music:/Music
      - torrents:/Torrents
      - downloads:/Downloads
    ports:
      - 8686:8686
    networks:
      - plex_default
      - downloaders_default
  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /var/lib/docker/volumes/bazarr_config:/config
      - movies:/Movies
      - tvshows:/TV_Shows
    ports:
      - 6767:6767
    restart: unless-stopped
    networks:
      - downloaders_default
      - plex_default
  overseerr:
    image: lscr.io/linuxserver/overseerr:latest
    container_name: overseerr
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /var/lib/docker/volumes/overseerr_config:/config
    ports:
      - 5055:5055
    networks:
      - plex_default
      - downloaders_default
  jellyseerr:
    image: fallenbagel/jellyseerr:latest
    container_name: jellyseerr
    environment:
      - LOG_LEVEL=debug
      - TZ=Etc/UTC
      - PORT=5055
    ports:
      - 5056:5055
    volumes:
      - /var/lib/docker/volumes/jellyseerr_config:/app/config
    healthcheck:
      test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status
        || exit 1
      start_period: 20s
      timeout: 3s
      interval: 15s
      retries: 3
    restart: unless-stopped
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /var/lib/docker/volumes/prowlarr_config:/config
    ports:
      - 9696:9696
    networks:
      - plex_default
      - downloaders_default
networks:
  plex_default:
    external: true
  downloaders_default:
    external: true
[–] ITGuyLevi@programming.dev 3 points 2 days ago (1 children)

Late to the party but congrats on getting them up! Might I also suggest bazarr (https://github.com/morpheus65535/bazarr) so you don't have to find subtitles manually.

[–] Postmortal_Pop@lemmy.world 3 points 1 day ago

I have that one too, it's the only one that never gives me trouble. The rest are still broken as shit but atleast Radarr can find the movies now.

[–] Nibodhika@lemmy.world 5 points 2 days ago (4 children)

Glad you solved it yourself, but I'm still struggling to understand what happened, how did you have them all in a single folder if the filename for docker compose has to be one of a few predetermined things? I mean, you could have them all in a single file, which makes some things easier, but then you wouldn't have been able to move them into individual folders. Would you mind explaining what happened there so that if someone else in the future has the same issue they might find the solution here?

Also, note that even if someone had given you an example of a working docker file you would still have to configure the service. For future reference, this site is great and has working examples of docker compose files for a lot of services, e.g. https://hub.docker.com/r/linuxserver/radarr

Finally, welcome to the club, sorry you had a bad experience the first time, it's hard for us to know what's obvious and what isn't: https://xkcd.com/2501/

[–] tyler@programming.dev 8 points 2 days ago (8 children)

I’m very confused what it was that they moved into individual folders. And also configuring the naming of movies and shows is done in radarr and sonarr, not in docker compose.

I highly recommend Trash Guides for configuring these services. https://trash-guides.info/

load more comments (8 replies)
load more comments (3 replies)
[–] unbuckled_easily933@lemmy.ml 2 points 1 day ago (1 children)

Yams.media is a script with an easy to follow guide that will hold your hand through the entire setup. All you need to do afterwards is import your existing media using radarr/sonarr.

[–] Postmortal_Pop@lemmy.world 2 points 1 day ago (1 children)

Ok, so let me get this straight before I jump in. This is basically a prepackaged install wizard for docker, Arr stuff, torrent client, VPN, and jellyfin? I don't need to install a different OS because it runs on Ubuntu server.

The one hang up I found is the same thing I didn't understand using the trash guide, migrating gluten to wireguard for Mullvad. Could you or anyone that's reading this parse this info for me and tell me how to double check if it worked?

https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/mullvad.md

[–] unbuckled_easily933@lemmy.ml 2 points 1 day ago

There’s a guide for switching to Wireguard. Yams also includes a command:

yams check-vpn

that tells you if the VPN is working.

Not sure if that directly answers your question but there are a lot of step-by-step guides on the site and the author has also answered a lot of user questions on the message board.

load more comments
view more: next ›