在 Unraid 上的完整部署指南:Docker Compose 与 Community Apps 两种方式详解)
KarakeepHoarder在 Unraid 上的完整部署指南Docker Compose 与 Community Apps 两种方式详解【免费下载链接】hoarderA self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search项目地址: https://gitcode.com/GitHub_Trending/ho/hoarder本篇技术指南面向希望把 Karakeep原 Hoarder自托管书签收藏应用部署到 Unraid NAS 上的用户系统讲解两种官方推荐的安装路径使用Docker Compose Manager 插件推荐与使用Community Apps 应用模板并深入说明多容器服务的布线原理、必备环境变量以及搜索、AI 自动打标签等可选能力的配置方法。读完本文你将能够在 Unraid 上独立完成 Karakeep 的安装、配置、搜索接入与日常升级维护。Karakeep 是一个可自托管的收藏一切应用支持链接、笔记与图片并提供基于 AI 的自动打标签与全文搜索。在 Unraid 上部署它的核心挑战在于Karakeep 是一个多容器服务而 Unraid 默认并不原生支持多容器编排因此你需要通过插件或应用模板把各个容器拼装起来。本文将从这一关键点展开。一、部署前的架构认知Karakeep 由哪些服务组成在动手之前先理解 Karakeep 的运行时架构这决定了 Unraid 上所有布线工作的方向。官方 Docker 部署参考 docker/docker-compose.yml由三个服务组成webKarakeep 主应用容器镜像为ghcr.io/karakeep-app/karakeep对外暴露3000端口负责 Web UI 与 APIchromeheadless Chrome 服务镜像为ghcr.io/karakeep-app/karakeep-chrome用于抓取网页内容、截图与执行 JavaScript通过调试端口9222对外提供连接meilisearch全文搜索引擎镜像为getmeili/meilisearch:v1.41.0提供全文搜索与混合搜索能力。三个服务之间的协作关系是web通过环境变量MEILI_ADDR连接 MeiliSearch、通过BROWSER_WEB_URL连接 headless Chrome。官方 compose 文件中已经替你做好了这三者之间的网络布线与数据卷data卷存放数据库与默认资源meilisearch卷存放索引数据这也是官方推荐在 Unraid 上直接使用官方 compose 文件的原因。二、方式一推荐使用 Docker Compose Manager 插件部署这是官方文档标注为Recommended的部署方式核心思路是在 Unraid 上安装 Docker Compose Manager 插件把官方仓库提供的 docker-compose.yml 直接作为 Stack 使用从而获得与标准 Docker 部署完全一致的容器编排体验。1. 安装 Docker Compose Manager 插件在 Unraid 的Apps应用标签页中搜索并安装Docker Compose Manager插件其官方支持帖位于 Unraid 论坛。安装完成后Unraid 界面会出现 Docker Compose 管理入口用于创建和管理 Stack。2. 创建 Stack 并导入官方 compose 文件在 Docker Compose Manager 中新建一个 Stack自定义一个名称例如karakeep将官方仓库根目录下的 docker/docker-compose.yml 内容完整复制到 Stack 的 compose 编辑器中也可以先git clone本仓库后直接引用该文件仓库地址仅用于说明获取方式git clone https://gitcode.com/GitHub_Trending/ho/hoarder保存 Stack。官方 compose 文件的关键内容如下已完整呈现可直接使用services: web: image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release} restart: unless-stopped volumes: # By default, the data is stored in a docker volume called data. # If you want to mount a custom directory, change the volume mapping to: # - /path/to/your/directory:/data - data:/data ports: - 3000:3000 env_file: - .env environment: MEILI_ADDR: http://meilisearch:7700 BROWSER_WEB_URL: http://chrome:9222 # OPENAI_API_KEY: ... # You almost never want to change the value of the DATA_DIR variable. # If you want to mount a custom directory, change the volume mapping above instead. DATA_DIR: /data # DONT CHANGE THIS chrome: image: ghcr.io/karakeep-app/karakeep-chrome:release restart: unless-stopped init: true command: - --disable-gpu - --disable-dev-shm-usage - --hide-scrollbars - --disable-blink-featuresAutomationControlled - --window-size1440,900 meilisearch: image: getmeili/meilisearch:v1.41.0 restart: unless-stopped env_file: - .env environment: MEILI_NO_ANALYTICS: true volumes: - meilisearch:/meili_data volumes: meilisearch: data:3. 填充环境变量关键步骤Stack 创建完成后需要参照 Docker 安装指南 中第 3 步的方法配置环境变量。在 Stack 的.env文件或 compose 管理界面提供的环境变量区域中添加如下最小配置KARAKEEP_VERSIONrelease NEXTAUTH_SECRETsuper_random_string MEILI_MASTER_KEYanother_random_string NEXTAUTH_URLhttp://localhost:3000各项说明变量必填说明KARAKEEP_VERSION否镜像版本标签。填release表示跟随最新稳定版建议固定为具体版本号如0.10.0以便控制升级节奏NEXTAUTH_SECRET是用于签名 JWT 令牌的随机字符串必须修改MEILI_MASTER_KEY是生产环境启用搜索时MeiliSearch 的主密钥必须修改NEXTAUTH_URL是你的服务访问地址必须改为实际地址如http://你的NAS_IP:3000生成随机字符串可以使用openssl rand -base64 36在单独终端执行。对于MEILI_MASTER_KEY官方建议使用openssl rand -base64 36 | tr -dc A-Za-z0-9生成纯字母数字的密钥避免特殊字符带来的配置问题。注意每次修改.env文件后都需要重新执行docker compose up使变更生效。4. 启动服务并验证在 Docker Compose Manager 中启动该 Stack等效于执行docker compose up -d。启动完成后访问http://你的NAS地址:3000看到登录页即表示部署成功。5.可选启用 AI 自动打标签自动打标签需要配置推理服务二者至少配置其一OpenAI在.env中添加OPENAI_API_KEYkey即可启用基于 OpenAI 的自动打标签与自动摘要能力相关成本说明见 OpenAI 配置说明本地推理Ollama设置OLLAMA_BASE_URL指向本地 Ollama API 地址即可在无外部 API 依赖的情况下完成本地推理详见 不同 AI 提供方指南。6.可选启用更多能力完整的可配置项见 环境变量配置文档常用可选能力包括整页归档CRAWLER_FULL_PAGE_ARCHIVE、整页截图CRAWLER_FULL_PAGE_SCREENSHOT、PDF 快照CRAWLER_STORE_PDF、视频下载CRAWLER_VIDEO_DOWNLOAD、推理语言INFERENCE_LANG等。快捷收藏扩展浏览器扩展与移动端 App的安装方式见 快速收藏指南。三、方式二通过 Community Apps 应用模板安装1. 背景与适用前提Community Apps 模板由社区维护官方文档特别注明社区维护字样。由于 Karakeep 是多容器服务而 Unraid 的 Community Apps 机制不原生支持多容器编排因此你需要把各个部件作为独立应用分别安装再手动把它们接线起来。2. 需要安装的三个服务官方文档列出的服务总览如下服务镜像/来源作用备注Karakeep社区模板Karakeep 主 Web 应用支持帖见 Unraid 论坛 Collectathon / Karakeep 主题Browserless社区模板headless Chrome 服务用于抓取内容Karakeep 官方 compose 并不使用 Browserless但它是 Unraid 上当前唯一可用的 headless Chrome 服务因此必须使用它MeiliSearch社区模板搜索引擎可选但强烈建议不安装则搜索功能被禁用3. 手动布线让三个应用相互通信安装完成后需要在 Karakeep 应用的环境变量中手动完成以下接线连接 MeiliSearch设置MEILI_ADDR指向 MeiliSearch 容器的地址与端口例如http://MeiliSearch容器IP:7700同时设置MEILI_MASTER_KEY为安装 MeiliSearch 时配置的主密钥。如果跳过这一步Karakeep 将禁用搜索功能连接 Browserless由于 Browserless 通过 WebSocket 提供调试连接应使用BROWSER_WEBSOCKET_URL变量填入 Browserless 提供的 WebSocket 地址这正是配置文档中对BROWSER_WEBSOCKET_URL的说明If you want to use browserless, use their websocket address here即若使用 browserless请在此填入其 websocket 地址。作为对照官方 compose 中连接自建 Chrome 容器时使用的是BROWSER_WEB_URL: http://chrome:9222这一 HTTP 调试地址形式基础变量同样需要设置NEXTAUTH_SECRET与NEXTAUTH_URL见上文变量表。从源码看Karakeep 的爬虫配置中BROWSER_WEB_URL与BROWSER_WEBSOCKET_URL二选一即可见 packages/shared/config.ts前者是浏览器调试控制台的 HTTP 地址worker 会通过它解析出 WebSocket 地址后者是直接的 WebSocket 地址。两者都未设置时worker 将退化为纯 HTTP 请求跳过截图与 JavaScript 执行。4. 数据持久化三个应用各自的数据需要持久化存放Karakeep 应用需挂载一个持久目录到容器的/data对应DATA_DIR环境变量此变量在官方 compose 中标注为 DONT CHANGE THIS如需自定义目录应改卷映射而非该变量MeiliSearch 需挂载持久目录到/meili_data存放索引数据。四、关键环境变量速查表部署必读以下为部署与运维最常用的环境变量完整清单以 环境变量配置文档 为准全部变量的解析与校验逻辑可在 packages/shared/config.ts 中查看变量必填默认值说明PORT否3000Web 服务监听端口。使用 Docker 时不要改它应改 Docker 对外映射端口DATA_DIR是未设置持久数据目录数据库存放于此未设置ASSETS_DIR时资源也默认存于${DATA_DIR}/assetsNEXTAUTH_URL是未设置指向服务器地址缺失时登出等场景会跳转到错误地址NEXTAUTH_SECRET是未设置签名 JWT 的随机串用openssl rand -base64 36生成MEILI_ADDR否未设置MeiliSearch 地址如http://meilisearch:7700不设置则搜索被禁用MEILI_MASTER_KEY仅生产且启用搜索时未设置MeiliSearch 主密钥用openssl rand -base64 36 \| tr -dc A-Za-z0-9生成BROWSER_WEB_URL否未设置headless 浏览器 HTTP 调试地址如http://chrome:9222BROWSER_WEBSOCKET_URL否未设置headless 浏览器 WebSocket 地址Browserless 场景使用此项OPENAI_API_KEY否未设置自动打标签用的 OpenAI 密钥OLLAMA_BASE_URL否未设置本地推理 Ollama API 地址INFERENCE_LANG否english生成标签的语言LOG_LEVEL否debug日志级别生产环境建议设为notice或warningDB_WAL_MODE否false为 SQLite 启用 WAL 模式提升数据库性能数据库位于网络盘时不要开启DISABLE_SIGNUPS否false设为 true 禁止新用户注册从源码实现看packages/shared/config.ts所有环境变量在启动时通过 Zod schema 一次性解析并校验非法取值会导致应用启动失败——例如EMBEDDING_TEXT_MODEL_DIMENSION_OVERRIDE与EMBEDDING_DIMENSIONS不一致时会直接报错拒绝启动。这提醒我们在 Unraid 上修改环境变量后务必观察容器日志确认启动成功。五、搜索与 AI 能力的可选配置全文搜索启用 MeiliSearchMEILI_ADDRMEILI_MASTER_KEY后即可获得全文搜索。SEARCH_NUM_WORKERS默认 1控制搜索索引并发数高内容量场景可调大SEARCH_JOB_TIMEOUT_SEC默认 30控制索引任务超时语义/混合搜索SEMANTIC_SEARCH_ENABLED默认 true为实验性功能需同时启用EMBEDDING_ENABLE_AUTO_INDEXING默认在使用默认 OpenAI 配置时自动开启与嵌入模型配置EMBEDDING_TEXT_MODEL默认text-embedding-3-small维度EMBEDDING_DIMENSIONS默认 1536自动打标签/摘要配置OPENAI_API_KEY或OLLAMA_BASE_URL后即启用。INFERENCE_ENABLE_AUTO_TAGGING默认 trueINFERENCE_ENABLE_AUTO_SUMMARIZATION默认 false。INFERENCE_CONTEXT_LENGTH默认 2048控制送入模型的 token 数越大标签质量越好但推理成本越高无 GPU 的 Ollama 场景可调大INFERENCE_JOB_TIMEOUT_SEC默认 30避免任务超时OCR默认使用 Tesseract 从图片提取文字OCR_LANGS默认eng也可设置OCR_USE_LLMtrue改用已配置的推理模型进行 LLM 式 OCR复杂图片效果更好。六、升级与维护版本策略决定升级方式升级方式取决于KARAKEEP_VERSION变量的取值固定版本修改KARAKEEP_VERSION为新版本号后重新运行docker compose up -d会自动拉取新镜像使用release标签需要强制拉取最新镜像执行docker compose up --pull always -d。升级注意事项若你的自定义 compose 文件仍在使用旧的 Alpine Chrome 镜像请参考 Chrome 镜像迁移指南 迁移到 Karakeep 官方发布的ghcr.io/karakeep-app/karakeep-chrome镜像迁移不涉及数据变更无需数据库迁移只需更新镜像后docker compose pull chrome docker compose up -d chrome若需要升级/迁移 MeiliSearch 版本参考 故障排查文档 中的相关说明在 Unraid 上通过 Community Apps 安装时各应用的升级需分别在各自的应用管理页面完成并保持三个组件版本之间的兼容性。七、总结在 Unraid 上部署 Karakeep 有两条清晰路径推荐使用 Docker Compose Manager 插件直接复用官方 docker-compose.yml容器编排、网络与数据卷都由官方维护体验最接近标准 Docker 部署只需按 Docker 安装指南 填充环境变量即可Community Apps 方式则需要分别安装 Karakeep、Browserless、MeiliSearch 三个应用并手动接线MEILI_ADDR、BROWSER_WEBSOCKET_URL适合习惯使用 Unraid 原生应用模板、不引入额外插件的用户。无论选择哪种方式配置的最终落点都是 packages/shared/config.ts 中定义的整套环境变量体系理解这张变量表就等于掌握了 Karakeep 在 Unraid 上的一切调优入口。【免费下载链接】hoarderA self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search项目地址: https://gitcode.com/GitHub_Trending/ho/hoarder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考