Deploy Karakeep, the self-hosted bookmark and read-it-later app, on Render with the official GHCR AIO image, Meilisearch, and headless Chrome.
This repo is a thin Render packaging of Karakeep's official AIO image plus Meilisearch and Chrome sidecars. Small Dockerfiles adapt entrypoint / Chrome flags only; no monorepo build.
| Piece | Role |
|---|---|
| Karakeep | Bookmarks, archives, search, AI tagging |
| ghcr.io/karakeep-app/karakeep | Official AIO image (via thin Dockerfile) |
| Meilisearch | Full-text search (getmeili/meilisearch) |
| Chrome | Headless crawler / screenshots (alpine-chrome) |
| Render Disk | SQLite + data at /data; Meili data at /meili_data |
flowchart LR
browser["Browser"] --> web["karakeep<br/>AIO image"]
web --> meili["meilisearch"]
web --> chrome["chrome"]
web --> disk[("/data")]
meili --> mdisk[("/meili_data")]
- Click Deploy to Render. Render forks this template and applies
render.yaml. - Render builds thin Docker wrappers (AIO + Chrome) and pulls Meilisearch.
- Open the
karakeepURL and create an account. - Optionally add
OPENAI_API_KEYin the Dashboard for AI tagging. - Save bookmarks; search and archives use Meilisearch + Chrome over the private network.
| Resource | Type | Plan | Notes |
|---|---|---|---|
karakeep |
Web (runtime: docker) |
starter | AIO image; health /api/health; 5 GB disk |
meilisearch |
Private (runtime: image) |
starter | 1 GB disk |
chrome |
Private (runtime: docker) |
starter | Remote debugging on 9222 |
Default region: oregon. Previews are off. LLM keys are not required at Apply time.
- A Render account
- Optional: OpenAI API key for AI tagging
- Click Deploy to Render above and fork into your GitHub account.
- On Apply, leave
OPENAI_API_KEYblank unless you want AI tagging immediately. - Wait until services are Live (~5–10 minutes).
- Open the
karakeepURL and finish signup. - Add bookmarks; optionally set
OPENAI_API_KEYlater in the Dashboard.
Health check:
curl -sS https://<your-karakeep>.onrender.com/api/health| Feature | Description |
|---|---|
| Official AIO image | Thin wrapper around GHCR Karakeep |
| Search + crawl | Meilisearch + headless Chrome private services |
| Persistent SQLite | 5 GB disk at /data |
| Generated secrets | NEXTAUTH_SECRET, MEILI_MASTER_KEY |
| Optional AI | OPENAI_API_KEY after deploy |
| Variable | Source | Description |
|---|---|---|
MEILI_MASTER_KEY |
Auto-generated (group) | Shared Meilisearch key |
NEXTAUTH_SECRET |
Auto-generated | Auth sessions |
NEXTAUTH_URL |
Wired | From karakeep public URL |
DATA_DIR |
Wired | /data |
MEILI_HOST / MEILI_PORT |
Wired | Meilisearch private host + 7700 (entrypoint builds MEILI_ADDR) |
BROWSER_WEB_HOST / BROWSER_WEB_PORT |
Wired | Chrome private host + 9222 (entrypoint builds BROWSER_WEB_URL) |
DB_WAL_MODE |
Wired | true |
MEILI_NO_ANALYTICS |
Wired | true on Meilisearch |
OPENAI_API_KEY |
Optional (sync: false) |
AI tagging; leave blank at Apply |
| Resource | Approx. monthly |
|---|---|
karakeep (Starter) |
~$7 |
meilisearch (Starter) |
~$7 |
chrome (Starter) |
~$7 |
| Disks (6 GB total) | ~$1.50 |
| Total | ~$24–28 |
Bump karakeep to Standard if you OOM on large imports or heavy crawling.
| Problem | Solution |
|---|---|
| Health check fails / no open ports | Keep Starter+; check disk mount at /data and logs for Meili connectivity. |
| Search empty / crawl fails | Confirm meilisearch and chrome are Live; BROWSER_WEB_HOST wiring. |
| AI tagging missing | Set OPENAI_API_KEY in Dashboard → Environment. |
| Data lost after redeploy | Disks must remain attached (/data, /meili_data). |
render.yaml Render Blueprint
README.md This file
LICENSE MIT (template wrapper)
.env.example Optional notes
assets/ Hero
docker/Dockerfile.render-* Thin image wrappers
docker/render-entrypoint.sh Builds BROWSER_WEB_URL from Render host
Render:
Karakeep:
MIT for this template wrapper.
Upstream Karakeep license: see upstream repo. Star that project if this helped.
