Karakeep mit Docker installieren: Bookmark-Everything-App mit KI-Auto-Tagging
Karakeep ist die selbstgehostete Bookmark-Everything-App mit ~26.000 GitHub-Stars: Links, Notizen, Bilder und PDFs in einem zentralen, KI-getaggten und volltext-durchsuchbaren Wissensspeicher – per Docker Compose in 15 Minuten aufgesetzt.

Wer Links, Notizen, Bilder und PDFs aus dem Alltag zuverlässig wiederfinden will, braucht mehr als einen Browser-Lesezeichenordner. Karakeep ist eine selbstgehostete „Bookmark-Everything"-App, die drei Dinge vereint, die sonst selten zusammenkommen: vollständiges Seiten-Archiving per Headless-Browser, Volltextsuche über alle gespeicherten Inhalte und KI-gestütztes Auto-Tagging, das neue Einträge automatisch kategorisiert. Mit rund 26.000 GitHub-Stars, aktiver Entwicklung unter AGPL-3.0 und Multi-Arch-Images für AMD64 und ARM64 ist Karakeep derzeit der mächtigste frei verfügbare Self-Hosted-Wissensspeicher. Diese Anleitung zeigt dir, wie du Karakeep mit Docker Compose auf einem beliebigen Linux-Host – also auch auf einem NAS oder einer günstigen VPS – in etwa 15 Minuten zum Laufen bringst.
Voraussetzungen
- Docker Engine ≥ 24.x und Docker Compose Plugin ≥ 2.x (
docker compose-Syntax) auf dem Host installiert. Noch nicht dabei? Dann zuerst die Docker-und-Compose-Grundlage lesen. - Linux-Host, VM oder NAS mit Docker-Support (Ubuntu, Debian, Synology mit Docker-Paket, etc.); läuft nativ auf AMD64 und ARM64.
- Mindestens 1 GB RAM frei für alle drei Container (empfohlen: 2 GB+); etwa 1–2 GB Speicherplatz für Images beim ersten Pull.
- Genügend Datenspeicher für Assets und gecrawlte Seiten – je nach Nutzungsintensität sind 10 GB+ realistisch.
opensslauf dem Host (zur Secret-Generierung); auf allen gängigen Linux-Systemen vorinstalliert.- Optional: Reverse Proxy (Nginx Proxy Manager, Traefik oder Caddy) für HTTPS-Betrieb. Tipp: Traefik als Docker-Reverse-Proxy zeigt die HTTPS-Anbindung.
- Optional: OpenAI-Account mit Prepaid-Guthaben oder laufende Ollama-Instanz für KI-Features.
Schritt 1: Projektordner anlegen
Erstelle einen dedizierten Ordner für den Karakeep-Stack. Alle Konfigurationsdateien kommen hier rein; die eigentlichen Daten landen in benannten Docker-Volumes.
mkdir -p /opt/karakeep
cd /opt/karakeepVerifizieren: ls /opt/karakeep zeigt das leere Verzeichnis ohne Fehlermeldung.
Schritt 2: Secrets generieren und .env anlegen
Karakeep benötigt zwei kryptografische Secrets, die du niemals als einfachen String setzen solltest. Generiere beide mit openssl:
openssl rand -base64 36
# Ausgabe 1 kopieren → NEXTAUTH_SECRET
openssl rand -base64 36
# Ausgabe 2 kopieren → MEILI_MASTER_KEYLege nun die .env-Datei im Projektordner an und trage die generierten Werte ein:
# /opt/karakeep/.env
# --- Image-Version (release = immer aktuell stabil; alternativ z.B. 0.32.0) ---
KARAKEEP_VERSION=release
# --- Pflicht-Secrets (niemals triviale Strings!) ---
NEXTAUTH_SECRET=HIER_DEINEN_GENERIERTEN_WERT_1_EINTRAGEN
MEILI_MASTER_KEY=HIER_DEINEN_GENERIERTEN_WERT_2_EINTRAGEN
# --- Basis-URL (PFLICHT: bei Reverse-Proxy auf öffentliche HTTPS-URL ändern) ---
NEXTAUTH_URL=http://localhost:3000
# --- KI-Features (optional, aber empfohlen für Auto-Tagging) ---
# OPENAI_API_KEY=sk-...
# Alternativ Ollama (NICHT localhost verwenden, siehe Troubleshooting):
# OLLAMA_BASE_URL=http://host.docker.internal:11434
# INFERENCE_TEXT_MODEL=llama3
# --- Sicherheit: nach Anlegen des ersten Kontos auf true setzen ---
DISABLE_SIGNUPS=false
# --- SQLite-Performance (empfohlen) ---
DB_WAL_MODE=trueSchütze die Datei vor unbefugtem Lesezugriff:
chmod 600 /opt/karakeep/.envVerifizieren: ls -la /opt/karakeep/.env zeigt Berechtigungen -rw-------. Prüfe außerdem, dass beide Secrets tatsächlich eingetragen und nicht leer sind.
Schritt 3: compose.yaml anlegen
Erstelle die compose.yaml im Projektordner. Der Stack besteht aus drei Services: web (Karakeep-Haupt-Container mit Web-UI und Worker), chrome (Headless-Browser für Crawling und Screenshots) und meilisearch (Volltext-Suchindex). Besonderheit dieser Konfiguration gegenüber dem Upstream-Original: ein explizites depends_on sorgt für einen robusteren Start, insbesondere auf langsameren Systemen.
# /opt/karakeep/compose.yaml
services:
web:
image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release}
restart: unless-stopped
volumes:
- data:/data
ports:
- "3000:3000"
env_file:
- .env
environment:
MEILI_ADDR: http://meilisearch:7700
BROWSER_WEB_URL: http://chrome:9222
DATA_DIR: /data
depends_on:
meilisearch:
condition: service_started
chrome:
condition: service_started
chrome:
image: gcr.io/zenika-hub/alpine-chrome:124
restart: unless-stopped
command:
- --no-sandbox
- --disable-gpu
- --disable-dev-shm-usage
- --remote-debugging-address=0.0.0.0
- --remote-debugging-port=9222
- --hide-scrollbars
meilisearch:
image: getmeili/meilisearch:v1.41.0
restart: unless-stopped
env_file:
- .env
environment:
MEILI_NO_ANALYTICS: "true"
volumes:
- meilisearch:/meili_data
volumes:
data:
meilisearch:Die wichtigsten Eckdaten des Stacks im Überblick:
| Parameter | Wert | Hinweis |
|---|---|---|
| Image (Karakeep) | ghcr.io/karakeep-app/karakeep:release | Multi-Arch AMD64/ARM64; aktuell v0.32.0 |
| Image (Suche) | getmeili/meilisearch:v1.41.0 | Gepinnte Version – nicht beliebig upgraden |
| Image (Browser) | gcr.io/zenika-hub/alpine-chrome:124 | Headless Chromium für Crawling |
| Port nach außen | 3000 | Web-UI und API; Pflicht |
| Ports intern | 7700, 9222 | Nur Container-intern, nicht freigeben |
Volume data | /data im Container | SQLite-DB + Assets; Pflicht-Backup |
Volume meilisearch | /meili_data im Container | Suchindex; bei Verlust neu indexieren |
| Datenbank | SQLite | Kein separater DB-Server nötig |
Verifizieren: Prüfe die Syntax der Datei mit docker compose -f /opt/karakeep/compose.yaml config. Die Ausgabe zeigt die aufgelöste Konfiguration ohne Fehlermeldung.
Schritt 4: Stack starten
Starte alle drei Container im Hintergrund. Beim ersten Start werden die Images gezogen – das dauert je nach Verbindung 1–3 Minuten.
cd /opt/karakeep
docker compose up -dPrüfe danach den Status aller Services:
docker compose psErwartete Ausgabe (alle Services Up oder running):
NAME IMAGE STATUS
karakeep-web-1 ghcr.io/karakeep-app/karakeep:release Up
karakeep-chrome-1 gcr.io/zenika-hub/alpine-chrome:124 Up
karakeep-meilisearch-1 getmeili/meilisearch:v1.41.0 UpPrüfe die Logs auf Fehler:
docker compose logs --tail=50 web
docker compose logs --tail=20 meilisearchVerifizieren: curl -I http://localhost:3000 liefert HTTP/1.1 200 OK oder einen 302-Redirect auf die Login-Seite. Im Web-Log erscheinen keine Fehler zu fehlenden Umgebungsvariablen oder Volume-Problemen.
Schritt 5: Erst-Einrichtung im Browser
Öffne http://<HOST-IP>:3000 im Browser. Beim ersten Aufruf wirst du direkt zur Registrierungsseite weitergeleitet – lege dort dein Admin-Konto an. Nach dem Login stehen dir alle Funktionen zur Verfügung: Bookmarks per URL-Eingabe oder Drag & Drop hinzufügen, Notizen anlegen und Bilder hochladen.
Sobald dein erstes Konto angelegt ist, empfiehlt es sich, neue Registrierungen zu sperren. Öffne /opt/karakeep/.env und setze:
DISABLE_SIGNUPS=trueDamit die Änderung wirksam wird, muss der Stack neu gestartet werden – docker compose restart reicht nicht, da Umgebungsvariablen erst beim Neuanlegen der Container eingelesen werden:
cd /opt/karakeep
docker compose up -dBrowser-Extensions für Chrome, Firefox und Safari sowie die mobilen Apps für iOS und Android verbindest du mit deiner Instanz, indem du in den jeweiligen Einstellungen die Server-URL einträgst.
Verifizieren: Lege testweise einen Bookmark an. Nach wenigen Sekunden sollte der Headless-Browser einen Screenshot und die Seiteninhalte crawlen. Prüfe in der App, ob der Screenshot erscheint. docker compose logs chrome zeigt die Crawling-Aktivität (die DNS-Warnung „Failed to Read DnsConfig" ist harmlos).
Schritt 6: KI-Auto-Tagging aktivieren (optional)
Karakeep läuft vollständig ohne KI-Anbindung – manuelles Tagging und Volltextsuche funktionieren immer. Wer das automatische Tagging und Zusammenfassen aktivieren möchte, hat zwei Wege:
Option A – OpenAI: Trage deinen API-Key in die .env ein:
OPENAI_API_KEY=sk-...
INFERENCE_TEXT_MODEL=gpt-4o-mini
INFERENCE_IMAGE_MODEL=gpt-4o-miniOption B – Ollama (lokal, kein Cloud-Dienst): Voraussetzung ist eine laufende Ollama-Instanz auf dem Host. Wichtig: localhost funktioniert im Container nicht – verwende stattdessen host.docker.internal oder die Host-IP:
OLLAMA_BASE_URL=http://host.docker.internal:11434
INFERENCE_TEXT_MODEL=llama3Starte nach jeder .env-Änderung mit docker compose up -d neu. Wie du eine eigene Ollama-Instanz aufsetzt, zeigt Ollama und Open WebUI mit Docker.
Verifizieren: Füge einen neuen Bookmark hinzu und warte 10–30 Sekunden. In der Detailansicht sollten automatisch generierte Tags und eine kurze Zusammenfassung erscheinen. Bei Fehlern: docker compose logs web | grep -i error.
Schritt 7: Reverse Proxy und HTTPS (Produktionsbetrieb)
Für den Zugriff von außen oder aus dem Internet solltest du Karakeep hinter einen Reverse Proxy mit HTTPS legen. Wichtig: Passe NEXTAUTH_URL in der .env auf die öffentliche URL an, bevor du den Stack startest – sonst schlagen OAuth-Redirects fehl:
NEXTAUTH_URL=https://karakeep.example.comDen Host-Port 3000 kannst du danach auf eine interne IP beschränken oder ganz entfernen. Eine vollständige Traefik-Anbindung beschreibt Traefik als Docker-Reverse-Proxy mit automatischem HTTPS einrichten.
Verifizieren: curl -I https://karakeep.example.com liefert HTTP/2 200 oder 302. Im Web-Container-Log erscheinen keine Fehler zu ungültigen Redirects oder CSRF-Tokens.
Schritt 8: Updates und Backups
Updates: Bei Image-Tag release aktualisierst du den Stack mit einem einzigen Befehl:
cd /opt/karakeep
docker compose up --pull always -dBei gepinnter Version trägst du die neue Versionsnummer in die .env ein und führst danach docker compose up -d aus. Wie du Container-Updates systematisch überwachst, erklärt Watchtower mit Docker: Container automatisch aktualisieren.
Backups: Das benannte Volume data enthält die SQLite-Datenbank und alle Assets – es ist das einzige kritische Backup-Ziel. Den Volume-Pfad findest du mit:
docker volume inspect karakeep_data | grep MountpointAlternativ kannst du in der compose.yaml einen Bind-Mount auf einen bekannten Host-Pfad verwenden: ersetze data:/data durch /opt/karakeep/data:/data. Verwende niemals docker compose down -v – das Flag -v löscht alle benannten Volumes inklusive Datenbank unwiderruflich.
Verifizieren: docker compose ps zeigt nach dem Update alle Services wieder als Up. Prüfe die neue Version im Karakeep-UI unter Einstellungen → About.
Troubleshooting / Typische Fehler
- Login-Redirect schlägt fehl / Sitzung nicht akzeptiert:
NEXTAUTH_URLstimmt nicht mit der genutzten URL überein. Bei HTTPS-Betrieb hinter einem Reverse Proxy mussNEXTAUTH_URL=https://karakeep.example.comgesetzt und danachdocker compose up -dausgeführt werden. - Kein Screenshot, kein Seiten-Archiv: Der Chrome-Container startet nicht oder ist nicht erreichbar. Prüfe mit
docker compose logs chrome. Die Meldung „Failed to Read DnsConfig" ist harmlos – andere Fehler deuten auf fehlenden RAM hin. - Auto-Tagging funktioniert nicht (OpenAI): Häufige Ursache ist ein OpenAI-Konto ohne Prepaid-Guthaben – das Scheitern erfolgt lautlos. Konto aufladen oder auf Ollama wechseln.
- Ollama nicht erreichbar:
OLLAMA_BASE_URL=http://localhost:11434funktioniert im Container nicht. Korrekt:http://host.docker.internal:11434(Docker Desktop) oder die Host-IP. - Meilisearch-Fehler „incompatible db version": Nach einem Meilisearch-Upgrade ist der Suchindex inkompatibel. Meilisearch stoppen,
data.ms-Verzeichnis im Volume löschen, neu starten, dann in Admin-Einstellungen „Reindex All Bookmarks" ausführen. - .env-Änderung hat keine Wirkung:
docker compose restartreicht nicht – immerdocker compose up -dverwenden. - Falsches Ollama-Modell:
INFERENCE_TEXT_MODEL=gpt-4o-minifunktioniert nur mit OpenAI. Bei Ollama ein lokal verfügbares Modell eintragen, z.B.llama3.
Häufige Fragen
Brauche ich einen OpenAI-Key, damit Karakeep funktioniert?
Nein. Karakeep ist ohne KI-Key vollständig nutzbar. Volltextsuche, manuelles Tagging, Seiten-Archiving und Screenshots funktionieren unabhängig von OpenAI. Ohne Key entfällt lediglich das automatische Tagging und Zusammenfassen. Als kostenlose Alternative kannst du Ollama mit einem lokalen Modell verwenden.
Kann ich Karakeep auf einem Raspberry Pi oder Apple-Silicon-Mac betreiben?
Ja. Das Karakeep-Image und Alpine-Chrome 124 unterstützen beide linux/arm64 als Multi-Arch-Manifest. Docker lädt automatisch das passende Architektur-Image. Auf einem Raspberry Pi 4 mit 4 GB RAM läuft der Stack problemlos, wenn keine anderen speicherintensiven Dienste aktiv sind.
Wie sichere ich meine Daten am einfachsten?
Das benannte Volume data enthält die gesamte SQLite-Datenbank und alle Assets. Sichere regelmäßig den Mountpoint dieses Volumes. Alternativ kannst du in der compose.yaml statt eines benannten Volumes einen Bind-Mount verwenden: /opt/karakeep/data:/data. Dann reicht ein einfaches Verzeichnis-Backup.
Wie richte ich Karakeep hinter einem Reverse Proxy ein?
Setze NEXTAUTH_URL in der .env auf die öffentliche HTTPS-URL (z.B. https://karakeep.example.com). Leite im Reverse Proxy den Traffic auf http://<HOST-IP>:3000 weiter. Standard-Forwarding-Header reichen aus – keine besonderen Header-Regeln nötig.
Wie aktualisiere ich Meilisearch auf eine neue Version?
Image-Tag in der compose.yaml ändern und docker compose up -d ausführen. Bei Minor- und Major-Upgrades ist der alte Suchindex inkompatibel – lösche dann das data.ms-Verzeichnis im Meilisearch-Volume und führe in den Karakeep-Admin-Einstellungen „Reindex All Bookmarks" aus. Die Bookmarks und Assets im data-Volume bleiben dabei unangetastet.
Gibt es Browser-Extensions und mobile Apps?
Ja. Extensions für Chrome, Firefox und Safari sowie Apps für iOS und Android sind über die offizielle Karakeep-Website und die jeweiligen Stores verfügbar. Nach der Installation trägst du in den App-Einstellungen die URL deiner Instanz ein.
Fazit
Karakeep ist für Entwickler, Researcher und Knowledge-Worker die derzeit überzeugendste selbstgehostete Wissensspeicher-Option. Der Docker-Stack ist schlank: drei Services, SQLite statt PostgreSQL, benannte Volumes für Daten und Suchindex. Die KI-Features sind ein echtes Alleinstellungsmerkmal, aber optional – wer kein OpenAI-Guthaben einsetzen will, kann Karakeep vollständig lokal mit Ollama betreiben. Für den Einstieg in die lokale KI-Infrastruktur empfiehlt sich Ollama und Open WebUI mit Docker. Wer darüber hinaus ein hierarchisches Notizsystem sucht, findet mit TriliumNext Notes mit Docker eine hervorragende Ergänzung im Self-Hosted-Wissensmanagement.
Weiterführende Anleitungen und Quellen
- Docker und Docker Compose auf Linux installieren – die Self-Hosting-Grundlage
- Traefik als Docker-Reverse-Proxy mit automatischem HTTPS einrichten
- Ollama und Open WebUI mit Docker: eigenes lokales KI-Sprachmodell
- Watchtower mit Docker: Container automatisch aktualisieren
- TriliumNext Notes mit Docker: Hierarchisches Notizsystem
Offizielle Quellen: Karakeep Dokumentation – Docker-Installation | Karakeep GitHub-Repository | Karakeep Konfigurationsreferenz