Do you guys have any success with setting up an arr stack with rootless Podman Quadlets? I really like the idea of Quadlets, but I can’t make it work.
Any guide and/or experience sharing would be greatly appreciated.
I have set up a Rocky Linux 10 with Podman 5.4.2 but after downloading the containers the quadlets were crashing.
Shall I continue digging this rabbit hole or shall I switch back to Docker Compose?
Nice, did the move from docker to podman a couple of months ago myself. Now running the arr stack, nextcloud, immich and some other services as quadlets. File permission due to podmans rootless nature usually was the culprit if something was not working properly.
I can share my quadlet systemd files I use for the arr stack. I deployed it as a pod:
[Unit] Description=Arr-stack pod [Pod] PodName=arr-stack # Jellyseerr Port Mapping PublishPort=8055:5055 # Sonarr Port Mapping PublishPort=8089:8989 # Radarr Port Mapping PublishPort=8078:7878 # Prowlarr Port Mapping PublishPort=8096:9696 # Flaresolverr Port Mapping PublishPort=8091:8191 # qBittorrent Port Mapping PublishPort=8080:8080 --- [Unit] Description=Gluetun Container [Container] ContainerName=gluetun EnvironmentFile=global.env EnvironmentFile=gluetun.env Environment=FIREWALL_INPUT_PORTS=8080 Image=docker.io/qmcgaw/gluetun:v3.40.0 Pod=arr-stack.pod AutoUpdate=registry PodmanArgs=--privileged AddCapability=NET_ADMIN AddDevice=/dev/net/tun:/dev/net/tun Volume=%h/container_volumes/gluetun/conf:/gluetun:Z,U Secret=openvpn_user,type=env,target=OPENVPN_USER Secret=openvpn_password,type=env,target=OPENVPN_PASSWORD [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=qBittorrent Container Requires=gluetun.service After=gluetun.service [Container] ContainerName=qbittorrent EnvironmentFile=global.env Environment=WEBUI_PORT=8080 Image=lscr.io/linuxserver/qbittorrent:5.1.2 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 Pod=arr-stack.pod Network=container:gluetun Volume=%h/container_volumes/qbittorrent/conf:/config:Z,U Volume=%h/Downloads/completed:/downloads:z,U Volume=%h/Downloads/incomplete:/incomplete:z,U Volume=%h/Downloads/torrents:/torrents:z,U [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Prowlarr Container Requires=gluetun.service After=gluetun.service [Container] ContainerName=prowlarr EnvironmentFile=global.env Image=lscr.io/linuxserver/prowlarr:2.0.5 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 Pod=arr-stack.pod Network=container:gluetun HealthCmd=["curl","--fail","http://127.0.0.1:9696/prowlarr/ping"] HealthInterval=30s HealthRetries=10 Volume=%h/container_volumes/prowlarr/conf:/config:Z,U [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Flaresolverr Container [Container] ContainerName=flaresolverr EnvironmentFile=global.env Image=ghcr.io/flaresolverr/flaresolverr:v3.4.0 AutoUpdate=registry Pod=arr-stack.pod Network=container:gluetun [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Radarr Container [Container] ContainerName=radarr EnvironmentFile=global.env Image=lscr.io/linuxserver/radarr:5.27.5 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 Pod=arr-stack.pod Network=container:gluetun HealthCmd=["curl","--fail","http://127.0.0.1:7878/radarr/ping"] HealthInterval=30s HealthRetries=10 # Disable SecurityLabels due to SMB share SecurityLabelDisable=true Volume=%h/container_volumes/radarr/conf:/config:Z,U Volume=/mnt/movies:/movies Volume=%h/Downloads/completed/radarr:/downloads:z,U [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Sonarr Container [Container] ContainerName=sonarr EnvironmentFile=global.env Image=lscr.io/linuxserver/sonarr:4.0.15 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 Pod=arr-stack.pod Network=container:gluetun HealthCmd=["curl","--fail","http://127.0.0.1:8989/sonarr/ping"] HealthInterval=30s HealthRetries=10 # Disable SecurityLabels due to SMB share SecurityLabelDisable=true Volume=%h/container_volumes/sonarr/conf:/config:Z,U Volume=/mnt/tv:/tv Volume=%h/Downloads/completed/sonarr:/downloads:z,U [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Jellyseerr Container [Container] ContainerName=jellyseerr EnvironmentFile=global.env Image=docker.io/fallenbagel/jellyseerr:2.7.3 AutoUpdate=registry Pod=arr-stack.pod Network=container:gluetun Volume=%h/container_volumes/jellyseerr/conf:/app/config:Z,U [Service] Restart=always [Install] WantedBy=default.targetI run my podman containers in a VM running Alma Linux. Works pretty great so far.
Had the same issue when debugging systemctl errors, journalctl not being very helpful. At one point I just ran
podman logs -f <container>in another terminal in a while loop just to catch the logs of the application. Not the most sophisticated approach, but it works 😄nice 👌 , this is what I’ve been looking for, out of interest, as you have split all the containers out of the pod now do you have a setup guide for this ? or similar to above showing maybe an examples of the global.env file and network setup ?
do you find Flaresolverr is still a reliable option ? I’ve seen mention of alternatives like Byparr
Sorry didn’t find the time until now to reply. Also in the process of migrating everything to my Kubernetes cluster, so this is not as up to date in regards to image versions as it should be.
This is my current setup, with only qBittorrent and SABnzbd going through the Gluetun VPN container. Everything else just uses my regular home internet:
--- [Unit] Description=Flaresolverr Container [Container] ContainerName=flaresolverr HostName=flaresolverr EnvironmentFile=global.env Image=ghcr.io/flaresolverr/flaresolverr:v3.4.6 AutoUpdate=registry PublishPort=8091:8191 Network=arr-stack.network [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=qBittorrent Container Wants=gluetun.service After=gluetun.service [Container] ContainerName=qbittorrent HostName=qbittorrent EnvironmentFile=global.env Environment=WEBUI_PORT=8080 Image=lscr.io/linuxserver/qbittorrent:5.1.4 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 Network=container:gluetun Volume=%h/container_volumes/qbittorrent/conf:/config:Z,U Volume=%h/Downloads/completed:/downloads:z,U Volume=%h/Downloads/incomplete:/incomplete:z,U Volume=%h/Downloads/torrents:/torrents:z,U Memory=1.5g [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Recyclarr TRaSH Guide Sync Container Wants=radarr.service sonarr.service After=radarr.service sonarr.service [Container] ContainerName=recyclarr HostName=recyclarr EnvironmentFile=global.env Image=ghcr.io/recyclarr/recyclarr:8 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 Network=arr-stack.network Secret=sonarr_api_key,type=env,target=SONARR_API_KEY Secret=radarr_api_key,type=env,target=RADARR_API_KEY Volume=%h/container_volumes/recyclarr/conf:/config:Z,U [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=SABnzbd Container Wants=gluetun.service After=gluetun.service [Container] ContainerName=sabnzbd HostName=sabnzbd Image=lscr.io/linuxserver/sabnzbd:4.5.5 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 Network=container:gluetun EnvironmentFile=global.env Volume=%h/container_volumes/sabnzbd/conf:/config:Z,U Volume=%h/Downloads/sabnzbd/completed:/downloads:z,U Volume=%h/Downloads/sabnzbd/incomplete:/incomplete-downloads:z,U Memory=1.5g [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Sonarr Container After=gluetun.service prowlarr.service Wants=gluetun.service prowlarr.service [Container] ContainerName=sonarr HostName=sonarr EnvironmentFile=global.env Image=lscr.io/linuxserver/sonarr:4.0.17 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 PublishPort=8089:8989 Network=arr-stack.network HealthCmd=["curl","--fail","http://127.0.0.1:8989/sonarr/ping"] HealthInterval=30s HealthRetries=10 SecurityLabelDisable=true Volume=%h/container_volumes/sonarr/conf:/config:Z,U Volume=/mnt/eldanas/tv:/tv Volume=%h/Downloads/completed/sonarr:/downloads:z,U Volume=%h/Downloads/sabnzbd/completed/tv:/downloads-usenet:z,U [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Prowlarr Container Wants=gluetun.service flaresolverr.service After=gluetun.service flaresolverr.service [Container] ContainerName=prowlarr HostName=prowlarr EnvironmentFile=global.env Image=lscr.io/linuxserver/prowlarr:2.3.5 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 PublishPort=8096:9696 Network=arr-stack.network HealthCmd=["curl","--fail","http://127.0.0.1:9696/prowlarr/ping"] HealthInterval=30s HealthRetries=10 Volume=%h/container_volumes/prowlarr/conf:/config:Z,U [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Radarr Container After=gluetun.service prowlarr.service Wants=gluetun.service prowlarr.service [Container] ContainerName=radarr HostName=radarr EnvironmentFile=global.env Image=lscr.io/linuxserver/radarr:6.1.1 AutoUpdate=registry UserNS=keep-id:uid=1000,gid=1000 PublishPort=8078:7878 Network=arr-stack.network HealthCmd=["curl","--fail","http://127.0.0.1:7878/radarr/ping"] HealthInterval=30s HealthRetries=10 SecurityLabelDisable=true Volume=%h/container_volumes/radarr/conf:/config:Z,U Volume=/mnt/eldanas/movies:/movies Volume=%h/Downloads/completed/radarr:/downloads:z,U Volume=%h/Downloads/sabnzbd/completed/movies:/downloads-usenet:z,U [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Gluetun Container [Container] ContainerName=gluetun HostName=gluetun EnvironmentFile=global.env EnvironmentFile=gluetun.env Environment=FIREWALL_INPUT_PORTS=8080 Image=docker.io/qmcgaw/gluetun:v3.41.1 AutoUpdate=registry PodmanArgs=--privileged AddCapability=NET_ADMIN AddDevice=/dev/net/tun:/dev/net/tun PublishPort=8080:8080 # SABnzbd Port Mapping PublishPort=8085:8085 # Gluetun Port Mapping PublishPort=8123:8000 Network=arr-stack.network Volume=%h/container_volumes/gluetun/conf:/gluetun:Z,U Secret=proton_wireguard_private_key,type=env,target=WIREGUARD_PRIVATE_KEY [Service] Restart=always [Install] WantedBy=default.target --- [Unit] Description=Seerr Container After=gluetun.service Wants=gluetun.service [Container] ContainerName=seerr HostName=seerr EnvironmentFile=global.env Image=ghcr.io/seerr-team/seerr:v3.2.0 UserNS=keep-id:uid=1000,gid=1000 AutoUpdate=registry PublishPort=8055:5055 Network=arr-stack.network Volume=%h/container_volumes/seerr/conf:/app/config:Z,U [Service] Restart=always [Install] WantedBy=default.targetThe
global.envfile only contains env variables like TZ or the PUID and PGID which are used in almost all my containers.


