Skip to content

Karakeep — Setup

AI-powered bookmark manager with auto-tagging, page archiving, and full-text search. Runs as a Docker Compose stack on a dedicated Debian LXC (117). OIDC via PocketID, AI via Ollama.

Infrastructure

Host LXC ID Internal External CPU RAM Disk
Debian LXC 117 192.168.1.217:3000 https://karakeep.eva-00.network 2 cores 2 GiB 8 GiB

Observability

Logs

Container logs are collected via Docker log driver. Query in Loki:

Query Purpose
{container_name="karakeep-karakeep-1"} Karakeep app logs
{container_name="karakeep-meilisearch-1"} Search engine logs
{container_name="karakeep-chrome-1"} Headless Chrome (archiving)
{container_name=~"karakeep.*"} \|= "error" All errors

Access: Grafana → Explore → Loki → Enter query

IaC

Artifact Path
Playbook ansible/playbooks/karakeep.yml
Workflow .forgejo/workflows/karakeep.yml
Docker Compose services/karakeep/docker-compose.yml
Caddy entry services/caddy/Caddyfilekarakeep.eva-00.network
Glance entry services/glance/glance.yml → Knowledge section

The playbook manages the full lifecycle:

  1. Provisions LXC 117 on Proxmox (if not exists)
  2. Installs Docker and sqlite3
  3. Fetches secrets from Vault
  4. Deploys Docker Compose stack (web app + Chrome + Meilisearch)
  5. Creates admin user via tRPC signup endpoint
  6. Generates API key via SQLite insert
  7. Stores API key in Vault
  8. Locks down signups and password auth
  9. Enables OIDC auto-redirect

First-run setup guide: See karakeep-iac-setup.md for the full automation walkthrough.

Auth

Component Details
OIDC Provider PocketID (auth.eva-00.network)
Callback URL https://karakeep.eva-00.network/api/auth/callback/custom
Auth mode OIDC-only (password auth disabled after first-run)
Auto-redirect Enabled — users go straight to PocketID

Secrets

Vault path: secret/data/karakeep

Key Purpose
admin_email Admin account email
admin_password Admin account password (used for initial signup only)
nextauth_secret JWT session signing key
meili_master_key Meilisearch authentication key
pocketid_client_id OIDC client ID
pocketid_client_secret OIDC client secret
api_key REST API key (ak2_... format, generated on first run)

AI Integration

Karakeep connects to the Ollama instance on LXC 107 for:

  • Auto-tagging: AI generates tags when bookmarks are saved
  • Summarization: AI summarizes article content
  • OCR: Vision model extracts text from images
Setting Value
OLLAMA_BASE_URL http://192.168.1.107:11434
INFERENCE_TEXT_MODEL llama3.1
INFERENCE_IMAGE_MODEL llava

Containers

Container Image Purpose
karakeep-karakeep-1 ghcr.io/karakeep-app/karakeep:release Web app + API
karakeep-chrome-1 gcr.io/zenika-hub/alpine-chrome:124 Headless Chrome for page archiving
karakeep-meilisearch-1 getmeili/meilisearch:v1.37.0 Full-text search engine

Volumes

Volume Mount Purpose
karakeep_data /data SQLite DB, archived pages, uploaded assets
karakeep_meilisearch /meili_data Search index

Client Apps

Platform App Notes
iOS/iPadOS Karakeep App (official) Share sheet extension for saving from Safari
macOS Safari Karakeeper (third-party) Native Safari extension, one-tap bookmarking
Chrome/Firefox Karakeep Extension Browser extension
Any REST API / iOS Shortcuts POST /api/v1/bookmarks with Bearer token

MCP Server

Karakeep has an official first-party MCP server for AI integration:

  • npm: @karakeep/mcp
  • Docker: ghcr.io/karakeep-app/karakeep-mcp:latest
  • Docs: https://docs.karakeep.app/integrations/mcp/