十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Hister 团队私有搜索实战:多用户账户、共享文档库与浏览器扩展接入指南

Hister 团队私有搜索实战:多用户账户、共享文档库与浏览器扩展接入指南 Hister 团队私有搜索实战多用户账户、共享文档库与浏览器扩展接入指南【免费下载链接】histerYour own search engine项目地址: https://gitcode.com/GitHub_Trending/hi/hister每个团队、合作社、研究组或黑客空间几乎都有一批人人必读的页面成员手册、设备说明书、项目 Wiki还有那份总会被反复发给新人的指南。与此同时每个成员在工作中各自发现的内容又各不相同——一个数据库问题的解答、一场有价值的讨论、一篇值得反复回味的文章。Hister 允许你在一台服务器上同时承载这两种形态每个成员拥有独立账户和私有可搜索收藏共享文档则出现在每个人的搜索结果中。本文将以 Hister 官方博客文章Hister: A Private Search Engine for Teams and Organizations为主体结合仓库中的 CLI 源码与配置文档完整讲解多用户实例的搭建步骤、共享文档库的建立方法、浏览器扩展的接入方式以及用户管理命令与索引命令的底层实现细节。读完本文你将掌握在一台服务器上为团队搭建带账户隔离的私有搜索服务的完整方案。多用户模型个人收藏与共享文档如何共存先看一个典型场景。假设 Alice 和 Bob 在同一个项目组工作两人都需要团队手册和参考文档Alice 正在研究数据库问题Bob 则在阅读部署工具链的资料。管理员把手册作为共享材料索引进来Alice 和 Bob 各自用自己的账户连接浏览器扩展。在扩展默认的个人提交设置下两人浏览的页面会分别进入各自的收藏。此时两人的搜索覆盖范围如下被索引的材料Alice 能找到Bob 能找到共享团队手册是是归在 Alice 名下的文章是否归在 Bob 名下的讨论否是当 Alice 搜索database backup时她能同时找到团队备份指南和她自己读过的关于 PostgreSQL 恢复的文章Bob 同样能找到共享指南以及他个人账户下索引的一切内容。这个作用域由服务器自动应用——两人都无需在日常查询中手动添加所有权过滤条件。这套模型的核心机制是文档归属ownership启用用户处理user handling后每个文档都带有一个用户 ID搜索时自动限定为自己索引的文档 归属于用户 ID 0 的全局文档。用户彼此之间看不到对方的私有文档这是通过搜索层强制实施的访问控制而不是靠约定。搭建团队的 Hister 实例先按安装指南和服务器部署指南完成一次全新安装。下面的例子使用https://hister.example.com作为站点地址Hister 与 HTTPS 反向代理部署在同一台机器上。在团队的config.yml中添加以下配置app: user_handling: true public: false server: address: 127.0.0.1:4433 base_url: https://hister.example.com各参数作用如下app.user_handling: true启用多用户模式为每个成员创建独立账户。该模式默认关闭单用户部署完全兼容、无需改动见 config/config.go 中对应的配置结构体字段。app.public: false关闭匿名公开搜索。此时对实例的一切搜索包括共享文档的搜索都要求登录。从源码校验看app.public启用时要求配置access_token或user_handling至少其一否则 Hister 拒绝启动见 config/config.go。server.address: 127.0.0.1:4433Hister 监听本机回环地址反向代理负责对外暴露。请务必把示例主机名替换为你自己的域名。server.base_url: https://hister.example.com对外的基础 URL。注意只设置base_url并不会配置 HTTPS反向代理仍需自行处理 TLS 终结并把请求转发到127.0.0.1:4433。接下来在服务器主机上创建一个管理员和两个普通成员账户hister --config config.yml create-user admin --admin hister --config config.yml create-user alice hister --config config.yml create-user bob每个命令都会交互式提示输入密码至少 8 个字符且需二次确认见 cmd/users.go。这些命令必须与运行服务器时使用相同的配置文件和操作系统账户执行这样它们才会访问同一个数据库和数据目录。从源码看create-user与其它用户管理命令一样通过requireUserHandlingAndInitDB前置检查强制要求user_handling: true见 cmd/users.go。然后启动服务器hister --config config.yml listenAlice 和 Bob 现在就可以打开团队地址并登录了。如果你是在已有个人安装实例上改造请先检查现有文档的归属在未启用用户处理时索引的文档归属于用户 ID0开启多用户后会对所有已登录成员可见。如何把这些文档迁移到某个个人账户下详见用户处理指南中的单用户兼容性一节。给每个人一份有用的起点收藏Hister 把归属于用户 ID0的文档称为全局文档global documents。在本方案中它们就是全体成员共享的收藏集合。管理员可以用--global索引标志向其中添加内容。首先在服务器主机上取回管理员个人访问令牌hister --config config.yml show-user admin --token将上面输出的令牌替换到下面的ADMIN_TOKEN位置。同样使用服务器配置执行抓取并把手册 URL 与允许域名替换为你自己的hister --config config.yml --token ADMIN_TOKEN index \ --recursive \ --global \ --labelteam-handbook \ --allowed-domainhandbook.example.com \ --max-depth4 \ --max-links200 \ https://handbook.example.com/各参数的含义与实现全部来自 cmd/index.go 的 flag 定义参数说明默认值--global让被索引文档对所有用户可用多用户模式下仅管理员可用false--label给所有被索引文档附加一个标签成员可据此检索空--recursive-r递归抓取链接页面进入持久化抓取任务模式false--allowed-domain抓取时允许的域名可重复指定多个为空则不限空全部允许--max-depth最大抓取深度0表示不限制0--max-links最多访问的页面数0表示不限制0--global使页面进入共享集合此命令中它要求使用管理员的令牌认证。--label给集合命名成员搜索时可以直接引用。其余选项把抓取限制在选定站点内并控制规模。如果手册站点本身需要登录则需要通过爬虫的认证选项单独配置对该数据源的访问与 Hister 自身的令牌认证互不影响。之后 Alice 和 Bob 都可以这样搜索label:team-handbook database backup如果要跨整个共享集合搜索user_id:0 database backupuser_id:是查询构建器原生支持的字段查询——源码测试Test_build_user_id验证了user_id:42会被解析为数值范围查询子句见 builder_test.go因此user_id:0可以直接命中全部全局文档。标签用于组织结果但每个成员依然能搜到所有全局文档无论其携带什么标签所以在选择共享来源时要想清楚受众。起步阶段不需要大而全手册、项目 Wiki、成员经常问起的参考页就足够了。更多抓取示例可参考为整个文档栈建立索引一文。接入每个成员的浏览器Alice 安装浏览器扩展把服务器地址设为团队的 Hister 地址并用自己的账户完成认证。认证有两种方式在她的 Hister 个人资料页生成一个个人访问令牌填入扩展在同一浏览器中登录 Web 界面后点击扩展里的Authenticate with Browser Session让扩展直接复制当前登录会话的 Cookie。Bob 用自己的账户执行同样的步骤。每个成员都使用各自的凭据命令行客户端也不例外。对于个人浏览场景请保持扩展的 Submit as public documents 开关处于关闭状态这是默认值。从扩展源码看该选项的界面文案是Store newly indexed documents as public results with user id 0即把新索引的文档作为用户 ID 0 的公共结果存储见 Options.svelte。关闭状态下Alice 浏览时捕获的页面归在 Alice 名下Bob 捕获的归在 Bob 名下。扩展还会在未认证时自动重置该开关见 Options.svelte。此外每个账户还拥有独立的跳过规则、优先级规则和搜索别名。Alice 可以围绕数据库工作调优她的搜索Bob 可以为部署文档创建快捷方式这些规则只影响各自账户的搜索与索引行为。个人收藏的隔离由 Hister 的访问控制保证同时也要清楚服务器运维方掌握着全部存储数据所以请把实例托付给团队信任的人。刻意地分享有价值的内容假如 Alice 发现了一篇整个团队都能用上的指南最简单的工作流是把 URL 发给管理员管理员审核后用它执行带--global的索引命令把页面加入共享集合。成员也可以直接贡献在扩展里开启Submit as public documents后新提交的页面会进入全局集合。配合上面的服务器配置app.public: false这些页面仅对已登录成员可搜索如果在服务器上启用app.public: true匿名访客也能看到全局文档详见用户处理指南的 Public Mode 一节。注意扩展的这个开关作用于其后的所有提交直到被再次关闭。一次刻意的分享会话建议这样做关闭自动索引开启公共提交手动索引打算分享的页面回到个人浏览前关闭公共提交。团队可以自行选择贡献习惯管理员维护核心参考资料成员在工作中把精选发现补充进来。让收藏对下一位成员保持有用共享材料需要有人照看。给每个数据源指定一名负责成员手册变更时重新跑抓取、检查有价值的页面是否被捕获、移除团队已不再使用的材料。新成员加入时为他创建账户并接入扩展。他的个人收藏从空开始但共享手册和参考资料立即可搜索随着他自己的浏览个人上下文逐渐积累搜索对他才真正变得有用。对一个黑客空间最初的成果可能是设备说明书和工坊笔记对一个研究组可能是背景阅读和项目文档对一个合作社则可能是操作规程和新成员经常需要的答案。源码视角用户管理命令与权限模型完整的用户管理命令集全部要求user_handling: true且需要服务器主机直连访问如下实现见 cmd/users.go命令功能关键标志create-user USERNAME创建账户交互式设置密码--admin授予管理员权限delete-user USERNAME软删除账户若该用户名下存在索引文档需加--purge才会删除--purge先删除该用户文档再删账户show-user USERNAME显示账户信息--token同时显示个人访问令牌update-user USERNAME修改账户--username NEW/--password/--regen-token/--toggle-admin密码以 bcrypt 哈希存储且永不通过 API 返回会话 Cookie 只包含随机不透明标识符会话数据与标识符哈希存储在 SQL 数据库中登出会立即撤销数据库记录。个人访问令牌用于 API 与 CLI 认证X-Access-Token请求头或hister -t token一旦重新生成旧令牌立即失效需要同步更新扩展和脚本。OAuth 登录默认使用 S256 PKCE 防止授权流程中的 CSRF。这些安全细节的完整说明见用户处理指南。delete-user的实现值得一提它会先通过 API 以user_id:ID查询该用户的文档数若存在文档且未指定--purge则拒绝继续只有显式--purge才会先清理文档再软删除账户见 cmd/users.go。这与数据生命周期文档中多用户所有权一节描述的语义一致。部署建议用户处理模式面向一个可信群体家庭、团队的共享实例。如果是对公网开放请务必在 Hister 前放置带 HTTPS 的反向代理并且只索引可以公开展示的内容。另外多用户模式下管理员还可执行POST /api/reindex重建全文索引与POST /api/cleanup清理失效文档等特权操作非管理员调用会收到403 Forbidden。小结一套面向团队与组织的 Hister 部署本质上只有三个步骤用user_handling: true开启账户体系、用--global索引建立用户 ID 0 的共享集合、让每个成员用自己的账户接入浏览器扩展。作用域由服务器自动施加个人收藏彼此隔离共享文档人人可搜。从你反复发给彼此的页面开始给它们在 Hister 里安一个共享的家然后让每个成员围绕它构建属于自己的收藏。【免费下载链接】histerYour own search engine项目地址: https://gitcode.com/GitHub_Trending/hi/hister创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表