YAHLP
Docker app from auskento's Repository
Overview
YAHLP - Yet Another HomeLab Portal - Complete Master Template
Unified dashboard and reverse proxy for 19 homelab services: USENET (SABnzbd, NZBget, NZBHydra), TORRENTS (Transmission, qBittorrent, Deluge), SEARCH (Prowlarr, Jackett, Sonarr, Radarr, Lidarr, Whisparr), UTILITY (Seerr, Bazarr, Tautulli, Maintainerr), MEDIA (Jellyfin, Plex, Emby).
Features:
- Automatic HTTPS via Let's Encrypt (public mode) or HTTP (private mode)
- 5 responsive layouts: Classic, Modern, Sleek, Minimal, Mobile
- Flexible authentication: Basic Auth, Entra ID, Google OAuth, or none
- Real-time service health monitoring
- Customizable service ordering and theming
For simpler deployments, use specialized templates:
- yahlp-private-none.xml (Private mode, HTTP, no Auth)
- yahlp-public-basic.xml (Public mode, HTTPS, Basic Auth)
- yahlp-public-google.xml (Public mode, HTTPS, Google OAuth)
- yahlp-public-entra.xml (Public mode, HTTPS, Entra ID OAuth)
Documentation: https://github.com/auskento/YAHLP/docs
Media gallery
1 / 3Requirements
Your own domain name with DNS control for Lets Encrypt certificate generation
Settings here are saved to yahlp.json5 on first run and are then overrides - if they exist, they take precedence over the config file
Related apps
Explore more like this
Explore allDetails
Runtime arguments
- Web UI
https://[IP]:[PORT:443]/- Network
bridge- Shell
bash- Privileged
- false
Template configuration
HTTP
- Target
- 80
- Default
- 80
- Value
- 80
HTTPS
- Target
- 443
- Default
- 443
- Value
- 443
Server IP for private mode (e.g., 192.168.1.100)
- Target
- IP
public=subdomain-based routing with OAuth support (HTTPS via Let's Encrypt); private=folder-based routing with basic auth (HTTP on internal network)
- Target
- ACCESS_MODE
- Default
- public|private
- Value
- public
Your domain for public mode (e.g., yahlp.yourdomain.com)
- Target
- DOMAIN
Email for Let's Encrypt notifications (public mode only)
- Target
Let's Encrypt --dry-run mode (test without rate limits). WARNING: Certificates will NOT be issued. Set to false when ready for production.
- Target
- DASHBOARD_TEST
- Default
- true|false
- Value
- true
Displayed in browser title and dashboard
- Target
- DASHBOARD_NAME
- Default
- YAHLP
- Value
- YAHLP
Choose: classic, modern, sleek, minimal (If you have added custom templates you can add them here)
- Target
- DASHBOARD_STYLE
- Default
- modern
- Value
- modern
Hex color for dashboard UI accents and highlights for default templates (e.g., #00A99D, #FF5733). Leave blank for default theme color
- Target
- DASHBOARD_COLOR
Set the default landing page when accessing dashboard (e.g., sonarr, radarr, radarr/upcoming, seerr). Leave blank to show service grid
- Target
- DASHBOARD_LANDING
SAB - SABnzbd, GET - NZBGet, HYD - NZBHydra, TRA - Transmission, QBI - qBittorrent, DEL - Deluge, PRO - Prowlarr, JAC - Jackett, SON - Sonarr, RAD - Radarr, LID - Lidarr, WHI - Whisparr, SEE - Seerr, BAZ - Bazarr, TAU - Tautulli, MNT - Maintainerr, JEL - Jellyfin, PLX - Plex, EMB - Emby
- Target
- DASHBOARD_ORDER
- Default
- SAB,GET,HYD,TRA,QBI,DEL,PRO,JAC,SON,RAD,LID,WHI,SEE,BAZ,TAU,MNT,JEL,PLX,EMB
- Value
- SAB,GET,HYD,TRA,QBI,DEL,PRO,JAC,SON,RAD,LID,WHI,SEE,BAZ,TAU,MNT,JEL,PLX,EMB
TPB - The Pirate Bay, FIL - FileList.io, HDB - HDBits, IPT - IP Torrents, 1337 - 1337x, YTS - YTS, LAT - LimeTorrents, NYA - Nyaa, PTP - PassThePopcorn, DOG - DOGnzb, DRS - DrunkenSlug, NLF - nzb.life, NFW - NZBFinder.ws, NGK - NZBgeek, PLA - nzbplanet.net, TAB - Tabula Rasa (Additional sites enabled in the sites.json5 file)
- Target
- DASHBOARD_SITES
Jackett, Seerr, Emby and Plex do not play nice in frames, they'll either open in a new tab or popout window based on this setting
- Target
- DASHBOARD_WINDOWS
- Default
- popout|newtab
- Value
- popout
Choose: none, basic, google, entra
- Target
- AUTHTYPE
- Default
- none|basic|google|entra
- Value
- none
Format: user:pass or user1:pass1|user2:pass2
- Target
- BASIC_AUTH_CREDENTIALS
From Entra App
- Target
- ENTRA_CLIENT_ID
From Entra App
- Target
- ENTRA_CLIENT_SECRET
Your Azure Tenant ID
- Target
- ENTRA_TENANT_ID
OAuth callback URL - configure in Azure Portal. For public mode with OAuth, set to your domain's OAuth callback path
- Target
- ENTRA_REDIRECT_URI
- Default
- https://yourdomain.com/oauth2/callback
- Value
- https://yourdomain.com/oauth2/callback
Encryption passphrase for Entra
- Target
- ENTRA_CRYPTO_PASSPHRASE
Entra OpenID metadata URL
- Target
- ENTRA_PROVIDER_METADATA_URL
- Default
- https://login.microsoftonline.com/<YOUR TENANT ID>/v2.0/.well-known/openid-configuration
- Value
- https://login.microsoftonline.com/<YOUR TENANT ID>/v2.0/.well-known/openid-configuration
From Google Cloud Console - your URI should be set to your Dashboard Domain
- Target
- GOOGLE_CLIENT_ID
From Google Cloud Console
- Target
- GOOGLE_CLIENT_SECRET
SABnzbd - Usenet Client (Config - Special - url_base() to /sabnzbd)
- Target
- SABNZBD_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for SABnzbd service (usually http://sabnzbd:8080)
- Target
- SABNZBD_URL
- Default
- http://sabnzbd:8080
- Value
- http://sabnzbd:8080
NZBGet - Usenet Client (Set User and Pass below to bypass NZBGet auth
- Target
- NZBGET_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for NZBGet service (usually http://nzbget:6789)
- Target
- NZBGET_URL
- Default
- http://nzbget:6789
- Value
- http://nzbget:6789
NZBHydra - Usenet Meta Indexer (Config - Main - URLBase to /nzbhydra)
- Target
- NZBHYDRA_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for NZBHydra service (usually http://nzbhydra:5076)
- Target
- NZBHYDRA_URL
- Default
- http://nzbhydra:5076
- Value
- http://nzbhydra:5076
Transmission - Torrent Client
- Target
- TRANSMISSION_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Transmission service (usually http://transmission:9091)
- Target
- TRANSMISSION_URL
- Default
- http://transmission:9091
- Value
- http://transmission:9091
qBittorrent - Torrent Client
- Target
- QBITTORRENT_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for qBittorrent service (check for port conflicts; default is http://qbittorrent:8080)
- Target
- QBITTORRENT_URL
- Default
- http://qbittorrent:8080
- Value
- http://qbittorrent:8080
Deluge - Torrent Client
- Target
- DELUGE_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Deluge service (usually http://deluge:8112)
- Target
- DELUGE_URL
- Default
- http://deluge:8112
- Value
- http://deluge:8112
Sonarr - TV Show Automation (Settings - General - URL Base to /sonarr)
- Target
- SONARR_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Sonarr service (usually http://sonarr:8989)
- Target
- SONARR_URL
- Default
- http://sonarr:8989
- Value
- http://sonarr:8989
Landing page (e.g., sonarr, sonarr/calendar)
- Target
- SONARR_LANDING
- Default
- sonarr
- Value
- sonarr
Radarr - Movie Automation ((Settings - General - URL Base to /radarr)
- Target
- RADARR_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Radarr service (usually http://radarr:7878)
- Target
- RADARR_URL
- Default
- http://radarr:7878
- Value
- http://radarr:7878
Landing page (e.g., radarr, radarr/calendar)
- Target
- RADARR_LANDING
- Default
- radarr
- Value
- radarr
Whisparr - Adult Content Automation (Settings - General - URL Base to /whisparr)
- Target
- WHISPARR_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Whisparr service (usually http://whisparr:6969)
- Target
- WHISPARR_URL
- Default
- http://whisparr:6969
- Value
- http://whisparr:6969
Landing page for Whisparr (e.g., whisparr, whisparr/calendar). Leave blank for default
- Target
- WHISPARR_LANDING
- Default
- whisparr
- Value
- whisparr
Lidarr - Music Automation (Settings - General - URL Base to to /lidarr)
- Target
- LIDARR_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Lidarr service (usually http://lidarr:8686)
- Target
- LIDARR_URL
- Default
- http://lidarr:8686
- Value
- http://lidarr:8686
Landing page for Lidarr (e.g., lidarr, lidarr/library). Leave blank for default
- Target
- LIDARR_LANDING
- Default
- lidarr
- Value
- lidarr
Prowlarr - Indexer Manager (Settings - General - URL Base to /prowlarr)
- Target
- PROWLARR_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Prowlarr service (usually http://prowlarr:9696)
- Target
- PROWLARR_URL
- Default
- http://prowlarr:9696
- Value
- http://prowlarr:9696
Jackett - Indexer Aggregator (Config - Admin - url_base() to /jackett). For public mode with OAuth, configure JACKETT_OAUTH_URI in advanced settings
- Target
- JACKETT_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Jackett service (usually http://jackett:9117)
- Target
- JACKETT_URL
- Default
- http://jackett:9117
- Value
- http://jackett:9117
Seerr - Request Manager (In public mode, uses subdomain routing). For public mode with OAuth, also set SEERR_DOMAIN and SEERR_REDIRECT_URI
- Target
- SEERR_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Seerr service
- Target
- SEERR_URL
- Default
- http://seerr:5055
- Value
- http://seerr:5055
Subdomain for Seerr (e.g., seerr.yourdomain.com). For public mode with OAuth, also set SEERR_REDIRECT_URI to https://[SEERR_DOMAIN]/oauth2callback
- Target
- SEERR_DOMAIN
Bazarr - Subtitle Manager (Settings - General - Base URL to /bazarr)
- Target
- BAZARR_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Bazarr service (usually http://bazarr:6767)
- Target
- BAZARR_URL
- Default
- http://bazarr:6767
- Value
- http://bazarr:6767
Jellyfin - Media Server (Settings -Admin Dash - Networking - Base URL /jellyfin)
- Target
- JELLYFIN_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Jellyfin service (usually http://jellyfin:8096)
- Target
- JELLYFIN_URL
- Default
- http://jellyfin:8096
- Value
- http://jellyfin:8096
Emby - Media Server (In public mode, uses subdomain routing). For public mode with OAuth, also set EMBY_DOMAIN and EMBY_REDIRECT_URI
- Target
- EMBY_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Emby service
- Target
- EMBY_URL
- Default
- http://emby:8096
- Value
- http://emby:8096
Subdomain for Emby (e.g., emby.yourdomain.com). For public mode with OAuth, also set EMBY_REDIRECT_URI to https://[EMBY_DOMAIN]/oauth2callback
- Target
- EMBY_DOMAIN
Plex - Media Server (in public mode, uses subdomain routing). For public mode with OAuth, also set PLEX_DOMAIN and PLEX_REDIRECT_URI
- Target
- PLEX_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Plex service (usually http://plex:32400)
- Target
- PLEX_URL
- Default
- http://plex:32400
- Value
- http://plex:32400
Subdomain for Plex (e.g., plex.yourdomain.com). For public mode with OAuth, also set PLEX_REDIRECT_URI to https://[PLEX_DOMAIN]/oauth2callback
- Target
- PLEX_DOMAIN
Tautulli - Plex Analytics (Settings - Show Advanced - Web Interface - Enable Proxy, Set Public Domain to https://yahlp.yourdomain.com/tautulli and HTTP root to /tautulli)
- Target
- TAUTULLI_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Tautulli service (usually http://tautulli:8181/tautulli)
- Target
- TAUTULLI_URL
- Default
- http://tautulli:8181
- Value
- http://tautulli:8181
Maintainerr - Media Server Maintenance (Enable BASE_URL environment variable on its docker and set to /maintainerr)
- Target
- MAINTAINERR_ENABLED
- Default
- false|true
- Value
- false
Local internal URL for Maintainerr service (usually http://maintainerr:6246)
- Target
- MAINTAINERR_URL
- Default
- http://maintainerr:6246
- Value
- http://maintainerr:6246
User ID for file permissions (99 = nobody)
- Default
- 99
- Value
- 99
Group ID for file permissions (100 = users)
- Default
- 100
- Value
- 100
Configuration folder - store the yahlp and sites JSON5 files here - ENV Variables override config settings, remove the variable settings from the form. Custom templates in the templates folder
- Target
- /etc/yahlp
- Default
- /mnt/user/appdata/yahlp
- Value
- /mnt/user/appdata/yahlp
Read Timezone from host
- Target
- /etc/localtime
- Default
- /etc/localtime
- Value
- /etc/localtime