Dashboard bindet seit dem Caddy-Umbau nur noch auf 127.0.0.1 -- Hermes' Auth-Gate engagiert sich laut eigener Fehlermeldung NUR bei einem 0.0.0.0-Bind, greift also gar nicht mehr. HERMES_DASHBOARD_PASSWORD_HASH ist damit optional statt Pflicht (kein docker-compose-Abbruch mehr bei leerem Wert), der dashboard: basic_auth-Block in config.yaml.example ist standardmaessig auskommentiert. Caddy (TLS + eigene Basic-Auth) bleibt die einzige im Normalbetrieb noetige Auth-Schicht. README/.env.example entsprechend entschlackt -- Hash-Erzeugen + Dollarzeichen-Escaping nur noch als Fallback dokumentiert, falls der Bind mal wieder auf 0.0.0.0 wandert.
86 lines
4.6 KiB
Bash
86 lines
4.6 KiB
Bash
# Nach /shared/projects/hermes_agent/.env kopieren und Werte anpassen.
|
|
# .env ist in .gitignore und wird NICHT committet.
|
|
|
|
# Shared Secret zwischen hermes-gateway und Hermes Agent (config.yaml -> api_key).
|
|
# Mindestens 32 zufaellige Zeichen, z.B. erzeugen mit:
|
|
# openssl rand -hex 32
|
|
HERMES_GATEWAY_TOKEN=
|
|
|
|
# Port auf dem hermes-gateway auf dieser Maschine lauscht. Seit "alles auf
|
|
# einer Maschine" nur noch auf 127.0.0.1 gebunden (siehe docker-compose.yml) -
|
|
# Hermes Agent selbst (network_mode: host) erreicht das trotzdem ueber
|
|
# localhost, kein anderer Rechner kommt mehr direkt ran.
|
|
HERMES_GATEWAY_PORT=8447
|
|
|
|
# UID/GID des Host-Users, dem hermes-data/agent-home gehoeren soll, damit
|
|
# Dateien die Hermes im Container schreibt (Sessions, Memory, Config) auf dem
|
|
# Host lesbar/schreibbar bleiben. Default 10000 (Hermes' eingebauter Default)
|
|
# ist ok wenn Dir das egal ist; setze es sonst auf `id -u`/`id -g` des Users
|
|
# der hermes-data/ auf dem Host verwaltet.
|
|
HERMES_UID=10000
|
|
HERMES_GID=10000
|
|
|
|
# NICHT MEHR NOETIG im Normalbetrieb (seit dem Caddy-Umbau, 19.07.2026 spaeter
|
|
# Abend): das Dashboard bindet nur noch auf 127.0.0.1, Hermes' eigenes
|
|
# Auth-Gate engagiert sich laut eigener Fehlermeldung NUR bei einem 0.0.0.0-
|
|
# Bind. Caddy (siehe CADDY_BASIC_AUTH_HASH unten) macht die eigentliche
|
|
# Absicherung nach aussen. Einfach leer lassen.
|
|
#
|
|
# Nur falls der Dashboard-Bind mal wieder auf 0.0.0.0 gestellt wird, ist ein
|
|
# Wert hier noetig (sonst verweigert Hermes den Start hart mit "no auth
|
|
# providers are registered") — dann zusaetzlich den dashboard:-Block in
|
|
# hermes-agent-config/config.yaml.example (bzw. der echten config.yaml)
|
|
# einkommentieren. HERMES_DASHBOARD_USER ist Klartext (frei waehlbar),
|
|
# HERMES_DASHBOARD_PASSWORD_HASH ist NIEMALS das Klartext-Passwort, sondern
|
|
# der Hash daraus. Erzeugen (einmalig, gegen den "hermes-agent"-Container,
|
|
# NICHT "hermes-agent-dashboard" — der braucht den Hash schon zum Hochfahren,
|
|
# Henne-Ei-Problem):
|
|
# docker exec -it hermes-agent python -c \
|
|
# "from plugins.dashboard_auth.basic import hash_password; print(hash_password('DEIN-PASSWORT'))"
|
|
# Den Output (nicht das Passwort selbst!) hier eintragen.
|
|
#
|
|
# ACHTUNG DOLLARZEICHEN-FALLE falls Du's doch brauchst: der erzeugte Hash hat
|
|
# das Format "pbkdf2:sha256:<n>$<salt>$<hash>" - also ZWEI rohe "$"-Zeichen
|
|
# drin. Docker Compose interpretiert "$xyz" in .env-Werten selbst als
|
|
# Variablen-Referenz und ersetzt nicht aufloesbare Teile stillschweigend
|
|
# durch Leerstring (sichtbar als "WARN The "xyz" variable is not set"
|
|
# beim "docker-compose up"). Ergebnis: ein verstuemmelter Hash, das
|
|
# Dashboard startet trotzdem nicht ("no auth providers are registered"),
|
|
# obwohl alles "richtig" eingetragen aussieht.
|
|
# FIX: jedes einzelne "$" im Hash durch "$$" ersetzen bevor Du ihn hier
|
|
# eintraegst, z.B. aus
|
|
# pbkdf2:sha256:260000$f2kwriK6aYVRG5$BRps7npu2Tzg...
|
|
# wird
|
|
# pbkdf2:sha256:260000$$f2kwriK6aYVRG5$$BRps7npu2Tzg...
|
|
# Am schnellsten mit dem sed-Trick:
|
|
# sed -i '/^HERMES_DASHBOARD_PASSWORD_HASH=/ s/\$/$$/g' .env
|
|
HERMES_DASHBOARD_USER=admin
|
|
HERMES_DASHBOARD_PASSWORD_HASH=
|
|
|
|
# Seit 19.07.2026, spaeter Abend: Caddy (Service "caddy" in docker-compose.yml)
|
|
# macht TLS-Termination auf Port 443 + eine EIGENE Basic-Auth-Schicht vor dem
|
|
# Dashboard (das selbst nur noch auf 127.0.0.1 bindet). Selber HERMES_DASHBOARD_USER
|
|
# wie oben, aber ein EIGENER Hash noetig — Caddy will bcrypt, Hermes' Hash ist
|
|
# pbkdf2, die Formate sind nicht austauschbar. Erzeugen (einmalig, gleiches
|
|
# Klartext-Passwort wie beim Dashboard-Hash oben verwenden, muss aber nicht):
|
|
# docker run --rm caddy:2-alpine caddy hash-password --plaintext 'DEIN-PASSWORT'
|
|
# Output hier eintragen.
|
|
#
|
|
# ACHTUNG, GLEICHE DOLLARZEICHEN-FALLE WIE OBEN: ein bcrypt-Hash sieht aus wie
|
|
# $2a$14$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS
|
|
# Docker Compose interpretiert "$xyz" in .env als Variablen-Referenz und
|
|
# ersetzt still durch Leerstring ("WARN ... variable is not set"). FIX: jedes
|
|
# einzelne "$" durch "$$" ersetzen, z.B.
|
|
# $$2a$$14$$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS
|
|
# Am schnellsten mit demselben sed-Trick wie beim Dashboard-Hash:
|
|
# sed -i '/^CADDY_BASIC_AUTH_HASH=/ s/\$/$$/g' .env
|
|
CADDY_BASIC_AUTH_HASH=
|
|
|
|
# Optional: NUR setzen wenn Du Hermes' EIGENEN OpenAI-kompatiblen API-Server
|
|
# aktivierst (siehe API_SERVER_HOST/API_SERVER_KEY-Kommentar im
|
|
# hermes-agent-Service in docker-compose.yml) — z.B. um einen mobilen Client
|
|
# wie gpt_mobile/Maid/OpenWebUI direkt gegen Hermes sprechen zu lassen, statt
|
|
# nur ueber CLI/Dashboard. Andere Richtung als HERMES_GATEWAY_TOKEN oben!
|
|
# Mindestens 32 zufaellige Zeichen, z.B. openssl rand -hex 32.
|
|
# API_SERVER_KEY=
|