
后端前端云原生【免费下载链接】hedgedocHedgeDoc - Ideas grow better together项目地址https://gitcode.com/gh_mirrors/he/hedgedoc点击查看免费下载本指南系统讲解 HedgeDoc 后端笔记Notes模块的全部配置项涵盖禁用的笔记别名、单文档最大长度、访客/登录用户的默认权限级别、实时编辑时的周期性修订保存间隔以及修订版本保留天数。你将掌握每个HD_NOTE_*环境变量的默认值、取值范围、底层校验逻辑与实际生效位置并能据此为生产环境写出完整、合规的配置文件。配置机制概述HedgeDoc 后端通过环境变量进行配置既可以直接设置系统环境变量也可以写入项目根目录的.env文件官方 Docker 容器中为/usr/src/app/.env格式为HD_变量名值的键值对可参考 配置总览文档。笔记模块的所有配置项都在后端启动时由 note.config.ts 统一解析该文件使用nestjs/config的registerAs(noteConfig, ...)注册配置工厂并通过 zod schema 声明每个字段的类型、默认值与约束。配置解析失败时会调用 utils.ts 中的printConfigErrorAndExit将错误信息打印到 STDERR 并以退出码 1 终止进程——因此错误的笔记配置会让后端直接拒绝启动而不是带病运行。全部配置项速查表以下是 notes.md 中定义的全部笔记模块环境变量表格完整继承了原始文档的默认值、示例与说明并补充了源码层面可确认的取值范围约束环境变量默认值示例说明HD_NOTE_FORBIDDEN_ALIASES-未设置notAllowed, alsoNotAllowed禁止创建或访问的笔记 ID别名列表以,分隔。列表中的别名会被统一转换为小写无需重复填写大小写变体。HD_NOTE_MAX_LENGTH100000-任何单篇文档的最大长度字符数修改该值会影响用户的编辑性能。HD_NOTE_PERMISSIONS_MAX_GUEST_LEVELwritedeny,read,write,full访客用户在本实例上的最高访问级别。该值必须至少与HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE同级不能更低。HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_INwritenone,read,write新建笔记时logged-in已登录用户组的默认权限。HD_NOTE_PERMISSIONS_DEFAULT_EVERYONEreadnone,read,write由已登录用户创建的新笔记中everyone所有人含登录与访客组的默认权限访客创建的笔记该值恒为write。HD_NOTE_PERSIST_INTERVAL100,5,10,20实时编辑期间周期性创建笔记修订的间隔单位是分钟。设为0表示停用周期性修订创建。HD_NOTE_REVISION_RETENTION_DAYS0-修订版本应保留的天数。未设置或设为0时所有修订永久保留。注配置源码 note.config.ts 还额外支持一个未写入文档表格的布尔型变量HD_NOTE_PERMISSIONS_DEFAULT_PUBLICLY_VISIBLE默认false用于控制新建笔记是否默认公开可见解析规则遵循 utils.ts 中的parseOptionalBooleantrue、1、y、yes均视为真。权限级别的数值模型在深入各配置项之前需要先理解权限级别的底层实现。权限枚举定义在 commons/src/permissions/permission-level.enum.ts 中共四级级别名称数值含义deny0无权访问笔记或对象read1只读访问write2可写入但不包含删除笔记或修改权限的能力full3完整权限即所有者可删除笔记、修改权限对访客而言还包含创建笔记的权限配置解析时会先把字符串如write通过PermissionLevelValues映射为数值如 2再参与后续的跨字段一致性校验因此文章下文讨论的更高/更低级别均指这一数值序列。HD_NOTE_FORBIDDEN_ALIASES禁用别名列表该变量用于声明一组任何人都无法创建或请求的笔记 ID。配置层会做两件事按逗号切分解析时调用 utils.ts 的toArrayConfig先整体trim再按,拆分并对每项trim统一转小写note.config.ts 在读取环境变量后立即对每个别名执行toLowerCase()所以无需重复填写大小写变体。schema 还要求每个别名至少包含 1 个字符z.string().min(1)。该项的实际生效位置在别名服务 alias.service.ts当有人尝试创建或请求某个笔记别名时服务会把请求中的别名转小写后与配置列表比对this.noteConfig.forbiddenAliases.includes(alias.toLowerCase())命中即拒绝。典型配置示例HD_NOTE_FORBIDDEN_ALIASESadmin, root, system-notesHD_NOTE_MAX_LENGTH单文档最大长度该变量控制单篇文档的最大字符数默认 100000。schema 约束为正整数z.number().int().positive()因此负值、小数与非数字都会导致配置校验失败。测试用例 note.config.spec.ts 分别验证了负数报错expected number to be 0、小数expected int与字符串expected number, received NaN三种非法输入。实际生效位置在笔记服务 note.service.ts创建或更新笔记内容时若noteContent.length this.noteConfig.maxLength则拒绝保存。对应测试 note.service.spec.ts 用a.repeat(maxLength 1)验证了超长内容的拦截行为。配置示例# 允许单篇文档最多 200000 个字符 HD_NOTE_MAX_LENGTH200000注意原文档明确指出该值的变化会影响所有用户的性能——文档越长实时同步、渲染与版本存储的开销越大调高前建议先评估实例负载。权限默认值三件套MAX_GUEST_LEVEL / DEFAULT_LOGGED_IN / DEFAULT_EVERYONE这三个变量共同决定新笔记创建时的默认权限结构它们之间存在严格的联动约束。各自的角色HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL默认write访客在本实例上的最高权限天花板。它不只影响新笔记还影响整体访问控制在 guests-enabled.guard.ts 中若该值等于PermissionLevel.DENY访客访问会被整体禁用在 notes.controller.ts 中当请求者请求的权限级别超过maxGuestLevel时会被拒绝。HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN默认write已登录用户组在新笔记上的默认权限。HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE默认read所有人组登录用户 访客在新笔记上的默认权限。该变量仅适用于由已登录用户创建的笔记访客创建的笔记此项恒为write这是原文档明确规定的行为。跨字段一致性校验重要note.config.ts 的superRefine在启动时执行三条联动规则违反任何一条都会打印错误并退出退出码 1默认级别不得高于访客上限defaultEveryone maxGuestLevel时启动失败例如HD_NOTE_PERMISSIONS_DEFAULT_EVERYONEwrite而HD_NOTE_PERMISSIONS_MAX_GUEST_LEVELread的组合不被允许everyone 不应高于 logged-indefaultEveryone defaultLoggedIn时启动失败因为所有人权限高于已登录用户在逻辑上不成立特殊组合当maxGuestLevel full时defaultEveryone必须为write——否则访客创建笔记恒为write会与最高为 full的设置产生矛盾无法写入自己创建的笔记。此外default.everyone与default.loggedIn两个字段都通过.refine禁止取full级别full在笔记上下文中保留给所有者这是文档表格中允许值只列出nonedeny、read、write的源码原因。测试文件 note.config.spec.ts 对上述每种冲突组合均有对应用例。完整配置示例# 允许访客最高写权限所有人默认只读登录用户默认可写 HD_NOTE_PERMISSIONS_MAX_GUEST_LEVELwrite HD_NOTE_PERMISSIONS_DEFAULT_EVERYONEread HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_INwrite # 若希望新笔记默认公开可见额外变量 HD_NOTE_PERMISSIONS_DEFAULT_PUBLICLY_VISIBLEtrueHD_NOTE_PERSIST_INTERVAL实时编辑的周期性持久化实时协作编辑期间文档内容会不断变化。该变量默认10单位分钟控制后端周期性将实时笔记落盘并生成修订的快照间隔。schema 约束为非负整数z.number().int().min(0)。生效逻辑在 realtime-note.service.tsstartPersistTimer先过滤掉persistInterval 0的值此时不启动任何定时器即停用周期性修订创建否则以persistInterval * 60 * 1000毫秒为周期通过setInterval调用saveRealtimeNote并把定时器注册进 NestJS 的SchedulerRegistry笔记销毁时同步清理。实时笔记销毁前beforeDestroy事件仍会执行一次保存因此0只是关闭周期性快照并不会丢失最终内容。# 每 5 分钟生成一次修订快照 HD_NOTE_PERSIST_INTERVAL5 # 停用周期性修订创建 HD_NOTE_PERSIST_INTERVAL0测试 realtime-note.service.spec.ts 使用persistInterval: 0的 mock 配置验证了停用行为。HD_NOTE_REVISION_RETENTION_DAYS修订保留期限该变量默认0控制修订版本的历史保留天数schema 约束为非负整数z.number().int().nonnegative()。语义如下未设置或设为0所有修订永久保留设为正整数 N仅保留最近 N 天内的修订更早的修订由清理任务删除。清理逻辑实现在 revisions.service.ts任务首先检查revisionRetentionDays 0若成立则直接跳过对应原文档永久保留语义否则按 noteId 分组统计早于保留期限与处于期限内的修订数量并针对不同情况例如某篇笔记只剩一条过期修订、或有多条过期修订分别决策保留最接近保留期限边界的那条修订删除其余过期修订避免笔记历史完全清空。测试 revisions.service.spec.ts 覆盖了revisionRetentionDays 1与0不执行清理两种场景。# 修订只保留 30 天更早的自动删除 HD_NOTE_REVISION_RETENTION_DAYS30一份完整的生产配置示例综合上述所有变量一份覆盖笔记模块全部配置项的.env片段如下可与 配置总览文档 中的全局配置合并使用# ---- Notes 模块 ---- # 禁止创建/访问的别名 HD_NOTE_FORBIDDEN_ALIASESadmin, root, system, internal # 单文档最大长度字符 HD_NOTE_MAX_LENGTH100000 # 访客最高权限级别 HD_NOTE_PERMISSIONS_MAX_GUEST_LEVELwrite # 登录用户默认权限 HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_INwrite # 所有人默认权限访客创建笔记恒为 write HD_NOTE_PERMISSIONS_DEFAULT_EVERYONEread # 新笔记默认公开可见 HD_NOTE_PERMISSIONS_DEFAULT_PUBLICLY_VISIBLEfalse # 实时编辑时每 10 分钟生成一次修订快照 HD_NOTE_PERSIST_INTERVAL10 # 修订保留 30 天 HD_NOTE_REVISION_RETENTION_DAYS30配置校验与错误排查由于全部笔记配置项都经过 note.config.ts 的 zod schema 校验启动时的报错信息可以直接指导排障。综合 note.config.spec.ts 的断言常见错误及对应提示包括错误场景启动报错信息摘录别名为空字符串HD_NOTE_FORBIDDEN_ALIASES[0]: Too small: expected string to have 1 characters最大长度取负值HD_NOTE_MAX_LENGTH: Too small: expected number to be 0最大长度为小数HD_NOTE_MAX_LENGTH: Invalid input: expected int, received number最大长度非数字HD_NOTE_MAX_LENGTH: Invalid input: expected number, received NaN权限级别非法HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE: Invalid option: expected one of deny\|read\|write\|fulleveryone 高于 logged-in...This would give everyone greater permissions than logged-in users...默认级别高于访客上限...the default level may not be higher than the maximum guest level.maxGuestLevelfull 且 everyone 非 write...This does not allow the guest users to write in the notes they can create.保留天数为负HD_NOTE_REVISION_RETENTION_DAYS: Too small: expected number to be 0持久化间隔为负HD_NOTE_PERSIST_INTERVAL: Too small: expected number to be 0同时测试与开发环境使用 note.config.mock.ts 提供默认 mock 配置maxLength: 100000、maxGuestLevel: full、persistInterval: 10等可帮助理解各字段在生产默认值之外的可选形态。掌握以上校验规则后你即可在启动前预判配置是否合法避免部署后才暴露权限或保留策略问题。赞分享后端前端云原生【免费下载链接】hedgedocHedgeDoc - Ideas grow better together项目地址https://gitcode.com/gh_mirrors/he/hedgedoc点击查看免费下载相关推荐HedgeDoc 安全配置深度指南速率限制Rate Limiting的分层模型、环境变量与源码实现HedgeDoc 安全配置深度指南速率限制Rate Limiting的分层模型、环境变量与源码实现 本文围绕 HedgeDoc 官方安全配置文档 doc后端前端云原生ZCF安全配置完全指南环境变量、权限模板与隐私保护的最佳实践ZCF安全配置完全指南环境变量、权限模板与隐私保护的最佳实践 在AI开发工具日益普及的今天 ZCF安全配置 已成为保护开发环境、API密钥和敏感数据的关键环开发工具CLIAI 应用HedgeDoc权限管理完全手册安全分享笔记的5个关键步骤HedgeDoc权限管理完全手册安全分享笔记的5个关键步骤 HedgeDoc是一款优秀的开源协作笔记平台其强大的权限管理系统让团队协作变得更加安全高效。无论后端前端云原生上一篇Super Mario 64 反编译贡献者权限代码审查与合并下一篇BabelDOC 高级功能完整指南兼容性修复、本地模型接入与术语一致性创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考