Skip to main content
Version: 0.0.4

Service access

How production apps are exposed and authenticated. Use this when adding a Traefik router or a new stack. For the auth components (Authelia, LLDAP, and deprecated IdPs), see Authentication.

Layers

LayerScopeRole
Traefik (*.dripdrop.pro)Internet / HTTPSTLS, routing, CrowdSec on websecure
Authelia (authelia middleware)Per-routerForward-auth; rules in ${DOCKER_APPDATA}/authelia/config/configuration.yml
App-native authInside the appLogin UI, OIDC client, or API keys
Host-published portsLAN / TailscaleDirect to the NAS; bypasses Traefik and CrowdSec
Docker networksContainer-to-containerPer-stack isolation; databases are not published publicly

CrowdSec AppSec is configured fail-open when the AppSec component is down or returns an error (see Infrastructure). IP reputation bans from the LAPI still apply when CrowdSec is healthy.

Access patterns

PatternTraefikWho can accessExamples
Authelia forward-authauthelia middleware (optionally admin-only in Authelia rules)Authenticated users per access_controlSonarr, Radarr, Bazarr, Prowlarr, Cleanuparr, Dispatcharr, Sportarr (UI), Homepage, Metube, Watchstate, Calibre Web Automated, Shelfmark, Notifiarr, qBitmanage, qui, Mousehole, OliveTin, Grafana, LLDAP UI, Windows VM console
App login (public URL)No AutheliaAnyone with app credentialsJellyfin, Seerr, Nextcloud, Navidrome
OIDC via AutheliaNo forward-auth; app handles loginUsers who complete Authelia OIDC in the appOpen WebUI
Public dashboardNo AutheliaAnyone who can reach the URLGatus
Public siteNo AutheliaInternetDripdrop
App login (own UI)No AutheliaHealthchecks credentialsHealthchecks
API without forward-authSeparate router, often PathRegexp('^/api')API key or app authSonarr, Radarr, Bazarr, Dispatcharr, Sportarr, qBittorrent
Internal onlyNo Traefik routerdocker-net / stack-localSubgen, TVApp2, Apprise, Unpackerr, cross-seed, Ollama API (when not proxied)

Grafana uses the authelia middleware with an admin-only Authelia rule. Inside the container, anonymous admin is enabled so authenticated users do not need a second Grafana login.

Notifiarr adds a Traefik x-webauth-user request header on top of Authelia forward-auth. Seerr serves seerr.dripdrop.pro; jellyseerr.dripdrop.pro redirects there. Nextcloud authenticates in-app against LLDAP via Authelia's LDAP integration. Mousehole shares qBittorrent's network namespace; its UI port is published on the qBittorrent container (5010 via VPN_EXPOSE_PORTS_ON_LAN). Set MOUSEHOLE_ALLOWED_HOSTS and MOUSEHOLE_ALLOWED_ORIGINS when reverse-proxying Mousehole.

Hostnames

HostnameService
bazarr.dripdrop.proBazarr
calibre-web-automated.dripdrop.proCalibre Web Automated
dispatcharr.dripdrop.proDispatcharr
dripdrop.pro, www.dripdrop.proDripdrop (public)
gatus.dripdrop.proGatus (public)
home.dripdrop.pro, homepage.dripdrop.proHomepage
jellyfin.dripdrop.proJellyfin
jellyseerr.dripdrop.proSeerr (redirect → seerr)
macos.dripdrop.promacOS VM console
metube.dripdrop.proMetube
mousehole.dripdrop.proMousehole
navidrome.dripdrop.proNavidrome
nextcloud.dripdrop.proNextcloud
notifiarr.dripdrop.proNotifiarr
olivetin.dripdrop.proOliveTin
ollama.dripdrop.proOpen WebUI
prowlarr.dripdrop.proProwlarr
qbittorrent.dripdrop.proqBittorrent
qui.dripdrop.proqui
radarr.dripdrop.proRadarr
seerr.dripdrop.proSeerr
shelfmark.dripdrop.proShelfmark
sonarr.dripdrop.proSonarr
sportarr.dripdrop.proSportarr
watchstate.dripdrop.proWatchstate
windows.dripdrop.proWindows VM console

Internal services (no public hostname): Subgen (http://subgen:9000), TVApp2, Apprise (http://apprise:8000), Unpackerr, cross-seed, and other stack-local APIs on docker-net.

Monitoring

ToolWhat it covers
Gatus (builds/gatus/config.yaml)Authelia-protected URLs (expects 401 + Authelia body) and internal docker-net health
Uptime RobotPublic and OIDC user-facing URLs (Jellyfin, Seerr, Nextcloud, Navidrome, Open WebUI, Dripdrop, …)
HealthchecksCron and backup job check-ins (separate app login)

Do not duplicate Uptime Robot checks in Gatus unless you want Discord alerts on the same failure twice.

Adding a new service

  1. Pick a pattern above (admin tool → Authelia; family app → app login; etc.).
  2. Add Traefik labels in the stack's docker-compose*.yaml (exposedByDefault is false — set traefik.enable: "true" explicitly).
  3. For Authelia-protected services, add a matching access_control rule in Authelia config and the authelia middleware on the router.
  4. Add Gatus protected + internal checks for non-public admin services, or Uptime Robot for public user-facing URLs.
  5. Host-published ports are intentional for LAN/Tailscale (Jellyfin, VMs, Ollama API, etc.); they are outside the Traefik/CrowdSec path by design.