Deploy Karakeep on a VPS
A self-hosted bookmark manager with full-page archival, AI tagging, RSS feeds, and Meilisearch-powered full-text search.
What Is Karakeep?
Karakeep (formerly Hoarder) is a self-hosted bookmark manager built for people who save everything. It goes beyond storing URLs — you can archive full web pages, save notes and images, subscribe to RSS feeds, and let AI automatically tag and summarize everything you collect. A built-in Meilisearch instance powers fast full-text search across your entire library, and browser extensions plus mobile apps make adding content frictionless from anywhere.
System Requirements
Karakeep runs three containers: the main web app, a headless Chrome instance for page archival and screenshots, and Meilisearch for search indexing. The 2 GB plan gives comfortable headroom for all three services plus nginx.
- • RamNode VPS running Ubuntu 22.04 or 24.04 (1 vCPU / 1 GB minimum; 2 GB recommended)
- • A domain name with an A record pointing to your VPS IP
- • Root or sudo access
Update the System and Install Docker
apt update && apt upgrade -y
# Install Docker
curl -fsSL https://get.docker.com | sh
# Verify
docker --version
docker compose versionCreate the Karakeep Directory
mkdir -p /opt/karakeep
cd /opt/karakeepDownload the Docker Compose File
wget https://raw.githubusercontent.com/karakeep-app/karakeep/main/docker/docker-compose.ymlThis file defines three services — web, chrome, and meilisearch — with persistent volumes and internal networking already configured.
Configure Environment Variables
Generate two secure random strings:
openssl rand -base64 36
openssl rand -base64 36Create the .env file:
KARAKEEP_VERSION=release
NEXTAUTH_SECRET=your_first_random_string_here
MEILI_MASTER_KEY=your_second_random_string_here
NEXTAUTH_URL=https://karakeep.yourdomain.comWhy two secrets? NEXTAUTH_SECRET signs session tokens for the web app. MEILI_MASTER_KEY authenticates the backend against Meilisearch. They should be different strings.
Start Karakeep
cd /opt/karakeep
docker compose up -dVerify all three containers are running:
docker compose psYou should see web, chrome, and meilisearch all in the Up state. Karakeep is now running on port 3000, accessible only locally.
Install nginx and Certbot
apt install -y nginx certbot python3-certbot-nginxConfigure nginx as a Reverse Proxy
server {
listen 80;
server_name karakeep.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
client_max_body_size 50M;
}
}The Upgrade and Connection headers support WebSocket real-time UI updates. The timeouts accommodate large file uploads and slow page archival.
ln -s /etc/nginx/sites-available/karakeep /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginxIssue a TLS Certificate
certbot --nginx -d karakeep.yourdomain.comVerify the renewal timer is active:
systemctl status certbot.timerCreate Your First User
Navigate to https://karakeep.yourdomain.com and click Sign Up. After creating your account, disable open registration by adding to /opt/karakeep/.env:
DISABLE_NEW_SIGNUPS=truecd /opt/karakeep
docker compose up -dInstall Browser Extensions and Mobile Apps
From the Karakeep UI, go to Settings → Quick Sharing to find links for the Chrome extension, Firefox extension, iOS app, and Android app. These let you add bookmarks from any device with a single tap.
Optional — AI-Powered Tagging
Karakeep can automatically tag and summarize bookmarks using an AI provider.
Using OpenAI:
OPENAI_API_KEY=sk-...Using Ollama (local inference, no API costs):
OLLAMA_BASE_URL=http://your-ollama-host:11434
INFERENCE_TEXT_MODEL=llama3.2cd /opt/karakeep
docker compose up -dOptional — Full Page Archival & PDF Storage
Archive complete snapshots of bookmarked pages (useful for paywalled or ephemeral content):
CRAWLER_FULL_PAGE_ARCHIVE=true
CRAWLER_STORE_PDF=trueBoth features increase storage usage. Monitor disk with df -h if on limited storage.
Optional — Video Downloads
Download videos from YouTube and other supported sites using yt-dlp:
CRAWLER_VIDEO_DOWNLOAD=trueBe mindful of storage capacity and bandwidth on your VPS.
Updating Karakeep
cd /opt/karakeep
docker compose pull
docker compose up -dFor controlled upgrades, pin a specific version in .env:
KARAKEEP_VERSION=0.31.0Check the Karakeep releases page for changelogs before upgrading, as some releases include database migrations.
Backing Up Your Data
Karakeep stores all data in Docker volumes. Stop, archive, and restart:
cd /opt/karakeep
docker compose stop
tar -czf /root/karakeep-backup-$(date +%F).tar.gz /var/lib/docker/volumes/karakeep_data
docker compose startFor automated off-site backups, use rclone to sync to a remote bucket.
Troubleshooting
Chrome container keeps restarting
Check logs: docker compose logs chrome. If OOM errors appear, upgrade to a 2 GB VPS plan.
Search not returning results
Meilisearch may still be indexing. Go to Settings → Admin in the Karakeep UI and trigger a re-index.
Web container running but UI is blank
Confirm NEXTAUTH_URL in .env matches the domain you're accessing. A mismatch causes authentication failures.
Viewing container logs
docker compose logs -f web
docker compose logs -f meilisearch
docker compose logs -f chrome