diff --git a/.gitignore b/.gitignore index 4b5f84f..72a7cec 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,6 @@ /pia-shared !/pia-shared/.gitkeep /letsencrypt -!/letsencrypt/.gitkeep \ No newline at end of file +!/letsencrypt/.gitkeep +/jellyfin +!/jellyfin/.gitkeep \ No newline at end of file diff --git a/CONFIGURATION.md b/CONFIGURATION.md index d7affe8..f82b6a7 100644 --- a/CONFIGURATION.md +++ b/CONFIGURATION.md @@ -94,6 +94,20 @@ The web UI login page can be disabled on for the local network in Settings > Web 172.17.0.0/16 ``` +## Jellyfin + +To enable [hardware transcoding](https://jellyfin.org/docs/general/administration/hardware-acceleration/), +depending on your system, you may need to update the following block: + +``` +devices: + - /dev/dri/renderD128:/dev/dri/renderD128 + - /dev/dri/card0:/dev/dri/card0 +``` + +Generally, running Docker on Linux you will want to use VA-API, but the exact mount paths may differ depending on your +hardware. + ## Heimdall Applications can be added in Items > Add. The URLs should be the static IP, ie: `http://192.168.0.10/` for Sonarr diff --git a/INSTALL.md b/INSTALL.md index 2508055..4b3aa82 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,8 +3,9 @@ ## Requirements Any Docker-capable recent Linux box. -I am using a fresh Ubuntu Server 20.04 on a repurposed laptop so this guide reflects it, -but it would probably work with other distributions and different versions with a few tweaks. +I am using a fresh Ubuntu Server 22.04 on a repurposed laptop so this guide reflects it, +but it would probably work with other distributions and different versions with a few tweaks. +I also tested this setup on a Synology DS220+ with DSM 7.0. ## Pre-Docker Steps @@ -14,7 +15,7 @@ If not done during installation, install OpenSSH server for remote connection: ` ### Static IP -Set a static IP: +Set a static IP, assuming `192.168.0.10` and using Google DNS servers: `sudo nano /etc//netplan/00-installer-config.yaml` @@ -32,7 +33,7 @@ network: version: 2 ``` -Here, `192.168.0.10` is going to be the static IP, and we will use Google's DNS servers. Apply the plan: +Apply the plan: `sudo netplan apply` @@ -61,12 +62,16 @@ copy `/usr/libexec/docker/cli-plugins` rather than `$HOME/.docker/cli-plugins/do You may then run the applications with `sudo docker compose up -d` -Then, to update the Sonarr/Radarr/Prowlarr base path, please run `./update-config.sh`. -This is only needed for the first time, and will update their `config.xml` file to set the correct path. +Then, to update the Sonarr/Radarr/Prowlarr/Jellyfin base paths, please run `./update-config.sh`. +This is only needed for the first time as it will update the application's configuration files to use the proper URL. -## NFS Share +## NFS Share (Optional) + +It is now time to share the folders to other local devices using NFS, as it is easy to set up and fast. + +This can be useful to share the media folder to a local player like Kodi or computers in the local network, +but may not be necessary if Jellyfin is going to be used to access the media. -It is now time to share the folders to other local devices using NFS, as it is easy to set up and fast. Install the NFS kernel server: `sudo apt-get install nfs-kernel-server` diff --git a/README.md b/README.md index 2cdf2ad..0db76e9 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ The following applications are available: - [qBittorrent](https://www.qbittorrent.org/): Bittorrent client with a complete web UI - [PIA Wireguard VPN](https://github.com/thrnz/docker-wireguard-pia): Encapsulate qBittorrent traffic in [PIA](https://www.privateinternetaccess.com/) using [Wireguard](https://www.wireguard.com/) with port forwarding. +- [Jellyfin](https://jellyfin.org/): Media server designed to organize, manage, and share digital media files to networked devices - [Heimdall](https://heimdall.site/): Application dashboard - [Traefik](https://traefik.io/): Reverse proxy - [Watchtower](https://containrrr.dev/watchtower/): Automated Docker images update @@ -38,6 +39,7 @@ See [configuration](./CONFIGURATION.md). | Prowlarr | [linuxserver/prowlarr:develop](https://hub.docker.com/r/linuxserver/prowlarr) | /prowlarr | `develop` tag as it is not stable yet | | PIA Wireguard VPN | [thrnz/docker-wireguard-pia](https://hub.docker.com/r/thrnz/docker-wireguard-pia) | | | | qBittorrent | [linuxserver/qbittorrent:4.5.0-libtorrentv1](https://hub.docker.com/r/linuxserver/qbittorrent) | /qbittorrent | Uses VPN network
Using Libtorrent 1.x | +| Jellyfin | [linuxserver/jellyfin](https://hub.docker.com/r/linuxserver/jellyfin) | /jellyfin | | | Heimdall | [linuxserver/heimdall](https://hub.docker.com/r/linuxserver/heimdall) | / | | | Traefik | [traefik](https://hub.docker.com/_/traefik) | | | | Watchtower | [watchtower](https://hub.docker.com/r/containrrr/watchtower) | | | @@ -53,7 +55,6 @@ benefit from: - [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr): Proxy server to bypass Cloudflare protection, useful for some indexers in Prowlarr - [Jackett](https://github.com/Jackett/Jackett): API Support for your favorite torrent trackers, as a Prowlarr replacement -- [Plex](https://www.plex.tv/): Plex Media Server - [Pi-hole](https://pi-hole.net/): DNS that blocks ads - Expose services with CloudFlare Tunnel if Tailscale is not enough - you tell me! diff --git a/docker-compose.yml b/docker-compose.yml index b5954dc..26ee663 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -135,6 +135,31 @@ services: labels: # network mode is not supported: https://github.com/containrrr/watchtower/issues/1286#issuecomment-1214291660 - com.centurylinklabs.watchtower.enable=false + jellyfin: + image: lscr.io/linuxserver/jellyfin + container_name: jellyfin + environment: + - PUID=${USER_ID} + - PGID=${GROUP_ID} + - TZ=${TIMEZONE} + - JELLYFIN_PublishedServerUrl=${HOSTNAME}/jellyfin + volumes: + - ./jellyfin:/config + - ${DATA_ROOT}:/data + ports: + - "7359:7359/udp" + - "1900:1900/udp" + devices: + - /dev/dri/renderD128:/dev/dri/renderD128 + - /dev/dri/card0:/dev/dri/card0 + restart: always + labels: + - traefik.enable=true + - traefik.http.routers.jellyfin.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/jellyfin`) || PathPrefix(`/jellyfin`)) + - traefik.http.routers.jellyfin.tls=true + - traefik.http.routers.jellyfin.tls.certresolver=myresolver + - traefik.http.services.jellyfin.loadbalancer.server.port=8096 + - traefik.http.services.jellyfin.loadbalancer.passhostheader=true heimdall: image: lscr.io/linuxserver/heimdall container_name: heimdall diff --git a/jellyfin/.gitkeep b/jellyfin/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/update-config.sh b/update-config.sh index b5a5a3d..cb575ef 100755 --- a/update-config.sh +++ b/update-config.sh @@ -23,5 +23,12 @@ do done sed -i.bak "s/<\/UrlBase>/\/prowlarr<\/UrlBase>/" ./prowlarr/config.xml && rm ./prowlarr/config.xml.bak +echo "Updating Jellyfin configuration..." +until [ -f ./jellyfin/network.xml ] +do + sleep 5 +done +sed -i.bak "s//\/jellyfin<\/BaseUrl>/" ./jellyfin/network.xml && rm ./jellyfin/network.xml.bak + echo "Restarting containers..." -docker compose restart radarr sonarr prowlarr +docker compose restart radarr sonarr prowlarr jellyfin