Self-Hosted-Setup
Kurz gesagt: Diese Seite richtet sich an Betreiber:innen, die Eigen Mesh auf ihrer eigenen Infrastruktur mit Docker deployen und betreiben. Endnutzer:innen auf deiner Instanz registrieren sich weiterhin über die normale App — deine Aufgabe ist es, zuerst den Stack zu provisionieren.
Nutze diesen Weg, wenn du Eigen auf deinem eigenen Stack deployst und betreibst (Docker Compose). Endnutzer:innen durchlaufen nach der Anmeldung weiterhin die Managed-Onboarding-Tour; deine Aufgabe ist es, zuerst den Stack, die Secrets und optionale Zahlungs-/Social-Integrationen zu provisionieren.
Siehe auch Überblick & Schnellstart für Docker-Compose-Befehle und Coolify-Hinweise.
Anzulegende Konten (Betreiber:in)
Lege nur die Konten an, die zu deiner geplanten Abrechnungs- und Auth-Konfiguration passen.
| Konto | Wann du es brauchst | Wofür es genutzt wird |
|---|---|---|
| EUrouter | Plattform-Guthaben und/oder EUrouter-BYOK | Gateway für Chat + Embeddings über Routing-Regeln (LLM_BASE_URL, SERVICE_API_KEY_EUROUTER, LLM_RULE_CHAT, LLM_RULE_EMBEDDING). |
| OpenRouter | Plattform-Guthaben, OpenRouter-BYOK und/oder Sprache-zu-Text | Gateway für Chat, Embeddings und Diktat-STT (OPENROUTER_BASE_URL, SERVICE_API_KEY_OPENROUTER oder OPENROUTER_API_KEY, optional LLM_MODEL_*). |
| PayPal Developer | Wallet-Aufladungen (Plattform-Guthaben) | In-App-Guthabenkäufe (PAYPAL_API_BASE, PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET). Weglassen, wenn alle Nutzer:innen ausschließlich BYOK verwenden. |
| Google Cloud OAuth-Client | Optionale Social-Anmeldung | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET — Callback {ORIGIN}/api/auth/callback/google. |
| GitHub OAuth-App | Optionale Social-Anmeldung | GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET — Callback {ORIGIN}/api/auth/callback/github. |
Für Postgres, pgvector oder Apache AGE brauchst du keine separaten Konten — die laufen innerhalb des Compose-Stacks.
Umgebungsvariablen (Betreiber:in)
Kopiere .env.example nach .env im eigen-Repository und setze die Werte vor docker compose up. Die vollständige Referenz findest du unter Umgebungsvariablen. Gruppiert nach Zweck:
Erforderlich — ohne diese läuft die App nicht sicher
| Variable | Zweck | Wie setzen |
|---|---|---|
BETTER_AUTH_SECRET |
Session-Verschlüsselung | openssl rand -base64 32 |
AGE_GRAPH_NAME |
Name des Apache-AGE-Graphen (muss zur Postgres-Initialisierung passen) | eigen_graph (Standard) |
ORIGIN |
Öffentliche URL, die Nutzer:innen und OAuth-Callbacks verwenden | z. B. https://eigen.example.com |
TENANT_MASTER_KEY |
Master-Key für Envelope-Verschlüsselung pro Tenant | Starkes Zufalls-Secret (siehe Tenant-Encryption-Runbook) |
DATABASE_URL |
Connection-String der App | Compose-Standard: postgres://eigen:eigen@db:5432/eigen |
DATABASE_ADMIN_URL |
Migrationen, RLS, pg_cron | Für Self-Hosting dieselbe Superuser-URL wie oben |
Committe .env niemals und teile TENANT_MASTER_KEY und BETTER_AUTH_SECRET mit niemandem. Ein Rotieren von TENANT_MASTER_KEY ohne Neu-Verschlüsselung zerstört bestehende Tenant-Daten.
Erforderlich für LLM — mindestens ein Abrechnungsweg muss funktionieren
Option A — Plattform-Guthaben (Eigen-Wallet, Standard-Abrechnungsmodus für Nutzer:innen)
Nutzer:innen laden über PayPal auf; die App nutzt dabei deine Service-Account-Gateway-Keys.
| Variable | Zweck |
|---|---|
SERVICE_API_KEY_EUROUTER |
EUrouter-Service-Key (Plattform-Abrechnung) |
LLM_BASE_URL |
EUrouter-API-Origin (ohne abschließenden Slash), z. B. https://api.eurouter.ai/v1 |
LLM_RULE_CHAT |
EUrouter-Routing-Regel-UUID für Chat |
LLM_RULE_EMBEDDING |
EUrouter-Routing-Regel-UUID für Embeddings |
SERVICE_API_KEY_OPENROUTER |
OpenRouter-Service-Key (falls OpenRouter als Plattform-Provider genutzt wird) |
OPENROUTER_BASE_URL |
OpenRouter-API-Origin, z. B. https://openrouter.ai/api/v1 |
PAYPAL_API_BASE |
https://api-m.sandbox.paypal.com (Sandbox) oder https://api-m.paypal.com (Live) |
PAYPAL_CLIENT_ID |
Client-ID der PayPal-REST-App |
PAYPAL_CLIENT_SECRET |
Secret der PayPal-REST-App |
Option B — Nur BYOK (Nutzer:innen hinterlegen Keys unter Einstellungen → LLM → BYOK)
Du kannst trotzdem Env-Fallbacks setzen, die genutzt werden, wenn eine Nutzerin oder ein Nutzer keine Keys in der Datenbank gespeichert hat:
| Variable | Zweck |
|---|---|
LLM_BASE_URL |
EUrouter-Base-URL |
LLM_API_KEY |
EUrouter-API-Key als Fallback |
LLM_RULE_CHAT / LLM_RULE_EMBEDDING |
EUrouter-Regel-UUIDs |
OPENROUTER_BASE_URL |
OpenRouter-Base-URL |
OPENROUTER_API_KEY |
OpenRouter-API-Key als Fallback |
Nutzer:innen mit BYOK müssen ihre Zugangsdaten in der UI konfigurieren (oder sich auf diese Env-Fallbacks verlassen) und den Abrechnungsmodus in den Einstellungen auf Eigenen Key nutzen setzen.
Empfohlen für den Produktionsbetrieb
| Variable | Zweck |
|---|---|
POSTGRES_PASSWORD |
Starkes DB-Passwort (vom Standard eigen ändern) |
EIGEN_APP_DB_PASSWORD |
Passwort für die RLS-App-Rolle eigen_app |
ADMIN_CONSOLIDATION_KEY |
Sichert den nächtlichen Consolidation-Webhook (openssl rand -hex 32) |
CONSOLIDATION_INTERNAL_URL |
URL, über die Postgres/pg_cron die App erreicht (Compose: http://app:3000) |
Optional
| Variable | Zweck |
|---|---|
VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_SUBJECT |
Web-Push-Benachrichtigungen (npx web-push generate-vapid-keys) |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET |
Google-Anmeldung |
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET |
GitHub-Anmeldung |
ADMIN_NAME, ADMIN_EMAIL, ADMIN_PASSWORD |
Bootstrap des ersten Admin-Kontos beim Containerstart (siehe unten) |
LLM_MIN_REQUEST_INTERVAL_MS |
Globales LLM-Throttling (Standard 1000 ms) |
EMBEDDING_COMPRESS_INTENSITY |
Kompression der Embedding-Payload (lite | full | ultra) |
Schritte für die Erstbereitstellung
Klonen und konfigurieren
git clone https://github.com/your-org/eigen.git && cd eigen cp .env.example .env # .env bearbeiten — die oben genannten Pflichtvariablen setzenStack starten
docker compose up -d --buildSchema und RLS anwenden (nur beim ersten Deploy; der Produktions-Entrypoint führt Migrationen bei späteren Starts automatisch aus)
npm install npm run db:push:force npm run db:rlsOptional: Admin-Konto bootstrappen — setze
ADMIN_NAME,ADMIN_EMAILundADMIN_PASSWORDin.env, bevor du den App-Container startest, oder führe aus:docker compose exec app node scripts/create-admin.mjsDas Skript ist idempotent (überspringt, falls die E-Mail bereits existiert). Admin-Nutzer:innen sehen weiterhin die Einführungstour, bis sie das Onboarding abschließen oder überspringen.
Verifizieren — öffne
ORIGINim Browser, registriere dich oder melde dich als Admin an, absolviere die Einführungstour und prüfe die LLM-Abrechnung (Credits oder BYOK), bevor du testweise erfasst.
Self-Hosted-Registrierung für Endnutzer:innen
Nutzer:innen können Get early access — self-hosted öffnen (/signup?plan=self-hosted). Wie bei der Managed-Registrierung ist die Plan-Kennzeichnung rein informativ; das Verhalten hängt davon ab, wie du die Umgebungsvariablen und PayPal/BYOK konfiguriert hast, nicht vom Query-Parameter.
Verweise sie auf:
- Einstellungen → LLM → Credits, wenn du Plattform-Guthaben und PayPal aktiviert hast.
- Einstellungen → LLM → BYOK, wenn sie ihre eigenen EUrouter- oder OpenRouter-Keys nutzen sollen.
Kurzreferenz: wer konfiguriert was
| Aspekt | Managed (Endnutzer:in) | Self-Hosted (Betreiber:in) | Self-Hosted (Endnutzer:in) |
|---|---|---|---|
| Docker / Postgres / AGE | Eigen | Du | — |
BETTER_AUTH_SECRET, TENANT_MASTER_KEY, ORIGIN |
Eigen | Du | — |
Service-Gateway-Keys (SERVICE_API_KEY_*) |
Eigen | Du | — |
| PayPal (Wallet-Aufladungen) | Eigen (falls angeboten) | Du (optional) | Zahlt über PayPal-UI |
| Persönliche LLM-Keys | Nur bei Wechsel zu BYOK | — | BYOK-Tab in den Einstellungen |
| Einführungstour | Ja | — | Ja |
| Capture / Activity / Chat | Ja | — | Ja |
Problembehandlung
Siehe Problembehandlung für Deployment-, LLM-, MCP- und Verschlüsselungsprobleme.
Nächste Schritte
- Überblick & Schnellstart — Docker-Compose-Befehle und Coolify-Hinweise
- Umgebungsvariablen — vollständige Referenz
- Deployment-Modell — Philosophie zu Eigentum und Lizenzierung