Der ganze Stack
pacod-demo
Alle fünf Projekte als eine Plattform — eine Adresse, eine Anmeldung, ein Gateway. Probier es auf demo.pacod.io aus.
pacod-demo betreibt Identität, das KI-Gateway, die Agentenplattform, das CMS und die Wissensdatenbank gemeinsam auf einer Maschine, aus einer Konfigurationsdatei und mit einem make. Es übernimmt die Compose-Datei jedes Repositorys unverändert, teilt ihnen je eine Instanz jeder gemeinsamen Komponente zu, richtet die Produkte so ein, dass sie einander kennen, und prüft, dass sie als Einheit funktionieren.
- Apache-2.0
- Version 0.1.0
- Vorschau
Funktionen
-
Eine Startseite
Jedes Produkt mit einer Beschreibung, einem Screenshot und den Links zu seiner Verwaltung und seinen Websites.
-
Eine Anmeldung
Ein pacod-id-Realm für jedes Produkt. Wer sich bei einem anmeldet, ist bei allen angemeldet.
-
Ein Gateway
Die Modellaufrufe aller Produkte laufen über pacod-gw. Ohne Anbieterschlüssel antwortet sein Mock-Anbieter, und nichts verlässt die Maschine.
-
Von allem eines
Ein Caddy, ein PostgreSQL, ein Qdrant, ein Embedding-Dienst und ein Monitoring-Stack, im gemeinsamen Netzwerk pacod-net.
-
Die Dateien der Repositorys
Die fünf Compose-Dateien werden unverändert eingebunden; ein kleines Overlay pro Repository setzt nur Adressen und entfernt veröffentlichte Ports.
-
Dashboards und Mail
Grafana mit den Dashboards jedes Produkts, Prometheus für Ad-hoc-Abfragen und eine Ansicht für jede Mail, die der Stack verschickt.
-
Als eine Plattform geprüft
make verify prüft den Edge, Single Sign-on über die Produkte hinweg, einen Gateway-Schlüssel pro Produkt und, auf dem Laptop, einen Chat-Turn über das Gateway.
-
Bereit für eine Domain
HTTPS mit einem Zertifikat für die Domain und ihre Subdomains; öffentlich erreichbar, schließen sich die Werkzeuge, die nur auf einem Laptop sicher sind.
Einordnung
Ausprobieren
Die Demo läuft auf demo.pacod.io. Ihre Startseite zeigt jedes Produkt mit einer Beschreibung, einem Screenshot und den Links zu seiner Verwaltung und seinen Websites. Jedes Produkt hat seine eigene Subdomain:
| Adresse | Was |
|---|---|
demo.pacod.io |
Die Startseite: jedes Produkt mit seinen Links |
app.demo.pacod.io |
Die Agentenplattform (pacod-ap): Chat und Admin-Konsole |
console.demo.pacod.io |
Die Gateway-Konsole (pacod-gw): Anbieter, Modelle, Schlüssel, Nutzung |
gw.demo.pacod.io/v1 |
Die OpenAI-kompatible API des Gateways |
studio.demo.pacod.io |
Das CMS-Studio (pacod-cms) |
demo.demo.pacod.io |
Eine CMS-Demo-Website (auch minimal.demo.pacod.io) |
kb.demo.pacod.io |
Die Wissensdatenbank (pacod-kb) |
id.demo.pacod.io/admin |
Identitätsverwaltung (pacod-id) |
grafana.demo.pacod.io |
Dashboards aller Produkte |
Eine Anmeldung gilt für jedes Produkt: Wer sich bei einem anmeldet, ist bei allen angemeldet.
Warum es das gibt
Jedes pacod-Projekt läuft für sich allein, mit eigenen Kopien dessen, was es braucht: einer Datenbank, einem Edge, einer Anmeldung, einem Gateway. So probiert man eines aus. So sind sie aber nicht für das Zusammenspiel gedacht, und so sieht man nicht, was sie zusammen ergeben.
pacod-demo geht den umgekehrten Weg. Es bringt die fünf Produkte auf eine Maschine, als eine Plattform, mit je einer Instanz jeder gemeinsamen Komponente, und zeigt, was erst im Zusammenspiel sichtbar wird: eine Anmeldung, die jedes Produkt anerkennt, ein Gateway, über das jeder Modellaufruf läuft und das alle bepreist, und ein Satz Dashboards für den ganzen Stack.
Wie es aufgebaut ist
- Ein Netzwerk, eindeutige Namen. Alle fünf Repositorys folgen einer Konvention: Jeder
Container tritt dem externen Docker-Netzwerk
pacod-netbei, unter einem Namen, der über alle Repositorys eindeutig ist. Gemeinsame Komponenten heißenpacod-*; alles andere trägt das Präfix seines Besitzers (gw-,ap-,cms-,kb-). - Die eigenen Compose-Dateien der Repositorys. Jedes Repository teilt sein Compose-Setup in eine App-Datei mit seinen eigenen Diensten und eine Standalone-Datei mit eigenen Kopien der gemeinsamen Komponenten, um es allein zu betreiben. Die Demo bindet die fünf App-Dateien unverändert ein. Ein kleines Overlay pro Repository entfernt nur veröffentlichte Ports, verweist Einstellungen auf die Dateien der Demo und setzt die öffentlichen Adressen.
- Von jeder gemeinsamen Komponente eine. Ein Caddy, ein PostgreSQL mit einer Datenbank und
einer Eigentümerrolle pro Produkt, ein Qdrant, ein Embedding-Dienst, ein pacod-id, ein Gateway,
eine Mail-Senke und ein Monitoring-Stack (Prometheus, Alertmanager, Grafana, der
OpenTelemetry-Collector). Jede baut auf der Definition auf, die ein Repository bereits
mitbringt, und übernimmt die Beiträge der Produkte aus deren
platform/-Verzeichnissen: Caddy-Site-Blöcke, Datenbankskripte, Prometheus-Jobs, Regeln und Dashboards. - Produkteigene Speicher bleiben beim Produkt. Das ClickHouse des Gateways, das MongoDB des CMS (eine Datenbank pro Website) und Gotenberg sowie Redis und pgbouncer der Agentenplattform.
- Der Bootstrap steuert die eigenen Skripte der Produkte: den Gateway- und Identitäts-Bootstrap von pacod-ap und den Provisioner von pacod-cms. Er erzeugt die Gateway-Schlüssel und Dienst-Tokens, mit denen die Produkte einander erreichen.
Konfiguration
Zwei Dateien. demo.env ist die Konfiguration und wird eingecheckt: Domain und Ports, das
Zertifikat, die E-Mail des ersten Administrators, die Modelle jedes Produkts, das
Embedding-Backend und die optionalen Komponenten. demo.local.env enthält die Geheimnisse der
Maschine, das Passwort des Administrators und die Schlüssel der LLM-Anbieter; git ignoriert sie,
und was sie setzt, gewinnt.
# demo.local.env
DEMO_ADMIN_PASSWORD=a-long-passphrase
ANTHROPIC_API_KEY=sk-...
LLM-Anbieter. Ohne Schlüssel geht jeder Modellaufruf an den Mock-Anbieter des Gateways: Die
Demo läuft offline und make verify ist deterministisch, aber die Chat-Antworten sind
vorgefertigt. Trag einen Schlüssel ein und führe make bootstrap aus, dann ist das Gateway mit
dem echten Anbieter eingerichtet.
Das Embedding-Backend wird beim ersten make up festgelegt, weil die gespeicherten Vektoren
davon abhängen. Die Voreinstellung auto nimmt das echte BGE-M3-Modell, wenn Docker genug
Speicher dafür hat, und sonst einen leichten Ersatz.
Die optionale Komponente ingestion betreibt die Dokumentenaufnahme der Agentenplattform und
lädt die Wissensbasis des Starter-Agenten. Sie ist ein großes Image und braucht 16 GB Speicher für
Docker.
Auf einer Domain oder auf dem Laptop
Mit einem Zertifikat für die Domain und ihre Subdomains antwortet der Stack über HTTPS, und einfaches HTTP leitet nur weiter. Ist die Demo über die Maschine hinaus erreichbar, schließt sie, was nur auf einem Laptop sicher ist: Die Mail-Ansicht, Prometheus und Grafana fragen nach E-Mail und Passwort des Administrators, die Startseite nennt den Administrator nicht, und die Entwicklungs-Tokens der Agentenplattform sind aus.
Für eine Demo nur auf einer Maschine setzt du DEMO_DOMAIN=localhost und DEMO_HTTP_PORT=8800
und lässt das Zertifikat leer. Dann läuft alles über einfaches HTTP unter
http://<name>.localhost:8800, was Browser ohne DNS auflösen.
Was es braucht
- Docker mit Compose 2.24 oder neuer, und make. Alles andere, von der Erzeugung der Geheimnisse bis zu den Prüfungen, läuft in Containern.
- Die fünf Projekt-Repositorys neben diesem ausgecheckt.
- Etwa 8 GB Speicher für Docker. Der ganze Stack mit dem echten Embedding-Modell braucht etwa 5 GiB, mit dem leichten Ersatz etwa 4 GiB.
- Etwa 30 GiB Plattenplatz für die Images. Das erste
make upbaut jedes Image aus dem Quellcode, zwei Rust-Workspaces, einen Maven-Build, mehrere Python-Images und zwei SvelteKit-Apps, und dauert 30 bis 60 Minuten. Spätere Starts dauern etwa zwei Minuten.
make down hält den Stack an und behält die Daten; make clean entfernt alles, was die Demo
angelegt hat. Das README enthält alle
Einstellungen und eine Tabelle zur Fehlerbehebung.
Tech-Stack
- Geschrieben in
- Python
- Shell
- Tech-Stack
- Docker Compose
- Caddy
- PostgreSQL
- Qdrant
- Prometheus
- Grafana
- OpenTelemetry
- Mailpit
- Playwright
Schnellstart
mkdir pacod && cd pacodfor r in pacod-demo pacod-id pacod-gw pacod-ap pacod-cms pacod-kb; do git clone https://github.com/pacod22/$r.git; donecd pacod-demomake upmake verifyFunktioniert mit
-
pacod-id
Der eine Identity Provider des Stacks, mit einem Realm, über den sich jedes Produkt anmeldet.
-
pacod-gw
Das eine Gateway des Stacks; der Bootstrap gibt jedem Produkt einen eigenen Gateway-Schlüssel.
-
pacod-ap
Betreibt den Starter-Agenten, einen kleinen fiktiven Helpdesk, mit Chat und Admin-Konsole.
-
pacod-cms
Betreibt das Studio und zwei Demo-Websites, Demo Journal und Demo Notes.
-
pacod-kb
Betreibt die Wissensdatenbank auf dem gemeinsamen Qdrant, PostgreSQL und Embedding-Dienst.
Lizenz
Apache-2.0