hermes: add web dashboard service (basic-auth, LAN port 9119)

Add a hermes-dashboard compose service that runs 'hermes dashboard' on
0.0.0.0:9119 with HTTP basic auth. The username + scrypt password hash
live in the git-ignored /home/dank/hermes-data config (plaintext never
stored). A separate container from the Signal gateway, since the gateway
entrypoint does not start the dashboard. Both share the data volume and
are boot-persistent. Docs page + index link added (docs-first contract).
This commit is contained in:
Frank
2026-08-20 22:54:35 -07:00
parent afdb686c7e
commit 34918bf309
3 changed files with 56 additions and 0 deletions
+18
View File
@@ -89,6 +89,24 @@ services:
# SSE), not the :8090 web dashboard, so there is no HTTP endpoint to probe.
# The container's running state + the daemon's SSE connection are the signal.
# --- Hermes web dashboard (management UI: config, API keys, sessions) -----
# A separate process from the Signal gateway (the gateway entrypoint does not
# start the dashboard). Bound to the LAN with basic auth: the username + a
# scrypt password_hash live in the git-ignored /home/dank/hermes-data config.
# Port 9119 is published so a browser on the LAN can reach it.
hermes-dashboard:
image: docker.io/nousresearch/hermes-agent:latest
container_name: hermes-dashboard
restart: unless-stopped
entrypoint: ["bash", "-c", "hermes dashboard --host 0.0.0.0 --port 9119 --no-open --skip-build"]
environment:
HERMES_DATA_DIR: /data
HERMES_HOME: /data
ports:
- "9119:9119"
volumes:
- /home/dank/hermes-data:/data
# --- Git hosting (migrated from /opt/gitea) ------------------------------
postgres:
image: docker.io/library/postgres:16-alpine
+37
View File
@@ -0,0 +1,37 @@
# Hermes-Dashboard
The Hermes web dashboard is a browser UI for managing the agent. It shows config, API keys, and sessions. It is a management tool. It is not a chat window. Chat happens over Signal or the CLI. See [[Hermes]].
**Host:** Dankclaw — **Port:** `9119` — **URL:** `http://192.168.0.143:9119`
## Facts
| Item | Value |
|------|-------|
| Image | `docker.io/nousresearch/hermes-agent:latest` (same as the gateway) |
| Command | `hermes dashboard --host 0.0.0.0 --port 9119 --no-open --skip-build` |
| Port | `9119` (published to the LAN) |
| Auth | HTTP basic auth (username + scrypt password hash) |
| Data | shares `/home/dank/hermes-data` with the gateway |
## Why a separate container
The gateway container runs `hermes gateway run` (the Signal platform). That entrypoint does not start the dashboard. The dashboard is a separate process. So it runs in its own compose service (`hermes-dashboard`). Both services mount the same data volume. Both restart at boot (`restart: unless-stopped`).
## Authentication
The dashboard refuses to bind to a non-loopback address without an auth provider. There is no unauthenticated public bind. This repo uses basic auth:
- `dashboard.basic_auth.username` and `dashboard.basic_auth.password_hash` live in the git-ignored `/home/dank/hermes-data/config.yaml`.
- The stored value is a one-way scrypt hash. The plaintext password is never written to a file or the repo.
- The hash is generated with `plugins.dashboard_auth.basic.hash_password`.
## Access
Open `http://192.168.0.143:9119` in a browser on the LAN. Log in with the configured username and password.
## Gotchas
- The dashboard and the gateway share one data volume. A config change made in the dashboard takes effect when the gateway restarts.
- If the shared password is reused elsewhere, treat it as exposed. Rotate it and regenerate the hash.
- `--skip-build` uses the prebuilt web assets in the image. Do not remove it unless the assets are rebuilt.
+1
View File
@@ -38,6 +38,7 @@ This repository tracks the container stacks for both hosts. Git is the single so
- [[ComfyUI]] — node-based AI image generation (CPU)
- [[OpenWebUI]] — chat UI for local LLMs
- [[Hermes]] — the Nous Research agent
- [[Hermes-Dashboard]] — the Hermes web management UI (config, keys, sessions)
- [[Gitea]] — Git hosting (migrated)
- [[Postgres]] — Gitea database backend