Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Docker 12.08.2026 · 9 min Lesezeit

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.

Karakeep mit Docker installieren: Bookmark-Everything-App mit KI-Auto-Tagging, Lesezeichenverwaltung und automatischer Organisation von Webinhalten. KI-generiert

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

  1. 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.
  2. Linux-Host, VM oder NAS mit Docker-Support (Ubuntu, Debian, Synology mit Docker-Paket, etc.); läuft nativ auf AMD64 und ARM64.
  3. Mindestens 1 GB RAM frei für alle drei Container (empfohlen: 2 GB+); etwa 1–2 GB Speicherplatz für Images beim ersten Pull.
  4. Genügend Datenspeicher für Assets und gecrawlte Seiten – je nach Nutzungsintensität sind 10 GB+ realistisch.
  5. openssl auf dem Host (zur Secret-Generierung); auf allen gängigen Linux-Systemen vorinstalliert.
  6. Optional: Reverse Proxy (Nginx Proxy Manager, Traefik oder Caddy) für HTTPS-Betrieb. Tipp: Traefik als Docker-Reverse-Proxy zeigt die HTTPS-Anbindung.
  7. 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/karakeep

Verifizieren: 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_KEY

Lege 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=true

Schütze die Datei vor unbefugtem Lesezugriff:

chmod 600 /opt/karakeep/.env

Verifizieren: 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:

ParameterWertHinweis
Image (Karakeep)ghcr.io/karakeep-app/karakeep:releaseMulti-Arch AMD64/ARM64; aktuell v0.32.0
Image (Suche)getmeili/meilisearch:v1.41.0Gepinnte Version – nicht beliebig upgraden
Image (Browser)gcr.io/zenika-hub/alpine-chrome:124Headless Chromium für Crawling
Port nach außen3000Web-UI und API; Pflicht
Ports intern7700, 9222Nur Container-intern, nicht freigeben
Volume data/data im ContainerSQLite-DB + Assets; Pflicht-Backup
Volume meilisearch/meili_data im ContainerSuchindex; bei Verlust neu indexieren
DatenbankSQLiteKein 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 -d

Prüfe danach den Status aller Services:

docker compose ps

Erwartete 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                    Up

Prüfe die Logs auf Fehler:

docker compose logs --tail=50 web
docker compose logs --tail=20 meilisearch

Verifizieren: 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=true

Damit 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 -d

Browser-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-mini

Option 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=llama3

Starte 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.com

Den 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 -d

Bei 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 Mountpoint

Alternativ 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

  1. Login-Redirect schlägt fehl / Sitzung nicht akzeptiert: NEXTAUTH_URL stimmt nicht mit der genutzten URL überein. Bei HTTPS-Betrieb hinter einem Reverse Proxy muss NEXTAUTH_URL=https://karakeep.example.com gesetzt und danach docker compose up -d ausgeführt werden.
  2. 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.
  3. 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.
  4. Ollama nicht erreichbar: OLLAMA_BASE_URL=http://localhost:11434 funktioniert im Container nicht. Korrekt: http://host.docker.internal:11434 (Docker Desktop) oder die Host-IP.
  5. 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.
  6. .env-Änderung hat keine Wirkung: docker compose restart reicht nicht – immer docker compose up -d verwenden.
  7. Falsches Ollama-Modell: INFERENCE_TEXT_MODEL=gpt-4o-mini funktioniert 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

  1. Docker und Docker Compose auf Linux installieren – die Self-Hosting-Grundlage
  2. Traefik als Docker-Reverse-Proxy mit automatischem HTTPS einrichten
  3. Ollama und Open WebUI mit Docker: eigenes lokales KI-Sprachmodell
  4. Watchtower mit Docker: Container automatisch aktualisieren
  5. TriliumNext Notes mit Docker: Hierarchisches Notizsystem

Offizielle Quellen: Karakeep Dokumentation – Docker-Installation | Karakeep GitHub-Repository | Karakeep Konfigurationsreferenz