authentik: add LDAP outpost service for Jellyfin LDAP-Auth
- New authentik-outpost-ldap quadlet: ghcr.io/goauthentik/ldap:2026.8.0, publishes host 389/636 -> container 3389/6636 for cross-host binds from dankserver's Jellyfin LDAP-Auth plugin; outpost token in host .env. - deploy-plan.py: register authentik-outpost-ldap in SERVICE_ORDER and DANKCLAW_SERVICES; map dankclaw/authentik/quadlet/ unit path. - deploy-remote.sh: deploy_authentik_outpost_ldap handler + dispatch case. - deploy.sh: valid-service entry.
This commit is contained in:
@@ -0,0 +1,38 @@
|
|||||||
|
# Quadlet unit: Authentik LDAP outpost (rootless, boot-persistent).
|
||||||
|
#
|
||||||
|
# Install path on dankclaw: ~/.config/containers/systemd/authentik-outpost-ldap.container
|
||||||
|
# Unit name: authentik-outpost-ldap.service (podman 5.x drops the container- prefix)
|
||||||
|
#
|
||||||
|
# Serves the authentik LDAP provider ("Jellyfin LDAP", Base DN
|
||||||
|
# dc=franksdank,dc=cloud) so dankserver's Jellyfin can authenticate its users
|
||||||
|
# via the LDAP-Auth plugin. The type-specific ghcr.io/goauthentik/ldap image
|
||||||
|
# listens on 3389 (ldap) / 6636 (ldaps) inside the container; published to
|
||||||
|
# host 389/636 for cross-host binds from dankserver. The outpost token lives
|
||||||
|
# in the host .env (AUTHENTIK_LDAP_OUTPOST_TOKEN), never in this repo. The
|
||||||
|
# outpost dials core over websocket at AUTHENTIK_HOST; auth. is guard-chain
|
||||||
|
# exempt (IdP).
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Authentik LDAP outpost container
|
||||||
|
After=network.target authentik-server.service
|
||||||
|
Wants=authentik-server.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=authentik-outpost-ldap
|
||||||
|
Image=ghcr.io/goauthentik/ldap:2026.8.0
|
||||||
|
Network=dankclaw_default
|
||||||
|
EnvironmentFile=/home/dank/serverAppConfigs/dankclaw/.env
|
||||||
|
Environment=AUTHENTIK_HOST=https://auth.franksdank.cloud
|
||||||
|
Environment=AUTHENTIK_INSECURE=false
|
||||||
|
Environment=AUTHENTIK_TOKEN=${AUTHENTIK_LDAP_OUTPOST_TOKEN}
|
||||||
|
PublishPort=389:3389
|
||||||
|
PublishPort=636:6636
|
||||||
|
User=0:0
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=/home/dank/serverAppConfigs/dankclaw/.env
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
@@ -41,6 +41,7 @@ SERVICE_ORDER = (
|
|||||||
"authentik-server",
|
"authentik-server",
|
||||||
"authentik-worker",
|
"authentik-worker",
|
||||||
"authentik-outpost",
|
"authentik-outpost",
|
||||||
|
"authentik-outpost-ldap",
|
||||||
"caddy",
|
"caddy",
|
||||||
"homepage",
|
"homepage",
|
||||||
"romm-mariadb",
|
"romm-mariadb",
|
||||||
@@ -83,6 +84,7 @@ DANKCLAW_SERVICES = {
|
|||||||
"authentik-server",
|
"authentik-server",
|
||||||
"authentik-worker",
|
"authentik-worker",
|
||||||
"authentik-outpost",
|
"authentik-outpost",
|
||||||
|
"authentik-outpost-ldap",
|
||||||
"caddy",
|
"caddy",
|
||||||
"homepage",
|
"homepage",
|
||||||
"frank-default-large",
|
"frank-default-large",
|
||||||
@@ -276,7 +278,7 @@ def services_for_path(path: str, target: str) -> set[str]:
|
|||||||
return services
|
return services
|
||||||
if len(parts) >= 4 and parts[1] == "authentik" and parts[2] == "quadlet":
|
if len(parts) >= 4 and parts[1] == "authentik" and parts[2] == "quadlet":
|
||||||
name = parts[3].removesuffix(".container")
|
name = parts[3].removesuffix(".container")
|
||||||
if name in {"authentik-postgres", "authentik-server", "authentik-worker", "authentik-outpost"}:
|
if name in {"authentik-postgres", "authentik-server", "authentik-worker", "authentik-outpost", "authentik-outpost-ldap"}:
|
||||||
_add(services, name)
|
_add(services, name)
|
||||||
return services
|
return services
|
||||||
if len(parts) >= 2 and parts[1] == "searxng":
|
if len(parts) >= 2 and parts[1] == "searxng":
|
||||||
|
|||||||
@@ -706,6 +706,20 @@ deploy_authentik_outpost() {
|
|||||||
echo "WARN: authentik-outpost did not come up active" >&2
|
echo "WARN: authentik-outpost did not come up active" >&2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deploy_authentik_outpost_ldap() {
|
||||||
|
# Dedicated LDAP outpost for Jellyfin's LDAP-Auth plugin. The type-specific
|
||||||
|
# ghcr.io/goauthentik/ldap image serves 3389/6636 container-side, published
|
||||||
|
# as host 389/636 for cross-host binds from dankserver. The outpost token
|
||||||
|
# lives in the host .env, never in this repo. Restarting only this unit
|
||||||
|
# cycles LDAP auth for a few seconds; the rest of the stack is untouched.
|
||||||
|
cp dankclaw/authentik/quadlet/authentik-outpost-ldap.container "$quadlet_unit_dir/"
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user restart authentik-outpost-ldap.service
|
||||||
|
sleep 5
|
||||||
|
systemctl --user is-active --quiet authentik-outpost-ldap.service || \
|
||||||
|
echo "WARN: authentik-outpost-ldap did not come up active" >&2
|
||||||
|
}
|
||||||
|
|
||||||
deploy_hermes() {
|
deploy_hermes() {
|
||||||
# The hermes trio (gateway, dashboard, webui) shares one image and the
|
# The hermes trio (gateway, dashboard, webui) shares one image and the
|
||||||
# /data volume and deploys as one unit: install the units, retire the
|
# /data volume and deploys as one unit: install the units, retire the
|
||||||
@@ -981,6 +995,9 @@ deploy_service() {
|
|||||||
authentik-outpost)
|
authentik-outpost)
|
||||||
deploy_authentik_outpost
|
deploy_authentik_outpost
|
||||||
;;
|
;;
|
||||||
|
authentik-outpost-ldap)
|
||||||
|
deploy_authentik_outpost_ldap
|
||||||
|
;;
|
||||||
anubis) deploy_anubis ;;
|
anubis) deploy_anubis ;;
|
||||||
seerr) deploy_seerr ;;
|
seerr) deploy_seerr ;;
|
||||||
frank-default-large) deploy_llm_large ;;
|
frank-default-large) deploy_llm_large ;;
|
||||||
|
|||||||
+1
-1
@@ -133,7 +133,7 @@ valid_service() {
|
|||||||
dankclaw:comfyui|dankclaw:hermes|dankclaw:hermes-dashboard|\
|
dankclaw:comfyui|dankclaw:hermes|dankclaw:hermes-dashboard|\
|
||||||
dankclaw:hermes-webui|dankclaw:prometheus|dankclaw:grafana|dankclaw:loki|dankclaw:alloy|\
|
dankclaw:hermes-webui|dankclaw:prometheus|dankclaw:grafana|dankclaw:loki|dankclaw:alloy|\
|
||||||
dankclaw:node-exporter|dankclaw:authentik-postgres|dankclaw:authentik-server|\
|
dankclaw:node-exporter|dankclaw:authentik-postgres|dankclaw:authentik-server|\
|
||||||
dankclaw:authentik-worker|dankclaw:authentik-outpost|dankclaw:anubis|dankclaw:seerr|\
|
dankclaw:authentik-worker|dankclaw:authentik-outpost|dankclaw:authentik-outpost-ldap|dankclaw:anubis|dankclaw:seerr|\
|
||||||
dankclaw:frank-default-large|dankclaw:frank-default-npu|\
|
dankclaw:frank-default-large|dankclaw:frank-default-npu|\
|
||||||
dankclaw:frank-default-sightsound|\
|
dankclaw:frank-default-sightsound|\
|
||||||
dankserver:romm-mariadb|dankserver:romm-redis|dankserver:romm|\
|
dankserver:romm-mariadb|dankserver:romm-redis|dankserver:romm|\
|
||||||
|
|||||||
Reference in New Issue
Block a user