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