From d641041ea5fa1b7d3cd73364c5e1bd1cc943de28 Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Fri, 28 Nov 2025 17:00:22 -0500 Subject: [PATCH] feat: Initial commit. --- README.md | 3 + compose.yaml | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++ example.env | 5 ++ 3 files changed, 185 insertions(+) create mode 100644 README.md create mode 100644 compose.yaml create mode 100644 example.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..8819759 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Jellyfin + +Self-hosted movies, music, shows, etc. diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..74f94ae --- /dev/null +++ b/compose.yaml @@ -0,0 +1,177 @@ +services: + jellyfin: + image: jellyfin/jellyfin + container_name: jellyfin + user: 1000:1000 + ports: + - 8096:8096/tcp + # - 7359:7359/udp + volumes: + - ./jellyfin-config:/config + - ./jellyfin-cache:/cache + - ${DATA_LOCATION}:/data + restart: 'unless-stopped' + environment: + - TZ=${TIMEZONE} + - /dev/dri:/dev/dri + + gluetun: + image: qmcgaw/gluetun + container_name: gluetun + cap_add: + - NET_ADMIN + devices: + - /dev/net/tun + ports: # Expose qBittorrent's web UI and torrent ports through VPN + # - 8700:8096 # Jellyfin + - 8701:8701 # qBittorrent Web UI + - 6881:6881 # torrent port + - 6881:6881/udp + - 7878:7878 # Radarr + - 8989:8989 # Sonarr + - 8686:8686 # Lidarr + - 6767:6767 # Bazarr + - 9696:9696 # Prowlarr + - 8191:8191 # FlareSolverr + # - 5055:5055 # Jellyseerr + volumes: + - ./gluetun:/gluetun + # - ./gluetun/us-den.conf:/gluetun/wireguard/wg0.conf + environment: + - VPN_TYPE=openvpn + - VPN_SERVICE_PROVIDER=protonvpn + - OPENVPN_USER=${OPENVPN_USER} + - OPENVPN_PASSWORD=${OPENVPN_PASSWORD} + - VPN_PORT_FORWARDING=on + - SERVER_COUNTRIES=United States + - TZ=${TIMEZONE} + qbittorrent: + image: lscr.io/linuxserver/qbittorrent + container_name: qbittorrent + network_mode: "service:gluetun" # Routes all traffic through Gluetun + depends_on: + - gluetun + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIMEZONE} + - WEBUI_PORT=8701 + - WEBUI_ADDRESS=0.0.0.0 + - WEBUI_EXTERNAL_ACCESS=true + volumes: + - ./qbittorrent:/config + - ${DATA_LOCATION}:/data + restart: unless-stopped + + radarr: + image: lscr.io/linuxserver/radarr + container_name: radarr + restart: unless-stopped + network_mode: "service:gluetun" # Routes all traffic through Gluetun + depends_on: + - gluetun + # ports: + # - 7878:7878 + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIMEZONE} + volumes: + - ./radarr:/config + - ${DATA_LOCATION}:/data + + sonarr: + image: lscr.io/linuxserver/sonarr + container_name: sonarr + restart: unless-stopped + network_mode: "service:gluetun" # Routes all traffic through Gluetun + depends_on: + - gluetun + # ports: + # - 8989:8989 + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIMEZONE} + volumes: + - ./sonarr:/config + - ${DATA_LOCATION}:/data + + lidarr: + image: lscr.io/linuxserver/lidarr:latest + container_name: lidarr + network_mode: "service:gluetun" # Routes all traffic through Gluetun + depends_on: + - gluetun + # ports: + # - 8686:8686 + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIMEZONE} + volumes: + - ./lidarr:/config + - ${DATA_LOCATION}:/data + restart: unless-stopped + + bazarr: + image: lscr.io/linuxserver/bazarr + container_name: bazarr + restart: unless-stopped + network_mode: "service:gluetun" # Routes all traffic through Gluetun + depends_on: + - gluetun + # ports: + # - 6767:6767 + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIMEZONE} + volumes: + - ./bazarr:/config + - ${DATA_LOCATION}:/data + + prowlarr: + image: lscr.io/linuxserver/prowlarr + container_name: prowlarr + restart: unless-stopped + network_mode: "service:gluetun" # Routes all traffic through Gluetun + depends_on: + - gluetun + # ports: + # - 9696:9696 + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIMEZONE} + volumes: + - ./prowlarr:/config + + flaresolverr: + image: ghcr.io/flaresolverr/flaresolverr:latest + container_name: flaresolverr + network_mode: "service:gluetun" # Routes all traffic through Gluetun + environment: + - TZ=${TIMEZONE} + depends_on: + - gluetun + # ports: + # - 8191:8191 + restart: unless-stopped + + jellyseerr: + image: fallenbagel/jellyseerr:latest + container_name: jellyseerr + environment: + - TZ=${TIMEZONE} + - LOG_LEVEL=info + ports: + - "5055:5055" + volumes: + - ./jellyseerr:/app/config + restart: unless-stopped + depends_on: + - gluetun + - jellyfin + - sonarr + - radarr diff --git a/example.env b/example.env new file mode 100644 index 0000000..dae1165 --- /dev/null +++ b/example.env @@ -0,0 +1,5 @@ +TIMEZONE="America/New_York" +DATA_LOCATION=/mnt/media + +OPENVPN_USER="fixme" +OPENVPN_PASSWORD="super-secret"