KaraKeep
A self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search. Previously known as Hoarder.
Configuration
version: "3.8"
services:
web:
image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release}
restart: unless-stopped
volumes:
- data:/data
environment:
MEILI_ADDR: http://meilisearch:7700
BROWSER_WEB_URL: http://chrome:9222
DATA_DIR: /data
NEXTAUTH_SECRET: your_secure_key
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.13.3
restart: unless-stopped
environment:
MEILI_NO_ANALYTICS: "true"
volumes:
- meilisearch:/meili_data
volumes:
meilisearch:
data:[variables]
main_domain = "${domain}"
karakeep_version = "release"
[config]
[[config.domains]]
serviceName = "web"
port = 3000
host = "${main_domain}"
[config.env]
# Core required configuration
"NEXTAUTH_URL" = "http://${main_domain}"
# "NEXTAUTH_SECRET" = "${password:36}"
# DATA_DIR is already set to /data by default in docker-compose
# "DATA_DIR" = "/data"
# Optional: common configs
# "ASSETS_DIR" = ""
"MEILI_MASTER_KEY" = "${password:36}"
# "MAX_ASSET_SIZE_MB" = "50"
# "DISABLE_NEW_RELEASE_CHECK" = "false"
# "PROMETHEUS_AUTH_TOKEN" = ""
# "RATE_LIMITING_ENABLED" = "false"
# "DB_WAL_MODE" = "false"
# "SEARCH_NUM_WORKERS" = "1"
# "WEBHOOK_NUM_WORKERS" = "1"
# "ASSET_PREPROCESSING_NUM_WORKERS" = "1"
# "RULE_ENGINE_NUM_WORKERS" = "1"
# --- Asset Storage (S3) ---
# "ASSET_STORE_S3_ENDPOINT" = ""
# "ASSET_STORE_S3_REGION" = ""
# "ASSET_STORE_S3_BUCKET" = ""
# "ASSET_STORE_S3_ACCESS_KEY_ID" = ""
# "ASSET_STORE_S3_SECRET_ACCESS_KEY" = ""
# "ASSET_STORE_S3_FORCE_PATH_STYLE" = "false"
# --- Authentication / Signup ---
# "DISABLE_SIGNUPS" = "false"
# "DISABLE_PASSWORD_AUTH" = "false"
# "EMAIL_VERIFICATION_REQUIRED" = "false"
# "OAUTH_WELLKNOWN_URL" = ""
# "OAUTH_CLIENT_SECRET" = ""
# "OAUTH_CLIENT_ID" = ""
# "OAUTH_SCOPE" = "openid email profile"
# "OAUTH_PROVIDER_NAME" = "Custom Provider"
# "OAUTH_ALLOW_DANGEROUS_EMAIL_ACCOUNT_LINKING" = "false"
# "OAUTH_TIMEOUT" = "3500"
# --- Inference Configs ---
# "OPENAI_API_KEY" = ""
# "OPENAI_BASE_URL" = ""
# "OLLAMA_BASE_URL" = ""
# "OLLAMA_KEEP_ALIVE" = ""
# "INFERENCE_TEXT_MODEL" = "gpt-4.1-mini"
# "INFERENCE_IMAGE_MODEL" = "gpt-4o-mini"
# "EMBEDDING_TEXT_MODEL" = "text-embedding-3-small"
# "INFERENCE_CONTEXT_LENGTH" = "2048"
# "INFERENCE_LANG" = "english"
# "INFERENCE_NUM_WORKERS" = "1"
# "INFERENCE_ENABLE_AUTO_TAGGING" = "true"
# "INFERENCE_ENABLE_AUTO_SUMMARIZATION" = "false"
# "INFERENCE_JOB_TIMEOUT_SEC" = "30"
# "INFERENCE_FETCH_TIMEOUT_SEC" = "300"
# "INFERENCE_OUTPUT_SCHEMA" = "structured"
# --- Crawler Configs ---
# "CRAWLER_NUM_WORKERS" = "1"
# "BROWSER_WEB_URL" = "http://chrome:9222"
# "BROWSER_WEBSOCKET_URL" = ""
# "BROWSER_CONNECT_ONDEMAND" = "false"
# "CRAWLER_DOWNLOAD_BANNER_IMAGE" = "true"
# "CRAWLER_STORE_SCREENSHOT" = "true"
# "CRAWLER_FULL_PAGE_SCREENSHOT" = "false"
# "CRAWLER_SCREENSHOT_TIMEOUT_SEC" = "5"
# "CRAWLER_FULL_PAGE_ARCHIVE" = "false"
# "CRAWLER_JOB_TIMEOUT_SEC" = "60"
# "CRAWLER_NAVIGATE_TIMEOUT_SEC" = "30"
# "CRAWLER_VIDEO_DOWNLOAD" = "false"
# "CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE" = "50"
# "CRAWLER_VIDEO_DOWNLOAD_TIMEOUT_SEC" = "600"
# "CRAWLER_ENABLE_ADBLOCKER" = "true"
# "CRAWLER_YTDLP_ARGS" = "[]"
# --- OCR Configs ---
# "OCR_CACHE_DIR" = ""
# "OCR_LANGS" = "eng"
# "OCR_CONFIDENCE_THRESHOLD" = "50"
# --- Webhook Configs ---
# "WEBHOOK_TIMEOUT_SEC" = "5"
# "WEBHOOK_RETRY_TIMES" = "3"
# "WEBHOOK_TOKEN" = ""
# --- SMTP Configuration ---
# "SMTP_HOST" = ""
# "SMTP_PORT" = "587"
# "SMTP_SECURE" = "false"
# "SMTP_USER" = ""
# "SMTP_PASSWORD" = ""
# "SMTP_FROM" = ""
# --- Proxy Configuration ---
# "CRAWLER_HTTP_PROXY" = ""
# "CRAWLER_HTTPS_PROXY" = ""
# "CRAWLER_NO_PROXY" = ""
[[config.mounts]]
# Persistent data directory for Karakeep
volumeName = "data"
mountPath = "/data"
[[config.mounts]]
# Meilisearch data directory
volumeName = "meilisearch"
mountPath = "/meili_data"Base64
To import this template in Dokploy: create a Compose service → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcbnNlcnZpY2VzOlxuICB3ZWI6XG4gICAgaW1hZ2U6IGdoY3IuaW8va2FyYWtlZXAtYXBwL2thcmFrZWVwOiR7S0FSQUtFRVBfVkVSU0lPTjotcmVsZWFzZX1cbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIGRhdGE6L2RhdGFcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIE1FSUxJX0FERFI6IGh0dHA6Ly9tZWlsaXNlYXJjaDo3NzAwXG4gICAgICBCUk9XU0VSX1dFQl9VUkw6IGh0dHA6Ly9jaHJvbWU6OTIyMlxuICAgICAgREFUQV9ESVI6IC9kYXRhXG4gICAgICBORVhUQVVUSF9TRUNSRVQ6IHlvdXJfc2VjdXJlX2tleVxuICBjaHJvbWU6XG4gICAgaW1hZ2U6IGdjci5pby96ZW5pa2EtaHViL2FscGluZS1jaHJvbWU6MTI0XG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBjb21tYW5kOlxuICAgICAgLSAtLW5vLXNhbmRib3hcbiAgICAgIC0gLS1kaXNhYmxlLWdwdVxuICAgICAgLSAtLWRpc2FibGUtZGV2LXNobS11c2FnZVxuICAgICAgLSAtLXJlbW90ZS1kZWJ1Z2dpbmctYWRkcmVzcz0wLjAuMC4wXG4gICAgICAtIC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0PTkyMjJcbiAgICAgIC0gLS1oaWRlLXNjcm9sbGJhcnNcbiAgbWVpbGlzZWFyY2g6XG4gICAgaW1hZ2U6IGdldG1laWxpL21laWxpc2VhcmNoOnYxLjEzLjNcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgTUVJTElfTk9fQU5BTFlUSUNTOiBcInRydWVcIlxuICAgIHZvbHVtZXM6XG4gICAgICAtIG1laWxpc2VhcmNoOi9tZWlsaV9kYXRhXG5cbnZvbHVtZXM6XG4gIG1laWxpc2VhcmNoOlxuICBkYXRhOlxuIiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmthcmFrZWVwX3ZlcnNpb24gPSBcInJlbGVhc2VcIlxuXG5bY29uZmlnXVxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwid2ViXCJcbnBvcnQgPSAzMDAwXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiXG5cbltjb25maWcuZW52XVxuIyBDb3JlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25cblwiTkVYVEFVVEhfVVJMXCIgPSBcImh0dHA6Ly8ke21haW5fZG9tYWlufVwiXG4jIFwiTkVYVEFVVEhfU0VDUkVUXCIgPSBcIiR7cGFzc3dvcmQ6MzZ9XCJcblxuIyBEQVRBX0RJUiBpcyBhbHJlYWR5IHNldCB0byAvZGF0YSBieSBkZWZhdWx0IGluIGRvY2tlci1jb21wb3NlXG4jIFwiREFUQV9ESVJcIiA9IFwiL2RhdGFcIlxuXG4jIE9wdGlvbmFsOiBjb21tb24gY29uZmlnc1xuIyBcIkFTU0VUU19ESVJcIiA9IFwiXCJcblwiTUVJTElfTUFTVEVSX0tFWVwiID0gXCIke3Bhc3N3b3JkOjM2fVwiXG4jIFwiTUFYX0FTU0VUX1NJWkVfTUJcIiA9IFwiNTBcIlxuIyBcIkRJU0FCTEVfTkVXX1JFTEVBU0VfQ0hFQ0tcIiA9IFwiZmFsc2VcIlxuIyBcIlBST01FVEhFVVNfQVVUSF9UT0tFTlwiID0gXCJcIlxuIyBcIlJBVEVfTElNSVRJTkdfRU5BQkxFRFwiID0gXCJmYWxzZVwiXG4jIFwiREJfV0FMX01PREVcIiA9IFwiZmFsc2VcIlxuIyBcIlNFQVJDSF9OVU1fV09SS0VSU1wiID0gXCIxXCJcbiMgXCJXRUJIT09LX05VTV9XT1JLRVJTXCIgPSBcIjFcIlxuIyBcIkFTU0VUX1BSRVBST0NFU1NJTkdfTlVNX1dPUktFUlNcIiA9IFwiMVwiXG4jIFwiUlVMRV9FTkdJTkVfTlVNX1dPUktFUlNcIiA9IFwiMVwiXG5cbiMgLS0tIEFzc2V0IFN0b3JhZ2UgKFMzKSAtLS1cbiMgXCJBU1NFVF9TVE9SRV9TM19FTkRQT0lOVFwiID0gXCJcIlxuIyBcIkFTU0VUX1NUT1JFX1MzX1JFR0lPTlwiID0gXCJcIlxuIyBcIkFTU0VUX1NUT1JFX1MzX0JVQ0tFVFwiID0gXCJcIlxuIyBcIkFTU0VUX1NUT1JFX1MzX0FDQ0VTU19LRVlfSURcIiA9IFwiXCJcbiMgXCJBU1NFVF9TVE9SRV9TM19TRUNSRVRfQUNDRVNTX0tFWVwiID0gXCJcIlxuIyBcIkFTU0VUX1NUT1JFX1MzX0ZPUkNFX1BBVEhfU1RZTEVcIiA9IFwiZmFsc2VcIlxuXG4jIC0tLSBBdXRoZW50aWNhdGlvbiAvIFNpZ251cCAtLS1cbiMgXCJESVNBQkxFX1NJR05VUFNcIiA9IFwiZmFsc2VcIlxuIyBcIkRJU0FCTEVfUEFTU1dPUkRfQVVUSFwiID0gXCJmYWxzZVwiXG4jIFwiRU1BSUxfVkVSSUZJQ0FUSU9OX1JFUVVJUkVEXCIgPSBcImZhbHNlXCJcbiMgXCJPQVVUSF9XRUxMS05PV05fVVJMXCIgPSBcIlwiXG4jIFwiT0FVVEhfQ0xJRU5UX1NFQ1JFVFwiID0gXCJcIlxuIyBcIk9BVVRIX0NMSUVOVF9JRFwiID0gXCJcIlxuIyBcIk9BVVRIX1NDT1BFXCIgPSBcIm9wZW5pZCBlbWFpbCBwcm9maWxlXCJcbiMgXCJPQVVUSF9QUk9WSURFUl9OQU1FXCIgPSBcIkN1c3RvbSBQcm92aWRlclwiXG4jIFwiT0FVVEhfQUxMT1dfREFOR0VST1VTX0VNQUlMX0FDQ09VTlRfTElOS0lOR1wiID0gXCJmYWxzZVwiXG4jIFwiT0FVVEhfVElNRU9VVFwiID0gXCIzNTAwXCJcblxuIyAtLS0gSW5mZXJlbmNlIENvbmZpZ3MgLS0tXG4jIFwiT1BFTkFJX0FQSV9LRVlcIiA9IFwiXCJcbiMgXCJPUEVOQUlfQkFTRV9VUkxcIiA9IFwiXCJcbiMgXCJPTExBTUFfQkFTRV9VUkxcIiA9IFwiXCJcbiMgXCJPTExBTUFfS0VFUF9BTElWRVwiID0gXCJcIlxuIyBcIklORkVSRU5DRV9URVhUX01PREVMXCIgPSBcImdwdC00LjEtbWluaVwiXG4jIFwiSU5GRVJFTkNFX0lNQUdFX01PREVMXCIgPSBcImdwdC00by1taW5pXCJcbiMgXCJFTUJFRERJTkdfVEVYVF9NT0RFTFwiID0gXCJ0ZXh0LWVtYmVkZGluZy0zLXNtYWxsXCJcbiMgXCJJTkZFUkVOQ0VfQ09OVEVYVF9MRU5HVEhcIiA9IFwiMjA0OFwiXG4jIFwiSU5GRVJFTkNFX0xBTkdcIiA9IFwiZW5nbGlzaFwiXG4jIFwiSU5GRVJFTkNFX05VTV9XT1JLRVJTXCIgPSBcIjFcIlxuIyBcIklORkVSRU5DRV9FTkFCTEVfQVVUT19UQUdHSU5HXCIgPSBcInRydWVcIlxuIyBcIklORkVSRU5DRV9FTkFCTEVfQVVUT19TVU1NQVJJWkFUSU9OXCIgPSBcImZhbHNlXCJcbiMgXCJJTkZFUkVOQ0VfSk9CX1RJTUVPVVRfU0VDXCIgPSBcIjMwXCJcbiMgXCJJTkZFUkVOQ0VfRkVUQ0hfVElNRU9VVF9TRUNcIiA9IFwiMzAwXCJcbiMgXCJJTkZFUkVOQ0VfT1VUUFVUX1NDSEVNQVwiID0gXCJzdHJ1Y3R1cmVkXCJcblxuIyAtLS0gQ3Jhd2xlciBDb25maWdzIC0tLVxuIyBcIkNSQVdMRVJfTlVNX1dPUktFUlNcIiA9IFwiMVwiXG4jIFwiQlJPV1NFUl9XRUJfVVJMXCIgPSBcImh0dHA6Ly9jaHJvbWU6OTIyMlwiXG4jIFwiQlJPV1NFUl9XRUJTT0NLRVRfVVJMXCIgPSBcIlwiXG4jIFwiQlJPV1NFUl9DT05ORUNUX09OREVNQU5EXCIgPSBcImZhbHNlXCJcbiMgXCJDUkFXTEVSX0RPV05MT0FEX0JBTk5FUl9JTUFHRVwiID0gXCJ0cnVlXCJcbiMgXCJDUkFXTEVSX1NUT1JFX1NDUkVFTlNIT1RcIiA9IFwidHJ1ZVwiXG4jIFwiQ1JBV0xFUl9GVUxMX1BBR0VfU0NSRUVOU0hPVFwiID0gXCJmYWxzZVwiXG4jIFwiQ1JBV0xFUl9TQ1JFRU5TSE9UX1RJTUVPVVRfU0VDXCIgPSBcIjVcIlxuIyBcIkNSQVdMRVJfRlVMTF9QQUdFX0FSQ0hJVkVcIiA9IFwiZmFsc2VcIlxuIyBcIkNSQVdMRVJfSk9CX1RJTUVPVVRfU0VDXCIgPSBcIjYwXCJcbiMgXCJDUkFXTEVSX05BVklHQVRFX1RJTUVPVVRfU0VDXCIgPSBcIjMwXCJcbiMgXCJDUkFXTEVSX1ZJREVPX0RPV05MT0FEXCIgPSBcImZhbHNlXCJcbiMgXCJDUkFXTEVSX1ZJREVPX0RPV05MT0FEX01BWF9TSVpFXCIgPSBcIjUwXCJcbiMgXCJDUkFXTEVSX1ZJREVPX0RPV05MT0FEX1RJTUVPVVRfU0VDXCIgPSBcIjYwMFwiXG4jIFwiQ1JBV0xFUl9FTkFCTEVfQURCTE9DS0VSXCIgPSBcInRydWVcIlxuIyBcIkNSQVdMRVJfWVRETFBfQVJHU1wiID0gXCJbXVwiXG5cbiMgLS0tIE9DUiBDb25maWdzIC0tLVxuIyBcIk9DUl9DQUNIRV9ESVJcIiA9IFwiXCJcbiMgXCJPQ1JfTEFOR1NcIiA9IFwiZW5nXCJcbiMgXCJPQ1JfQ09ORklERU5DRV9USFJFU0hPTERcIiA9IFwiNTBcIlxuXG4jIC0tLSBXZWJob29rIENvbmZpZ3MgLS0tXG4jIFwiV0VCSE9PS19USU1FT1VUX1NFQ1wiID0gXCI1XCJcbiMgXCJXRUJIT09LX1JFVFJZX1RJTUVTXCIgPSBcIjNcIlxuIyBcIldFQkhPT0tfVE9LRU5cIiA9IFwiXCJcblxuIyAtLS0gU01UUCBDb25maWd1cmF0aW9uIC0tLVxuIyBcIlNNVFBfSE9TVFwiID0gXCJcIlxuIyBcIlNNVFBfUE9SVFwiID0gXCI1ODdcIlxuIyBcIlNNVFBfU0VDVVJFXCIgPSBcImZhbHNlXCJcbiMgXCJTTVRQX1VTRVJcIiA9IFwiXCJcbiMgXCJTTVRQX1BBU1NXT1JEXCIgPSBcIlwiXG4jIFwiU01UUF9GUk9NXCIgPSBcIlwiXG5cbiMgLS0tIFByb3h5IENvbmZpZ3VyYXRpb24gLS0tXG4jIFwiQ1JBV0xFUl9IVFRQX1BST1hZXCIgPSBcIlwiXG4jIFwiQ1JBV0xFUl9IVFRQU19QUk9YWVwiID0gXCJcIlxuIyBcIkNSQVdMRVJfTk9fUFJPWFlcIiA9IFwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbiMgUGVyc2lzdGVudCBkYXRhIGRpcmVjdG9yeSBmb3IgS2FyYWtlZXBcbnZvbHVtZU5hbWUgPSBcImRhdGFcIlxubW91bnRQYXRoID0gXCIvZGF0YVwiXG5cbltbY29uZmlnLm1vdW50c11dXG4jIE1laWxpc2VhcmNoIGRhdGEgZGlyZWN0b3J5XG52b2x1bWVOYW1lID0gXCJtZWlsaXNlYXJjaFwiXG5tb3VudFBhdGggPSBcIi9tZWlsaV9kYXRhXCJcbiIKfQ==Links
Tags
bookmarks, bookmark-manager, self-hosted, ai, search, notes, productivity
Version: 0.25.0