Taming Your Bookmarks: Why I Chose Self-Hosted KaraKeep
KaraKeep + Docker + OpenAI
We all know the struggle: hundreds of bookmarks piled up in Chrome or Firefox, tucked away in folders we never open. Let’s be honest, default browser management is insufficient. It lacks efficient full-text search, smart categorization, and most importantly, it offers zero visibility into the actual content of the link.
This is where KaraKeep comes in. I decided to self-host it to take back control of my bookmarks while adding a layer of artificial intelligence.
Why KaraKeep?
Unlike traditional solutions, KaraKeep does more than just store a URL. It captures the content, enables ultra-fast searching thanks to Meilisearch, and, best of all, integrates with OpenAI to automatically tag and summarize your readings.
Architecture and Docker Compose Installation
The setup relies on three pillars:
- KaraKeep (Web): The user interface.
- Meilisearch: The search engine.
- Alpine Chrome: A headless browser that allows KaraKeep to “read” pages for indexing.
Here is the docker-compose.yml file I use for my deployment (configured to run behind a Traefik reverse proxy):
services:
web:
image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release}
restart: unless-stopped
volumes:
- data:/data
env_file:
- .env
networks:
- web
- back
labels:
- traefik.enable=true
- traefik.docker.network=web
- traefik.http.routers.books.entrypoints=websecure
- traefik.http.routers.books.tls.certresolver=myresolver
- traefik.http.routers.books.rule=Host(`bookmarks.bracloud.fr`)
- traefik.http.services.books.loadbalancer.server.port=3000
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
networks:
- back
meilisearch:
image: getmeili/meilisearch:v1.13.3
restart: unless-stopped
env_file:
- .env
environment:
MEILI_NO_ANALYTICS: "true"
volumes:
- meilisearch:/meili_data
networks:
- back
networks:
web:
external: true
back:
external: true
volumes:
meilisearch:
data:
.env File Configuration
The .env file is the heart of the configuration. This is where you link the services and activate the AI features.
🔑 Core Variables
These variables allow the web container to communicate with the search engine and the browser.
KARAKEEP_VERSION: Defines the image version (e.g.,release).MEILI_MASTER_KEY: A complex key to secure your search engine.SECRET_KEY: Used to secure sessions (generate one viaopenssl rand -hex 32).
🤖 OpenAI: Turbocharging Your Bookmarks
This is where the AI magic happens. Once enabled, OpenAI will analyze every link to create relevant summaries and tags.
OPENAI_API_KEY: Your secret key retrieved from platform.openai.com.OPENAI_MODEL: Usegpt-4o-minifor the best price/performance ratio (OpenAI pricing).AUTO_AI_SUMMARY: Set totruefor automation.AUTO_AI_TAGS: Set totruefor automatic keyword extraction.
Full .env Example:
# --- GENERAL ---
KARAKEEP_VERSION=release
SECRET_KEY=your_random_key
DATA_DIR=/data
# --- MEILISEARCH ---
MEILI_ADDR=http://meilisearch:7700
MEILI_MASTER_KEY=SuperSecureKey123!
# --- BROWSER (SCRAPING) ---
BROWSER_WEB_URL=http://chrome:9222
# --- ARTIFICIAL INTELLIGENCE ---
OPENAI_API_KEY=sk-proj-XXXX...
OPENAI_MODEL=gpt-4o-mini
AUTO_AI_SUMMARY=true
AUTO_AI_TAGS=true
Conclusion
Moving from “browser-based” management to a self-hosted KaraKeep instance radically changes how you consume information. Thanks to Meilisearch’s full-text indexing and OpenAI’s intelligence, your bookmarks are no longer a dead list, but a true knowledge base.
Actuellement ingénieur DevOps/Architecte Cloud, j’étais initialement interessé par l’administration système et grâce aux entreprises dans lesquelles j’ai pu travailler Oxalide et maintenant Claranet j’ai eu la chance de découvrir l’univers du Cloud et de l’automatisation.
Je me suis décidé a publier ce blog pour vous faire partager ma passion mais également pour enrichir avec modestie tout ce que l’on peut trouver sur internet. Bonne lecture !