Personal Self-Hosted

Betreibe deinen eigenen Contextify Cloud-Server, von Anfang bis Ende.

Zu einer laufenden Installation kommst du auf zwei Wegen: Überlasse die Einrichtung deinem Coding-Agenten oder gehe die vier manuellen Schritte selbst durch. In beiden Fällen betreibst du einen Server: Starte ihn, setze HTTPS davor, verbinde Contextify und prüfe, ob Suche und Recall funktionieren.

Personal Self-Hosted ist der kostenlose Weg für einen einzelnen Nutzer, den Contextify Cloud-Synchronisierungsserver auf eigener Hardware zu betreiben. Der Quellcode ist unter der Functional Source License, Version 1.1, Apache 2.0 Future License (FSL-1.1-Apache-2.0) verfügbar. Jedes Release geht zwei Jahre nach seiner Veröffentlichung in die Apache License 2.0 über, und der Quellcode liegt auf GitHub.

Schnellster Weg

Lass deine KI die Einrichtung übernehmen

Du nutzt bereits einen Coding-Agenten. Gib ihm diese Anleitung, und er richtet den Server für dich ein. Er führt jeden Befehl in deiner Shell aus und fragt dich bei den wichtigen Entscheidungen. Alles läuft auf deinem Rechner.

Gib deiner KI diesen Prompt

Kopiere diesen Prompt in Claude Code, Codex oder einen anderen Coding-Agenten. Er verweist auf eine Anleitung, die wir aktuell halten. So bleibt der Prompt kurz und beständig.

Help me set up a self-hosted Contextify server on this machine. Read the runbook at https://contextify.sh/docs/self-hosted/agent-setup.md and follow it exactly: run the commands in my shell, show me what you are doing, generate any secrets locally on this machine, and pause to ask me at every step marked [ASK ME]. When it is done, verify the server is healthy and my Contextify app can search across it.

Die Anleitung liegt unter contextify.sh/docs/self-hosted/agent-setup.md. Wenn dein Agent keine URL abrufen kann, öffne sie und füge ihren Inhalt in den Chat ein.

Was deine KI übernimmt und was du entscheidest

  • Sie führt Befehle in deinem Terminal aus und zeigt dir jeden davon.
  • Sie erzeugt Geheimnisse auf deinem Rechner und schreibt sie nur in die Server-Konfigurationsdatei, nicht in den Chat.
  • Sie hält bei den wichtigen Entscheidungen an und fragt dich nach der URL deines Servers, vor jeder Änderung außerhalb des Projekts und bevor sie dein Konto erstellt.
  • Du kannst jederzeit stoppen.

Während der Einrichtung wird nichts übertragen. Sobald der Server läuft, wird dein Verlauf ausschließlich mit dem gerade erstellten Server synchronisiert.

Demnächst: Wenn du die CLI contextify mit Claude Code oder Codex nutzt, wird ein integrierter Einrichtungs-Skill daraus einen einzigen Befehl machen. Er erscheint in einem künftigen Contextify-Release. Nutze bis dahin den Prompt oben.

Selbst einrichten

Bevor du beginnst

Du möchtest die Einrichtung selbst ausführen oder genau lesen, was dein Agent tun würde? Hier sind dieselben vier Schritte von Anfang bis Ende.

Ein Rechner, den du betreibst

Ein Mac mini, Linux-Rechner oder privater Tailnet-Host mit installiertem Docker. Ein freier Rechner in deinem Netzwerk reicht; Contextify-Infrastruktur ist an diesem Verbindungsweg nicht beteiligt.

Docker

Docker mit Compose v2 (docker compose). Der Stack baut das API-Image lokal und betreibt PostgreSQL daneben.

Der öffentliche Quellcode

Das Repository contextify-cloud-self-hosted enthält den Docker-Stack, den du betreibst.

Lege zuerst die URL deines Servers fest. Die Adresse, die deine Rechner nutzen, wird in der Server-Konfiguration und im TLS-Zertifikat verankert. Wähle sie deshalb, bevor du Konfiguration schreibst. Ein Tailscale-HTTPS-Hostname (your-host.your-tailnet.ts.net) ist die einfachste Wahl: Er gibt dir einen stabilen Namen und ein gültiges Zertifikat, ohne etwas ins öffentliche Internet zu stellen. Du kannst auch einen LAN-Hostnamen mit eigenem Zertifikat nutzen. Verwende diese URL überall, wo die folgenden Schritte nach deiner Server-URL fragen.

Schritt 1: Server starten

Klone den öffentlichen Quellcode und erstelle deine Umgebungsdatei aus dem Beispiel:

git clone https://github.com/PeterPym/contextify-cloud-self-hosted.git
cd contextify-cloud-self-hosted
cp .env.example .env

Setze deine Geheimnisse und URLs in .env

Erzeuge drei Geheimnisse in der Shell und kopiere jeden Wert in .env. Füge keinen Befehl $(...) in die Datei ein: Docker Compose liest .env wörtlich und führt keine Befehle aus. Eine Zeile $(openssl ...) würde deshalb zu deinem tatsächlichen Geheimnis werden.

openssl rand -hex 32    # copy into API_SECRET_KEY
openssl rand -hex 20    # copy into DB_PASSWORD
openssl rand -hex 32    # copy into CONTEXTIFY_SELF_HOSTED_SETUP_TOKEN

Bearbeite dann .env, sodass diese Werte gesetzt sind:

Variable Vorgehen
API_SECRET_KEY Ersetze den mitgelieferten Wert dev-secret-change-me durch deinen erzeugten Hexwert aus 32 Bytes. Mit dem Standardwert verweigert der Server den Start.
DB_PASSWORD Ersetze den Standardwert contextify durch deinen erzeugten Hexwert aus 20 Bytes. Setze ihn vor dem ersten Start (siehe Warnung unten).
CONTEXTIFY_SELF_HOSTED_SETUP_TOKEN Füge diese Zeile hinzu. Sie fehlt in .env.example, und ohne sie startet der Stack nicht. Sie schützt die einmalige Einrichtungsseite für das Eigentümerkonto.
ALLOWED_ORIGINS Ersetze den Beispielwert vollständig durch die URL deines Servers. Der Standard enthält Adressen, die du nicht brauchst.
EMAIL_BASE_URL, INVITATION_BASE_URL Ändere beide vom localhost-Standard auf die URL deines Servers.
SELF_HOSTED Lass den Wert auf true.

Setze DB_PASSWORD vor dem ersten Start. PostgreSQL übernimmt das Passwort nur beim erstmaligen Erstellen seines Daten-Volumes. Wenn du den Stack mit dem Standard startest und danach DB_PASSWORD änderst, kann die API die Datenbank nicht mehr erreichen. Eine spätere Änderung bedeutet, das Datenbank-Volume zurückzusetzen.

Die Zeile DATABASE_URL in .env.example wird von dieser Compose-Datei ignoriert. Sie bildet ihre eigene Verbindungszeichenfolge aus DB_PASSWORD, du musst die Zeile also nicht bearbeiten. Die Anmeldung erfolgt per Passwort; ein E-Mail-Anbieter ist deshalb optional. Lass RESEND_API_KEY leer, dann werden Anmelde-E-Mails ins Serverprotokoll geschrieben statt gesendet.

Starte den Stack

docker compose -f docker-compose.selfhosted.yml up -d --build

Der erste Durchlauf baut das API-Image. Auf einem kleinen Rechner dauert das einige Minuten. Prüfe den Fortschritt mit docker compose -f docker-compose.selfhosted.yml ps. Die API bindet standardmäßig an Loopback (127.0.0.1:8443); Schritt 2 setzt HTTPS davor.

Prüfe den Zustand

curl -s http://127.0.0.1:8443/api/v1/health

Ein funktionsfähiger selbst gehosteter Server antwortet mit:

{"status": "ok", "self_hosted": true}

Du erstellst das Eigentümerkonto in Schritt 2, sobald dein tatsächlicher Hostname und HTTPS eingerichtet sind. So zeigt der Setup-Link auf die Adresse, die deine Rechner wirklich nutzen werden.

Schritt 2: Absichern

Die API lauscht auf einem Loopback-Port. Du erreichst sie über HTTPS unter einem stabilen Hostnamen mit passendem TLS-Zertifikat. Empfohlen ist Tailscale HTTPS: Es setzt HTTPS vor den Loopback-Port der API unter einem Hostnamen .ts.net, der in deinem privaten Tailnet bleibt. Der Server wird also nie dem öffentlichen Internet zugänglich gemacht. Der vom Zertifikat bestätigte Hostname ist der Name, mit dem du Contextify konfigurierst. Den Server über einen eigenen Reverse-Proxy öffentlich erreichbar zu machen, ist eine fortgeschrittene Option. Dabei verantwortest du die Absicherung von TLS, Anmeldung und Rate-Limiting. Halte ihn privat, wenn du keinen konkreten Grund dagegen hast.

Anleitung zu TLS, VPN und Tailscale lesen

Passe die Konfiguration an die endgültige URL an

Sobald HTTPS vorgeschaltet ist, prüfe, dass der Server für genau diese Origin konfiguriert ist:

  • Prüfe die URL-Variablen

    Prüfe, dass ALLOWED_ORIGINS, EMAIL_BASE_URL und INVITATION_BASE_URL in .env alle deiner endgültigen HTTPS-Origin entsprechen.

  • Aktiviere sichere Cookies

    Setze FORCE_SECURE_COOKIES=true in .env. Im Beispiel ist der Wert zur lokalen HTTP-Prüfung auf false gesetzt.

  • Übernimm die Änderungen

    Führe docker compose -f docker-compose.selfhosted.yml up -d erneut aus, damit der Container die aktualisierte Umgebung übernimmt.

Erstelle das Eigentümerkonto

Personal Self-Hosted ist für einen einzelnen Nutzer bestimmt. Dieses erste Konto ist der Eigentümer des Servers. Erstelle es einmal unter deinem tatsächlichen HTTPS-Hostnamen. Öffne entweder die einmalige Einrichtungsseite in einem Browser:

https://your-server.example.ts.net/setup?token=YOUR_SETUP_TOKEN

Oder erstelle bei einem Server ohne grafische Oberfläche das Eigentümerkonto über die Kommandozeile:

docker compose -f docker-compose.selfhosted.yml exec api \
  python -m contextify_cloud create-admin --email you@example.com

Die Einrichtungsseite ist nur verfügbar, solange kein Eigentümer existiert. Ein falsches oder fehlendes Token führt zu 404. Sobald ein Eigentümer erstellt wurde, gibt die Seite 410 zurück und funktioniert nicht mehr. Das Feld für den Workspace-Namen im Formular ist nur eine Bezeichnung für deinen Einzelnutzerserver. Behandle das Setup-Token wie ein Passwort: Es erscheint in deiner URL und deinem Shell-Verlauf und wird unwirksam, sobald das Eigentümerkonto existiert.

Schritt 3: Contextify verbinden

Wenn der Server läuft und erreichbar ist, verbinde deine Rechner. Nutze die Server-URL und einen im Dashboard erstellten API-Schlüssel mit Synchronisierungsberechtigung.

Mac-App

Öffne Settings, dann Cloud, und wähle Contextify Cloud Self-Hosted. Gib deine Server-URL ein (den Hostnamen auf dem TLS-Zertifikat) und füge einen API-Schlüssel mit Synchronisierungsberechtigung ein.

Linux oder die CLI

Führe contextify cloud setup --url https://your-server.example.ts.net aus, danach contextify cloud status --json und contextify cloud sync.

Vollständige Verbindungsanleitung lesen

Wenn dein Server nur innerhalb eines VPN oder Tailnets erreichbar ist, führe die Verbindungsbefehle auf einem Gerät in diesem Netzwerk aus.

Schritt 4: Suche und Recall prüfen

Prüfe von einem verbundenen Rechner aus, ob der gesamte Weg hin und zurück funktioniert.

  • Prüfe die Synchronisierung

    Führe contextify cloud status --json aus und prüfe, ob aktuelle Projekte synchronisiert wurden. Du kannst auch das schreibgeschützte Dashboard unter deiner Server-URL öffnen.

  • Durchsuche deinen Verlauf

    Suche in der Mac-App oder im Dashboard nach einem Begriff, der sicher in einer früheren Sitzung vorkommt. Die Ergebnisse kommen von dem Server, den du betreibst.

  • Abruf durch deinen Assistenten

    Nutze Total Recall, um eine frühere Entscheidung, Fehlerbehebung oder Debugging-Sitzung in deine aktuelle Arbeit zu holen: /total-recall in Claude Code, $total-recall in Codex.

Gerade verbunden, aber die Suche ist leer? Die App schließt die lokale Indexierung vor der Synchronisierung ab. Ein großer erster Durchlauf kann deshalb dauern. Lies mehr zu Erfassung und Synchronisierung, um zu verstehen, was passiert, bevor die Cloud aufholt.

Weiter geht’s

Zuletzt aktualisiert: 10. Juli 2026