No description
  • Go 62.1%
  • JavaScript 13.6%
  • Python 11.4%
  • CSS 10.1%
  • HTML 1.9%
  • Other 0.9%
Find a file
2026-10-18 16:53:35 +02:00
contrib Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
docs Concept: drop the iac_announce role in iac-core 2026-10-18 16:53:35 +02:00
examples/conf.d Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
internal Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
web Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
.gitignore Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
AGENTS.md Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
CLAUDE.md Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
go.mod Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
go.sum Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
main.go Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
Makefile Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00
README.md Cerberdash: concept and first core 2026-10-18 15:55:29 +02:00

Cerberdash

Ein Dashboard für die eigenen Dienste – eine Datei (7 MB, kein Node, keine Datenbank), für Menschen und Agenten aus derselben Quelle.

  • Ruhe ist der Normalzustand: Läuft alles, steht da „Alles ruhig.“ und eine ruhige Liste. Nur was ausfällt, bekommt Farbe und Platz.
  • Das Licht ist der Status: Der Schein der Seite wird warm, wenn etwas ausfällt – lesbar aus drei Metern.
  • Absicht statt Navigation: Lostippen, Enter öffnet. 1–9 öffnen die ersten Dienste.
  • Drei Köpfe: Dienste kommen aus conf.d/*.yml, melden sich selbst an (POST /api/v1/announce, gefunden per DNS-SRV oder mDNS) oder kommen aus NetBox.
  • Maschinen zuerst mitgedacht: /api/v1/state, /api/v1/events (SSE), /llms.txt und ein MCP-Endpunkt /mcp für KI-Assistenten.

Konzept und Begründungen: docs/CONCEPT.md

Ausprobieren

make run          # baut, legt .run/conf.d aus examples/ an, lauscht auf :8080

Braucht Go ≥ 1.24 (Debian 13: apt install golang-go).

Konfiguration

# conf.d/10-meine.yml
dashboard:
  title: Heyer Systems
services:
  - id: netbox
    title: NetBox
    url: https://netbox.intra.heyer.systems/
    group: Infrastruktur
    tags: [ipam]

Dateien werden nach Namen sortiert geladen; bei gleicher id überschreibt eine spätere Datei einzelne Felder (90-local.yml). Änderungen wirken nach höchstens zwei Sekunden, ohne Neustart. Format und Reihenfolge: CONCEPT.md, Abschnitt 3.

Betrieb über Umgebung oder Flags:

Variable Bedeutung
CERBERDASH_LISTEN Adresse, Standard :8080
CERBERDASH_CONF / CERBERDASH_CONF_EXTRA beschreibbares conf.d / weitere, nur lesend (:-getrennt)
CERBERDASH_ADMIN_TOKEN Freigabe und Entfernen von Anmeldungen
CERBERDASH_ANNOUNCE_TOKENS Anmeldungen mit einem dieser Tokens sind sofort aktiv
CERBERDASH_NETBOX_URL, CERBERDASH_NETBOX_TOKEN NetBox-Services mit Custom Field dashboard = true

Alle Variablen: CONCEPT.md, Abschnitt 7.

Dienste anmelden

contrib/cerberdash-announce --id homepage-1 --title Homepage --url http://192.168.40.31:3000/

Das Skript findet Cerberdash selbst (CERBERDASH_URL → DNS-SRV _cerberdash._tcp.<domain> → mDNS) und braucht nur Python 3. Ohne Token wartet die Anmeldung auf Freigabe:

curl -H "Authorization: Bearer $ADMIN" http://dash:8080/api/v1/pending
curl -X POST -H "Authorization: Bearer $ADMIN" http://dash:8080/api/v1/pending/homepage-1/approve

Installation

make build
install -m 0755 cerberdash /usr/local/bin/
install -m 0644 contrib/cerberdash.service /etc/systemd/system/
mkdir -p /etc/cerberdash/conf.d && cp examples/conf.d/*.yml /etc/cerberdash/conf.d/
systemctl enable --now cerberdash

Deine Dateien liegen in /etc/cerberdash/conf.d, was Cerberdash selbst schreibt (Anmeldungen, NetBox) in /var/lib/cerberdash/conf.d. Später als iac-App (iac-cerberdash).

Kein Login: Wer den Port erreicht, sieht das Dashboard. Ins private Netz oder hinter einen Reverse Proxy mit Anmeldung. Schreiben geht nur mit Token.

Entwicklung

make test         # go vet, go test, Python-Syntax
make size         # Größe von Binärdatei und Oberfläche

Aufbau: CONCEPT.md, Abschnitt 8.