YAHLP-Public-Google

YAHLP-Public-Google

Docker app from auskento's Repository

Overview

YAHLP - Yet Another HomeLab Portal - Public Mode with Google OAuth

Configured for public internet deployment with:

  • HTTPS with automatic Let's Encrypt certificates
  • Google OAuth 2.0 authentication
  • Requires domain name and email address
  • Requires Google OAuth credentials from Google Cloud Console
  • Ports 80 and 443 must be port-forwarded

Setup Requirements:

  1. Create OAuth 2.0 credentials in Google Cloud Console
  2. Set Redirect URI to: https://your-domain.com/auth/oauth2/callback
  3. Add DNS A record pointing your domain to your server IP
  4. Ensure ports 80 and 443 are port-forwarded from router
  5. Set TEST_MODE=false once ready for production to avoid Let's Encrypt rate limiting

YAHLP - Yet Another HomeLab Portal

YAHLP Logo

A production-ready reverse proxy and dashboard for managing 19 homelab services with automatic HTTPS, flexible authentication, and customizable layouts. YAHLP sits between your browser and your services, providing unified access, health monitoring, and a beautiful interface across any device.

What YAHLP Does

Unified Access — One dashboard for all your homelab services. No more remembering IP addresses and ports.

Security — Automatic HTTPS via Let's Encrypt, centralized authentication (Basic Auth, OAuth2 with Entra/Google), and request validation. Credentials stored securely, never transmitted to services unnecessarily.

Beautiful UI — 5 responsive layouts (classic, modern, sleek, minimal, mobile) that auto-detect your device and scale perfectly. Switch layouts anytime without server restart.

Zero Downtime Management — Real-time service health checks, customizable service ordering, and theme switching without page reloads. Add or remove services without restarting the proxy.

Flexible Deployment — Run on private networks (HTTP) or expose to the internet (automatic HTTPS). Scale to any number of services.

Architecture

YAHLP runs as a single Docker container with:

  • Apache 2.4 reverse proxy (handles routing, SSL/TLS, authentication)
  • Node.js API server (service discovery, health checks, token caching)
  • Static dashboard (HTML/CSS/JS, works offline once loaded)

Services communicate directly to YAHLP; YAHLP proxies requests to your backend services on the internal Docker network or local network. See Architecture for system design details.

Deployment Modes

Private Network — Run on your internal network with HTTP or self-signed HTTPS. Good for homelab on a single LAN.

Public (Internet-Facing) — Register a domain, enable automatic HTTPS via Let's Encrypt, and expose to the internet with OAuth2 or Basic Auth. Production-grade security.

See Deployment Guide for mode selection and tradeoffs.

📦 Supported Services (19 Total)

Category Count Examples
Usenet 3 SABnzbd, NZBGet, NZBHydra
Torrents 3 Transmission, qBittorrent, Deluge
Search & Automation 6 Prowlarr, Jackett, Sonarr, Radarr, Lidarr, Whisparr
Utilities 4 Seerr, Bazarr, Tautulli, Maintainerr
Media Servers 3 Jellyfin, Emby, Plex

Each service is optionally enabled/disabled via configuration. Only enabled services appear in the dashboard.

Authentication Methods

  • No Auth — Public dashboard (private network only)
  • Basic Auth — Username/password (simple, requires HTTPS)
  • Entra ID / Azure AD — OAuth2 via Microsoft (enterprise)
  • Google OAuth — OAuth2 via Google (personal)

Authentication happens at the proxy level. Once authenticated, services receive requests without re-authentication. See Authentication Guide.

Configuration

YAHLP requires a single mounted config folder (/etc/yahlp) for everything:

  • Configuration files (yahlp.json5, sites.json5)
  • SSL certificates (automatically managed in public mode)
  • Custom dashboard templates
  • Apache access/error logs

Docker mount: -v ./config:/etc/yahlp ← Only volume needed

YAHLP uses a three-tier configuration approach:

1. Unraid Form — Essential settings only

  • Access mode, domain, email
  • Service URLs and enable/disable flags
  • Dashboard customization

2. Environment Variables — Per-deployment overrides

  • Set via -e flags or .env file
  • Override any setting (useful for testing or CI/CD)
  • Example: -e SONARR_API_KEY=abc123

3. JSON5 Configuration — Complete persistent setup

  • Auto-generated on first run with complete template
  • API keys, usernames, passwords (security: kept out of form)
  • Custom icon URLs, OAuth redirects, landing pages
  • Edit /etc/yahlp/yahlp.json5 to configure securely

Precedence: Environment variables > JSON5 file > Form defaults

See Configuration Guide for complete options.

Getting Started

Start with the Installation Guide for detailed setup instructions for Docker or Unraid.

📚 Documentation

Setup

  • Installation — Docker setup for private or public deployments, Unraid-specific guide
  • Configuration — All settings: services, auth, dashboards, SSL
  • Services — How to connect and configure each of the 19 services
  • Authentication — Auth methods: Basic, OAuth (Entra/Google), setup guides

Using & Managing

Advanced

  • Architecture — System design, component overview, data flow
  • Security — Best practices, threat model, hardening checklist, incident response
  • Development — Contributing guide, project structure, adding services

Why YAHLP?

Single Proxy — Instead of exposing each service individually to the internet or maintaining complex DNS/firewall rules, YAHLP proxies all traffic through one secure entry point.

Time Saver — No more logging into 5 different services to manage your homelab. Dashboard loads them all at once.

Beginner Friendly — Start with private network deployment (simple, no SSL), upgrade to internet-facing later (automatic HTTPS, OAuth).

Flexible — 5 layouts to choose from, enable/disable services without restart, customize service order, auto-auth to some services.

Safe — All credentials stored locally, never shared unnecessarily. Optional OAuth2 means no password storage at all.

How It Works

  1. Request comes in → Browser connects to YAHLP proxy
  2. Authentication → Proxy validates you're authorized (Basic Auth, OAuth, or none)
  3. Proxy routes → Request forwarded to appropriate backend service
  4. Response returned → Service response relayed back to browser
  5. Dashboard monitors → Health checks run in background, status shown in UI

All services run on internal Docker network or local LAN. Direct access is optional (can be disabled).

System Requirements

Minimum:

  • 512 MB RAM (lighter for small homelabs)
  • 100 MB disk (plus space for logs and certificates)
  • Docker & Docker Compose installed

Recommended:

  • 1+ GB RAM (for health checks on 10+ services)
  • 500 MB disk
  • Internal network (LAN only) OR registered domain with open ports 80/443

Scaling:

  • Supports 10+ services without issues
  • Adding more services increases RAM usage slightly
  • Each layout CSS file is ~20 KB

See Installation Guide for detailed requirements by deployment mode.

Common Questions

How do I add a new service?
Enable it in configuration (env or JSON5), provide the service URL and API key. YAHLP auto-discovers and displays it on restart. See Services Guide.

Can I run it on the internet?
Yes. Public mode handles HTTPS via Let's Encrypt and OAuth2 authentication. See Installation for public deployment.

What if a service goes down?
Dashboard shows real-time health status (🟢 online / 🔴 offline). Unreachable services display as offline but don't break the dashboard.

Can I customize the dashboard?
Yes. Choose between 5 built-in layouts, customize service ordering, create custom CSS. See Dashboard Customization.

Is my data backed up?
YAHLP stores certificates, configuration, and logs in Docker volumes. You must back these up yourself. See Backup & Restore.

What authentication methods are supported?
Basic Auth (username/password), Entra ID (Azure AD), Google OAuth, or no auth (private networks only). See Authentication Guide.

Next Steps

  1. New to YAHLP? Start with Installation Guide
  2. Already installed? See Configuration to enable services
  3. Want to customize? Check Dashboard Customization
  4. Having issues? Browse Troubleshooting Guide
  5. Interested in contributing? See Development Guide

Support & Feedback

  • Report Issues: GitHub Issues
  • Security Issues: Please email instead of using GitHub Issues
  • Feature Requests: GitHub Issues with [FEATURE] tag
  • Documentation Questions: Check the Docs folder first

License

MIT License - See LICENSE file for details


Made for homelabbers. Made simple. Made right.

Media gallery

1 / 3

Install YAHLP-Public-Google on Unraid in a few clicks.

Find YAHLP-Public-Google in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for YAHLP-Public-Google Review the template variables and paths Click Install

Requirements

This app runs best on a dedicated IP on your LAN - not forwarding other ports to host.
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

Details

Repository
ghcr.io/auskento/yahlp
Last Updated2026-07-21
First Seen2026-07-20

Runtime arguments

Web UI
https://yourdomain.com
Network
bridge
Shell
bash
Privileged
false

Template configuration

HTTPPorttcp

HTTP

Target
80
Default
80
Value
80
HTTPSPorttcp

HTTPS

Target
443
Default
443
Value
443
Let's Encrypt Test ModeVariable

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
Access ModeVariable

Choose: public (HTTPS with Let's Encrypt) or private (HTTP on internal network)

Target
ACCESS_MODE
Default
public|private
Domain (Public)Variable

Your domain for public mode (e.g., yahlp.yourdomain.com)

Target
DOMAIN
Email (Public)Variable

Email for Let's Encrypt notifications (public mode only)

Target
EMAIL
TimezoneVariable

Container timezone (e.g., Australia/Sydney, UTC, US/Eastern)

Target
TZ
Dashboard NameVariable

Displayed in browser title and dashboard

Target
DASHBOARD_NAME
Default
YAHLP
Dashboard LayoutVariable

Choose: classic, modern, sleek, minimal

Target
DASHBOARD_STYLE
Default
modern
Accent ColorVariable

Hex color for UI accents (e.g., #00A99D)

Target
DASHBOARD_COLOR
Dashboard LandingVariable

Default page on load (e.g., sonarr, radarr/upcoming). Leave blank for grid.

Target
DASHBOARD_LANDING
Service Display OrderVariable

Comma-separated service codes for display order

Target
DASHBOARD_ORDER
Default
SAB,GET,HYD,TRA,QBI,DEL,PRO,JAC,SON,RAD,LID,WHI,SEE,BAZ,TAU,MNT,JEL,PLX,EMB
Sites Display OrderVariable

Comma-separated list for internal websites display order

Target
DASHBOARD_SITES
Authentication TypeVariable

Choose: none, basic, google, entra

Target
AUTHTYPE
Default
google
Google Client IDVariable

From Google Cloud Console

Target
GOOGLE_CLIENT_ID
Google Client SecretVariable

From Google Cloud Console

Target
GOOGLE_CLIENT_SECRET
Google Redirect URIVariable

OAuth callback URL (e.g., https://yourdomain.com/auth/oauth2/callback)

Target
GOOGLE_REDIRECT_URI
Enable SABnzbdVariable

SABnzbd - Usenet Client (Config - Special - url_base() to /sabnzbd)

Target
SABNZBD_ENABLED
Default
false|true
SABnzbd URLVariable

Your local URL

Target
SABNZBD_URL
Default
http://sabnzbd:8080
Enable NZBGetVariable

NZBGet - Usenet Client (Set User and Pass below to bypass NZBGet auth

Target
NZBGET_ENABLED
Default
false|true
NZBGet URLVariable

Your local URL

Target
NZBGET_URL
Default
http://nzbget:6789
Enable NZBHydraVariable

NZBHydra - Usenet Meta Indexer (Config - Main - URLBase to /nzbhydra)

Target
NZBHYDRA_ENABLED
Default
false|true
NZBHydra URLVariable

Your local url

Target
NZBHYDRA_URL
Default
http://nzbhydra:5076
Enable TransmissionVariable

Transmission - Torrent Client

Target
TRANSMISSION_ENABLED
Default
false|true
Transmission URLVariable

Your local url

Target
TRANSMISSION_URL
Default
http://transmission:9091
Enable qBittorrentVariable

qBittorrent - Torrent Client

Target
QBITTORRENT_ENABLED
Default
false|true
qBittorrent URLVariable

Your local url (Check port for conflict, default to same port as other apps)

Target
QBITTORRENT_URL
Default
http://qbittorrent:8080
Enable DelugeVariable

Deluge - Torrent Client

Target
DELUGE_ENABLED
Default
false|true
Deluge URLVariable

Your local url

Target
DELUGE_URL
Default
http://deluge:8112
Enable SonarrVariable

Sonarr - TV Show Automation (Settings - General - URL Base to /sonarr)

Target
SONARR_ENABLED
Default
false|true
Sonarr URLVariable

Your local url

Target
SONARR_URL
Default
http://sonarr:8989
Sonarr LandingVariable

Landing page (e.g., sonarr, sonarr/calendar)

Target
SONARR_LANDING
Default
sonarr
Enable RadarrVariable

Radarr - Movie Automation ((Settings - General - URL Base to /radarr)

Target
RADARR_ENABLED
Default
false|true
Radarr URLVariable

Your local url

Target
RADARR_URL
Default
http://radarr:7878
Radarr LandingVariable

Landing page (e.g., radarr, radarr/calendar)

Target
RADARR_LANDING
Default
radarr
Enable WhisparrVariable

Whisparr - Adult Content Automation (Settings - General - URL Base to /whisparr)

Target
WHISPARR_ENABLED
Default
false|true
Whisparr URLVariable

Your local url

Target
WHISPARR_URL
Default
http://whisparr:6969
Whisparr LandingVariable

Landing page

Target
WHISPARR_LANDING
Default
whisparr
Enable LidarrVariable

Lidarr - Music Automation (Settings - General - URL Base to to /lidarr)

Target
LIDARR_ENABLED
Default
false|true
Lidarr URLVariable

Your local url

Target
LIDARR_URL
Default
http://lidarr:8686
Lidarr LandingVariable

Landing page

Target
LIDARR_LANDING
Enable ProwlarrVariable

Prowlarr - Indexer Manager (Settings - General - URL Base to /prowlarr)

Target
PROWLARR_ENABLED
Default
false|true
Prowlarr URLVariable

Your local url

Target
PROWLARR_URL
Default
http://prowlarr:9696
Enable JackettVariable

Jackett - Indexer Aggregator (Config - Admin - url_base() to /jackett)

Target
JACKETT_ENABLED
Default
false|true
Jackett URLVariable

Your local url

Target
JACKETT_URL
Default
http://jackett:9117
Enable SeerrVariable

Seerr - Request Manager (In Public mode, Seer uses a subdomain, make sure you have a DNS record configured)

Target
SEERR_ENABLED
Default
false|true
Seerr URLVariable

Your local url

Target
SEERR_URL
Default
http://seerr:5055
Seerr DomainVariable

Subdomain for Seerr

Target
SEERR_DOMAIN
Default
seerr.yourdomain.com
Seerr Redirect URIVariable

OAuth redirect URI - configure in Entra or Google

Target
SEERR_REDIRECT_URI
Default
https://seerr.yourdomain.com/oauth2callback
Enable BazarrVariable

Bazarr - Subtitle Manager (Settings - General - Base URL to /bazarr)

Target
BAZARR_ENABLED
Default
false|true
Bazarr URLVariable

Your local url

Target
BAZARR_URL
Default
http://bazarr:6767
Enable JellyfinVariable

Jellyfin - Media Server (Settings -Admin Dash - Networking - Base URL /jellyfin)

Target
JELLYFIN_ENABLED
Default
false|true
Jellyfin URLVariable

Your local url

Target
JELLYFIN_URL
Default
http://jellyfin:8096
Enable EmbyVariable

Emby - Media Server (In public mode,Emby uses a subdomain, make sure you have a DNS record configured)

Target
EMBY_ENABLED
Default
false|true
Emby URLVariable

Your local url

Target
EMBY_URL
Default
http://emby:8096
Emby DomainVariable

Subdomain for Emby

Target
EMBY_DOMAIN
Default
emby.yourdomain.com
Emby Redirect URIVariable

OAuth redirect URI - configure in Entra or Google

Target
EMBY_REDIRECT_URI
Default
https://emby.yourdomain.com/oauth2callback
Enable PlexVariable

Plex - Media Server (in public mode, Plex uses a subdomain, make sure you have a DNS record configured)

Target
PLEX_ENABLED
Default
false|true
Plex URLVariable

Your local url

Target
PLEX_URL
Default
http://plex:32400
Plex DomainVariable

Subdomain for Plex

Target
PLEX_DOMAIN
Default
plex.yourdomain.com
Plex Redirect URIVariable

OAuth redirect URI

Target
PLEX_REDIRECT_URI
Default
https://plex.yourdomain.com/oauth2callback
Enable TautulliVariable

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
Tautulli URLVariable

Your local url

Target
TAUTULLI_URL
Default
http://tautulli:8181/tautulli
Enable MaintainerrVariable

Maintainerr - Media Server Maintenance (Enable BASE_URL environment variable on its docker and set to /maintainerr)

Target
MAINTAINERR_ENABLED
Default
false|true
Maintainerr URLVariable

Your local url

Target
MAINTAINERR_URL
Default
http://maintainerr:6246
PUIDVariable

User ID for file permissions (99 = nobody)

Default
99
Value
99
PGIDVariable

Group ID for file permissions (100 = users)

Default
100
Value
100
ConfigurationPathrw

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