Eigen Mesh — Überblick & Schnellstart
Kurz gesagt: Diese Seite richtet sich an Betreiber:innen, die Eigen Mesh auf ihrem eigenen Server mit Docker betreiben möchten. Wenn du neu bei Eigen Mesh bist, starte mit Was ist Eigen Mesh?. Wenn Eigen deine Instanz betreibt, sieh dir Onboarding (Managed) an.
Für wen ist das gedacht
| Zielgruppe | Hier starten |
|---|---|
| Endnutzer:innen (Managed Hosting) | Was ist Eigen Mesh? → Onboarding (Managed) |
| Betreiber:innen (Self-Hoster) | Diese Seite → Umgebungsvariablen |
| Integratoren (MCP / API) | MCP-Überblick → Cursor oder Claude verbinden |
| Contributor:innen (eigen-Codebase) | Für Contributor:innen: Architektur-Übersicht |
Für Managed Hosting (Eigen betreibt den Stack) sieh dir Onboarding (Managed) an.
Self-Hosting
Eigen Mesh ist eine selbst hostbare Speicherinfrastruktur: Sie erfasst Gedanken, reichert sie im Hintergrund an und macht sie über hybride Suche und MCP-Tools abrufbar, die dein Assistent direkt aufrufen kann.
Über diese Dokumentationsseite
Du liest Docs, die aus dem Repository eigenWebsite veröffentlicht werden. Deploy-Befehle, Docker Compose und Datenbankmigrationen laufen gegen das separate eigen-Produkt-Repository — nicht gegen dieses Marketing-/Docs-Repo.
Stack
| Komponente | Technologie |
|---|---|
| App | SvelteKit mit @sveltejs/adapter-node auf Port 3000 |
| Datenbank | PostgreSQL 16 mit pgvector und Apache AGE |
| Auth | Better Auth, Drizzle ORM |
Architektur
| Service | Container | Rolle |
|---|---|---|
app |
eigen-app |
SvelteKit-App auf Port 3000 |
db |
eigen-db |
PostgreSQL 16 mit pgvector + Apache AGE auf Port 5432 |
Beide Services sind in `docker-compose.yaml` im eigen-Repository definiert.
Voraussetzungen
- Docker mit dem
docker compose-Plugin (Docker Desktop, OrbStack oder Linux) - Git
Node.js oder npm werden zum Deploy-Zeitpunkt nicht benötigt, außer du führst die Erstmigrationen vom Host aus.
Schnellstart
git clone https://github.com/your-org/eigen.git && cd eigen
cp .env.example .env
# .env bearbeiten — mindestens BETTER_AUTH_SECRET, TENANT_MASTER_KEY und die LLM-Gateway-Variablen setzen (siehe Umgebungsvariablen)
docker compose up -d --build
Beim ersten Deploy das Datenbankschema initialisieren:
npm install
npm run db:push:force
npm run db:rls
Die App ist unter http://<dein-host>:3000 erreichbar.
Profi-Tipp: Für automatisiertes Ersteinrichtungs-Setup füge einen Init-Schritt hinzu, der
node node_modules/drizzle-kit/bin.cjs push --force && node scripts/apply-rls.mjsausführt, bevor der App-Server startet. Siehe Produktionshärtung weiter unten.
Erforderliche Umgebungsvariablen
Die vollständige Tabelle findest du in der maßgeblichen Referenz Umgebungsvariablen. Mindestens vor dem Live-Gang nötig:
| Variable | Zweck |
|---|---|
BETTER_AUTH_SECRET |
Session-Verschlüsselung — openssl rand -base64 32 |
TENANT_MASTER_KEY |
Envelope-Verschlüsselung pro Tenant |
AGE_GRAPH_NAME |
Name des Apache-AGE-Graphen (Standard eigen_graph) |
ORIGIN |
Öffentliche URL, die Nutzer:innen und OAuth-Callbacks verwenden |
LLM_BASE_URL, LLM_API_KEY, LLM_RULE_CHAT, LLM_RULE_EMBEDDING |
LLM-Gateway für Chat und Embeddings |
Deployment auf Coolify
- Verbinde das eigen-Repository in Coolify.
- Wähle Docker Compose als Build Pack (Coolify erkennt
compose.yaml). - Füge Umgebungsvariablen aus Umgebungsvariablen hinzu.
- Deploye und warte, bis beide Container gestartet sind.
- Erstmigration — nutze den Execute Command-Befehl von Coolify auf dem Container
eigen-app:npx drizzle-kit push --force && node scripts/apply-rls.mjs
Warum Docker Compose?
Die App benötigt PostgreSQL mit pgvector und AGE. Das eigenständige Dockerfile baut nur das App-Image. Docker Compose ist der richtige Build Pack.
Port-Mapping
Standard-Mappings in Compose: 3000:3000 (App), 5432:5432 (Postgres). Ändere das in docker-compose.yaml, falls es auf deinem Host zu Konflikten kommt.
Ersteinrichtung
Der Compose-Stack wendet Migrationen nicht bei jedem Start automatisch an. Nach dem ersten docker compose up:
# Von einer Maschine mit Netzwerkzugriff auf die DB:
DATABASE_URL="postgres://eigen:eigen@<dein-host>:5432/eigen" npx drizzle-kit push --force
DATABASE_URL="postgres://eigen:eigen@<dein-host>:5432/eigen" node scripts/apply-rls.mjs
Oder aus dem App-Container heraus:
docker compose exec app npx drizzle-kit push --force
docker compose exec app node scripts/apply-rls.mjs
Produktionshärtung
Vor dem Live-Gang:
- Ändere alle Standard-Secrets (
BETTER_AUTH_SECRET,TENANT_MASTER_KEY, DB-Passwörter). - Setze
ORIGINauf deine tatsächliche Domain. - Postgres-Port einschränken — entferne
5432:5432aus Compose, damit die Datenbank nur intern erreichbar ist. - Nutze ein echtes LLM-Gateway mit OpenAI-kompatiblen Endpunkten
/api/v1/chat/completionsund/api/v1/embeddings. - Füge einen App-Healthcheck in
compose.yamlhinzu:
app:
healthcheck:
test: ["CMD", "node", "-e", "fetch('http://localhost:3000/api/health').then(r => process.exit(r.ok?0:1))"]
interval: 30s
retries: 3
- Pinne bei Bedarf den Node.js-Image-Patch (
node:22-bookworm-slimim eigen-Dockerfile).
Entwicklung (lokal, ohne Container)
Führe diese Befehle im eigen-Repository aus:
npm install
cp .env.example .env
npm run db:up # nur den Postgres-Container starten
npm run dev # SvelteKit-Dev-Server auf :5173
Datenbank-Lifecycle-Befehle
Alle folgenden Befehle werden im eigen-Repository ausgeführt:
| Befehl | Was er tut |
|---|---|
npm run db:up |
Startet nur den db-Container |
npm run db:down |
Stoppt alle Compose-Services |
npm run db:reset |
Stoppt Services und löscht das DB-Volume (destruktiv) |
npm run db:push |
Wendet das Drizzle-Schema an (interaktiv) |
npm run db:push:force |
Wendet das Drizzle-Schema an (nicht interaktiv) |
npm run db:rls |
Wendet Row-Level-Security-Policies an |
npm run db:init |
db:push:force + db:rls |
npm run stack:up |
Baut und startet alle Container |
npm run stack:down |
Stoppt alle Container |
Problembehandlung
Siehe Problembehandlung für Deployment-, LLM- und MCP-Probleme.
Nächste Schritte
- Onboarding (Managed) — für Managed-Nutzer:innen
- Self-Hosted-Setup — Betreiber-Provisionierung
- MCP-Überblick — verbinde deinen Assistenten
- Wie das Gedächtnis funktioniert — Erfassen, Abruf, Konsolidierung
Lizenz
Apache-2.0. Siehe LICENSE im eigen-Repository.