This commit is contained in:
nick committed 2026-09-23 21:19:39 +00:00
1 parent 5c4836564c
commit 148516688c
1 file changed
+52 -3
+52 -3
View File
@@ -45,8 +45,9 @@ systemd:
# wait-for-agents.sh can read the agent list from the same place the # wait-for-agents.sh can read the agent list from the same place the
# container does. docker run forwards them by bare name below. # container does. docker run forwards them by bare name below.
Environment="DOZZLE_HOSTNAME=Oswald Logs" Environment="DOZZLE_HOSTNAME=Oswald Logs"
Environment="DOZZLE_ENABLE_MCP=true" # The agent list lives in a file because dozzle-mcp.service needs the
Environment="DOZZLE_REMOTE_AGENT=192.168.7.60:7007|oswald-runner|Goose,192.168.7.61:7007|ai|Goose,192.168.7.62:7007|oswl-connector|Goose,192.168.7.64:7007|cisa-kev-rss|Goose" # identical list; keeping it inline in both units would drift.
EnvironmentFile=/etc/dozzle/agents.env
# OIDC via Authelia. Dozzle builds its redirect from the incoming # OIDC via Authelia. Dozzle builds its redirect from the incoming
# request, so the proxy in front must pass the real Host and # request, so the proxy in front must pass the real Host and
# X-Forwarded-Proto; the URI to register in Authelia is # X-Forwarded-Proto; the URI to register in Authelia is
@@ -76,7 +77,6 @@ systemd:
--tmpfs /data \ --tmpfs /data \
-p 8080:8080 \ -p 8080:8080 \
-e DOZZLE_HOSTNAME \ -e DOZZLE_HOSTNAME \
-e DOZZLE_ENABLE_MCP \
-e DOZZLE_REMOTE_AGENT \ -e DOZZLE_REMOTE_AGENT \
-e DOZZLE_AUTH_PROVIDER \ -e DOZZLE_AUTH_PROVIDER \
-e DOZZLE_AUTH_OIDC_ISSUER \ -e DOZZLE_AUTH_OIDC_ISSUER \
@@ -91,9 +91,58 @@ systemd:
RestartSec=5s RestartSec=5s
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
# Second Dozzle, dedicated to MCP on :8081.
#
# It exists because the two requirements cannot be met by one instance:
# the oidc provider is the only one that lets Authelia own the user list,
# but it offers no non-interactive login, so an MCP client can never
# authenticate against it. This instance therefore runs with no auth at
# all (DOZZLE_AUTH_PROVIDER unset) and is reached only through the
# Cloudflare tunnel, which is where access control has to live.
#
# ANYTHING that can open :8081 gets unauthenticated read access to every
# log on every agent. Do not publish this port beyond the tunnel, and put
# a Cloudflare Access policy (service token) on its hostname.
- name: dozzle-mcp.service
enabled: true
contents: |
[Unit]
Description=Dozzle MCP endpoint
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
# Same agents as the hub, same file, so the two cannot drift.
EnvironmentFile=/etc/dozzle/agents.env
Environment="DOZZLE_HOSTNAME=Oswald Logs (MCP)"
Environment="DOZZLE_ENABLE_MCP=true"
ExecStartPre=/usr/bin/docker pull amir20/dozzle:v11.1.1
ExecStartPre=-/usr/bin/docker rm --force dozzle-mcp
ExecStartPre=-/usr/bin/timeout 180 /opt/dozzle/wait-for-agents.sh
ExecStart=/usr/bin/docker run --rm --name dozzle-mcp \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--tmpfs /data \
-p 8081:8080 \
-e DOZZLE_HOSTNAME \
-e DOZZLE_REMOTE_AGENT \
-e DOZZLE_ENABLE_MCP \
amir20/dozzle:v11.1.1
ExecStop=/usr/bin/docker stop dozzle-mcp
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
storage: storage:
files: files:
# Single source of truth for the agent list, shared by dozzle.service and
# dozzle-mcp.service. systemd EnvironmentFile format: no quoting, so the
# "|" and "," separators are taken literally.
- path: /etc/dozzle/agents.env
mode: 0644
contents:
inline: |
DOZZLE_REMOTE_AGENT=192.168.7.60:7007|oswald-runner|Goose,192.168.7.61:7007|ai|Goose,192.168.7.62:7007|oswl-connector|Goose,192.168.7.64:7007|cisa-kev-rss|Goose,192.168.7.4:7007|PortaNAS|Portanas
# Blocks until every agent named in DOZZLE_REMOTE_AGENT accepts a TCP # Blocks until every agent named in DOZZLE_REMOTE_AGENT accepts a TCP
# connection. The list is read from the environment, so adding or removing # connection. The list is read from the environment, so adding or removing
# an agent above needs no change here. # an agent above needs no change here.