后端前端云原生【免费下载链接】hedgedocHedgeDoc - Ideas grow better together项目地址https://gitcode.com/gh_mirrors/he/hedgedoc点击查看免费下载本文聚焦 HedgeDoc 的核心通用环境变量配置即HD_*系列变量系统讲解HD_BASE_URL、渲染器地址、端口绑定、日志级别与媒体上传大小等参数的默认值、取值范围、校验规则及实际生效链路。通过结合后端 Zod 校验、前端 URL 解析器与配置测试用例读者将掌握如何为 HedgeDoc 编写一份合法、可上线的最小.env配置并理解每个参数在源码中的真实作用。配置的入口环境变量与 .env 文件HedgeDoc 的全部通用配置均通过环境变量注入你可以直接在 shell 中导出也可以通过.env文件集中管理。按照 配置索引文档 的说明.env文件应放置在 HedgeDoc 应用根目录官方 Docker 容器中为/usr/src/app/.env内容为KEYVALUE形式的键值对。仓库根目录提供了 .env.example 作为参考模板其中通用配置部分如下# General settings HD_BASE_URLhttp://localhost:8080 HD_RENDERER_BASE_URLhttp://localhost:8080 HD_BACKEND_PORT3000 HD_LOG_LEVELinfo HD_LOG_SHOW_TIMESTAMPtrue官方文档特别提醒该模板只是“最小配置”足以让 HedgeDoc 在本地开发环境启动但未经修改不应用于生产环境生产环境至少需要配置强随机的会话密钥与正式的外网地址。通用环境变量总览以下表格完整列出了 general.md 中定义的全部通用配置项环境变量默认值示例说明HD_BASE_URL无必填https://md.example.comHedgeDoc 实例被访问的 URL即用户在浏览器地址栏输入的地址HD_BACKEND_PORT3000—后端backend进程监听的端口HD_FRONTEND_PORT3001—前端frontend进程监听的端口HD_BACKEND_BIND_IP127.0.0.10.0.0.0后端服务器绑定的 IP 地址HD_RENDERER_BASE_URLHD_BASE_URL的值—渲染器renderer运行的 URL省略时与HD_BASE_URL相同HD_INTERNAL_API_URLHD_BASE_URL的值http://localhost:3000前端无法通过HD_BASE_URL访问后端时用来直接访问后端的内部 URLHD_LOG_LEVELwarn*—日志级别可选error、warn、info、debug、traceHD_LOG_SHOW_TIMESTAMPtrue—是否在日志中附加时间戳接入 systemd 等外部日志管理时建议关闭HD_MEDIA_MAX_UPLOAD_SIZE20971520—上传到服务器的最大文件字节数默认 20 MB*注文档表格中HD_LOG_LEVEL的默认值写作warn但当前仓库 app.config.ts 中 Zod schema 的实际默认值为Loglevel.INFO即info.env.example 也使用info。以源码实现为准建议显式设置该变量以避免歧义。HD_BASE_URL实例对外地址必填HD_BASE_URL是唯一没有默认值、必须显式配置的通用变量它表示用户访问 HedgeDoc 时输入的地址如https://md.example.com。它同时是HD_RENDERER_BASE_URL与HD_INTERNAL_API_URL两个变量的默认基准。在 app.config.ts 中该值通过validateUrl函数严格校验规则包括必须能被hedgedoc/commons的parseUrl正确解析协议必须是 HTTP 或 HTTPSWrongProtocolError时提示protocol must be HTTP or HTTPS不允许包含子目录NoSubdirectoryAllowedError时提示must not contain a subdirectory即不能写成https://example.com/hedgedoc/这样的形式。校验失败时配置系统会调用printConfigErrorAndExit见 utils.ts将错误信息打印到 STDERR 并直接process.exit(1)进程无法启动。这一点在 app.config.spec.ts 的测试中得到了验证传入localhost无协议或带子目录的 URL 都会触发错误输出与退出码 1。HD_RENDERER_BASE_URL渲染器地址与安全隔离HedgeDoc 将编辑器editor与渲染器renderer作为相对独立的进程/页面运行。HD_RENDERER_BASE_URL指定渲染器所在域的 URL省略时自动回退为HD_BASE_URL的值这一逻辑由 app.config.ts 的transform阶段实现当rendererBaseUrl 时将其赋值为baseUrl。为什么要把渲染器放到独立子域FAQ 文档 给出了明确答案当渲染器由另一个域提供时渲染与编辑环境更加隔离攻击者更难通过渲染出的笔记内容操纵 HedgeDoc 或窃取凭据能够显著缓解 XSS 攻击。文档同时提示若启用独立渲染器域必须同步调整反向代理配置将该域的请求导向前端进程。HD_INTERNAL_API_URL前后端分离部署的内部通道HD_INTERNAL_API_URL的默认值同样是HD_BASE_URL。它解决的是这样一个场景在前后端分离部署例如前端在 CDN、后端在私有网络时浏览器用户通过HD_BASE_URL访问页面但前端进程本身可能无法用这个公网地址访问后端。前端侧的实际解析逻辑位于 base-url-from-env-extractor.ts它依次读取HD_BASE_URL、HD_RENDERER_BASE_URL与HD_INTERNAL_API_URL未设置时分别回退到编辑器地址或保持未定义。对应的单元测试 base-url-from-env-extractor.spec.ts 覆盖了设置、未设置、非法值如bibedibabedibu等多种输入情况。典型配置如示例中的http://localhost:3000即前端与后端同机、前端无法通过对外域名回环访问后端时的内部直连地址。端口与绑定地址后端与前端各司其职HedgeDoc 的架构将监听职责拆分到两个进程HD_BACKEND_PORT默认3000后端 HTTP 服务监听端口。在 main.ts 中应用使用 Fastify 适配器创建最终通过app.listen(appConfig.backendPort, appConfig.backendBindIp)启动监听见 main.ts。HD_FRONTEND_PORT默认3001前端Next.js服务监听端口见 frontend/package.json 中的启动脚本start脚本执行cross-env PORT${HD_FRONTEND_PORT:-3001} node dist/frontend/server.js。HD_BACKEND_BIND_IP默认127.0.0.1后端绑定的 IP。Zod schema 要求其必须是合法的 IPv4 或 IPv6 地址见 app.config.ts。生产环境中通常与反向代理同机可保持默认回环地址仅由 Nginx/Caddy 对外暴露若需要后端独立对外监听则设置为0.0.0.0。端口参数还会经过严格的边界校验必须是正整数、整数且不超过65535。测试 app.config.spec.ts 分别验证了负数、越界1000000、浮点3.14与非数字not-a-port输入都会导致配置解析失败并退出进程。日志配置级别与时间戳HD_LOG_LEVEL决定日志输出的详细程度可选值由 loglevel.enum.ts 定义从低到高依次为error— 仅错误warn— 错误与警告info— 常规运行信息当前源码默认值debug— 调试信息trace— 最详细的跟踪输出日志服务的实现位于 console-logger.service.ts每条日志在输出前都会通过needToLog(currentLoglevel, requestedLoglevel)判断当前级别是否足够见 utils.ts级别被映射为 15 的整数进行比较。开发模式下main.ts 会在启动初期临时使用TRACE级别打印尽可能多的引导日志随后再切换为配置指定的级别见 main.ts。HD_LOG_SHOW_TIMESTAMP默认true控制是否在每条日志前附加时间戳。输出逻辑见 console-logger.service.ts当该值为true时拼接toLocaleString格式化的当前时间。文档明确建议当使用 systemd 等外部日志管理系统时关闭时间戳可以避免日志格式重复、便于外部系统统一解析——因为 systemd 本身会为每条日志附加时间。HD_MEDIA_MAX_UPLOAD_SIZE上传大小上限HD_MEDIA_MAX_UPLOAD_SIZE以字节为单位限制单次上传文件的最大体积默认值20971520即 20 MB。默认常量定义在 media.config.tsconst DEFAULT_MAX_UPLOAD_SIZE 20 * 1024 * 1024;。该值的作用链路清晰配置解析时经parseInt转换为数字且必须满足z.number().min(0)负数会被拒绝见 media.config.spec.ts启动时 app-init.ts 将其传给fastifyMultipart的limits.fileSize从而在 Fastify 层直接限制文件上传大小。若希望允许更大文件可将值改为例如5242880050 MB并注意同步调整反向代理的请求体大小限制。配置校验失败时的行为所有通用配置在应用启动阶段统一由 NestJS 的ConfigService读取。以 app.config.ts 为例配置解析使用 Zod 的safeParse一旦任一变量校验失败收集所有 Zod issue 并通过extractDescriptionFromZodIssue提取出带HD前缀的错误描述由buildErrorMessage组装成可读的错误信息printConfigErrorAndExit将其打印到 STDERR随后process.exit(1)终止进程。这意味着配置错误不会被静默忽略——错误的 URL、端口、IP 或日志级别都会在启动瞬间暴露便于快速定位问题。这一行为在 app.config.spec.ts 的整个 “throws error” 分组中均有对应的测试断言。实践建议本地开发最小配置参照 .env.example设置HD_BASE_URLhttp://localhost:8080、HD_BACKEND_PORT3000、HD_LOG_LEVELinfo即可启动前后端。生产环境HD_BASE_URL必须使用真实域名HTTP/HTTPS 且不含子目录如有条件为HD_RENDERER_BASE_URL配置独立子域以增强 XSS 防护并同步调整反向代理接入 systemd 时可将HD_LOG_SHOW_TIMESTAMP设为false。前后端分离部署当前端无法通过公网域名访问后端时为HD_INTERNAL_API_URL显式指定内网可达的地址如http://localhost:3000。调试排错将HD_LOG_LEVEL调至debug或trace可观察更多运行细节配置非法时进程会直接退出并打印明确的错误原因据此快速修正。赞分享后端前端云原生【免费下载链接】hedgedocHedgeDoc - Ideas grow better together项目地址https://gitcode.com/gh_mirrors/he/hedgedoc点击查看免费下载相关推荐Gatsby Cloud 环境变量完全指南配置项、只读变量与底层实现解析Gatsby Cloud 环境变量完全指南配置项、只读变量与底层实现解析 导读 本文围绕 Gatsby 官方仓库 docs/docs/reference/cl前端静态站点Web框架pipx 环境变量完全指南从 PIPX_HOME 到 PIPX_FETCH_PYTHON 的配置与底层实现解析pipx 环境变量完全指南从 PIPX_HOME 到 PIPX_FETCH_PYTHON 的配置与底层实现解析 pipx 没有传统的用户配置文件全部设置都以CLI开发工具包管理器Nix 通用环境变量完全指南配置、Store、求值器与用户目录的底层解析Nix 通用环境变量完全指南配置、Store、求值器与用户目录的底层解析 导读 Nix 作为纯函数式包管理器其绝大多数命令都会读取一组通用的环境变量来调整包管理器开发工具CLI构建工具上一篇Hy-MT2-30B-A3B-FP8高级玩法结构化数据翻译与术语库定制终极指南下一篇终极解决方案Nacos TIME_WAIT线程CPU占用高问题实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考