资讯动态

Kener v4 子路径部署实战指南:用 KENER_BASE_PATH 把状态页挂载到 /status

发布时间:2026/10/13 17:34:11 来源:尧图企业网站定制
可观测性后端前端运维【免费下载链接】kenerStunning status pages, batteries included!项目地址https://gitcode.com/gh_mirrors/ke/kener点击查看免费下载本文面向需要把 Kener 状态页部署在站点子路径例如https://example.com/status而非域名根路径的运维与开发者。文章以官方 Base Path 部署指南为核心结合仓库内 Dockerfile、docker-compose.status.yml、resolver.ts 等源码完整讲解环境变量配置、预构建镜像选择、Docker / Docker Compose 启动方式、反向代理路径映射以及源码级的实现原理与验证排错方法。读完你可以独立完成一套子路径状态页的生产级部署并理解为什么“代理路径与KENER_BASE_PATH必须完全一致”。什么场景需要 Base Path 部署默认情况下Kener 监听在站点根路径如https://example.com/。但很多团队希望把状态页与其他服务共用一个域名例如https://example.com/status放状态页https://example.com/放主站主域已被 CDN 或已有应用占用仅分配一个子路径给监控页面。此时就需要“Base Path 部署”让 Kener 的所有路由、静态资源、API、Cookie 路径、RSS 链接、favicon 等都以/status为前缀。仓库的官方指南 src/routes/(docs)/docs/content/v4/guides/base-path.md/docs/content/v4/guides/base-path.md) 专门讲解了这条部署路线。核心环境变量KENER_BASE_PATH 与 ORIGIN快速配置表子路径部署只需设置两个关键变量变量子路径场景下的取值KENER_BASE_PATH/statusORIGINhttps://example.com[!IMPORTANT]ORIGIN必须是站点源scheme host 可选端口绝不能是带/status的完整 URL。这是官方文档反复强调的关键约束ORIGIN同时用于 SvelteKit 生产环境下的 CSRF 校验与 Cookie 安全判定多带路径会导致表单提交被拒或认证行为异常。关于这一点仓库内有两处可直接验证的细节README.md 的注释同样提醒“For subpath mode, keepORIGINas the site origin (http://localhost:3000), nothttp://localhost:3000/status”commonController.ts 的CookieConfig()会根据ORIGIN是否以https://开头决定 Cookie 的secure标记并将KENER_BASE_PATH作为 Cookie 的path——若 ORIGIN 带上了路径判断逻辑就会失真。需要注意的是仓库自带的 docker-compose.status.yml 中ORIGIN写的是http://localhost:3000/status带路径这是该文件为本地 Compose 演示保留的写法生产环境仍应遵循文档约定使用纯源地址。以官方文档与 README 为准。KENER_BASE_PATH 的取值约束来自 environment-variables.md/docs/content/v4/setup/environment-variables.md#L97-L118) 的补充说明必须以/开头如/status末尾不带斜杠默认值为根路径/未设置时 Kener 按站点根路径运行修改后必须与反向代理配置保持一致且需要重建/重启容器生效。有趣的是代码层面其实对尾部斜杠做了容错 resolver.test.ts 验证了当KENER_BASE_PATH/status/时拼接结果会被折叠为/status/...不会产生双斜杠。但正式配置仍建议遵循“无尾斜杠”规范避免代理层与应用层的路径匹配出现偏差。使用预构建的子路径镜像官方在 Docker Hub 与 GHCR 都提供了预先构建好的子路径变体镜像无需自行用构建参数编译镜像仓库标签latest 分支版本标签模式docker.io/rajnandan1/kenerlatest-statusvX.Y.Z-statusdocker.io/rajnandan1/kenerlatest-status-alpinevX.Y.Z-status-alpineghcr.io/rajnandan1/kenerlatest-statusvX.Y.Z-statusghcr.io/rajnandan1/kenerlatest-status-alpinevX.Y.Z-status-alpine-alpine后缀对应 Alpine 基础镜像变体。从仓库 Dockerfile 可以看出镜像构建本身就支持ARG KENER_BASE_PATH编译期注入Dockerfile 将构建参数写入环境变量Dockerfile 在运行时镜像中固化预构建的-status系列镜像即按此机制预置了/status前缀。Docker 方式部署使用预构建子路径镜像时官方给出的最小可运行命令如下docker run -d \ --name kener-status \ -p 3000:3000 \ -v $(pwd)/database:/app/database \ -e KENER_SECRET_KEYreplace_with_a_random_string \ -e ORIGINhttps://example.com \ -e KENER_BASE_PATH/status \ -e REDIS_URLredis://host.docker.internal:6379 \ docker.io/rajnandan1/kener:latest-status各参数要点-p 3000:3000对外映射 Kener 的默认监听端口可用PORT环境变量调整见 environment-variables.md/docs/content/v4/setup/environment-variables.md#L138-L153)-v $(pwd)/database:/app/database持久化 SQLite 数据库默认数据库路径见 knexfile.tsKENER_SECRET_KEYJWT 签名与敏感数据加密密钥务必使用openssl rand -base64 32生成随机字符串勿用默认值REDIS_URL后台任务队列监控调度、告警、邮件依赖 Redis本地联调可用host.docker.internal指向宿主机的 Redis。生产环境还可按需叠加 docker-compose.yml 中预留的DATABASE_URLSQLite / PostgreSQL / MySQL 三选一与邮箱相关变量。Docker Compose 方式部署仓库已经提供了专门的子路径 Compose 编排文件 docker-compose.status.yml一行命令即可启动docker compose -f docker-compose.status.yml up -d该文件内置了子路径所需的关键配置服务镜像image: rajnandan1/kener:latest-status注释中给出了latest-status-alpine的切换方式见 docker-compose.status.yml环境变量KENER_BASE_PATH: /statusdocker-compose.status.yml同时拉起redis:7-alpine作为队列依赖并配置了健康检查、depends_on等待条件、命名卷kener_db_status与kener_redis_status注释中预留了DATABASE_URL三种数据库切换示例SQLite / PostgreSQL / MySQL。这套编排适合直接作为生产骨架只需替换KENER_SECRET_KEY文件内提示用openssl rand -base64 32生成与ORIGIN为你的真实域名。反向代理路径映射两者必须精确一致子路径模式下代理层规则与KENER_BASE_PATH必须完全一致。以/status为例反向代理必须把/status路径下的流量原样转发到 Kener 的/status路径不能剥离前缀也不能改写到根路径。完整的 Nginx / Apache / Caddy / Traefik 配置示例见 Reverse Proxy Setup/docs/content/v4/guides/reverse-proxy.md)其中子路径部分的要点Nginxlocation /status/ { proxy_pass http://localhost:3000/status/; }并建议设置proxy_set_header X-Forwarded-Prefix /statusApacheLocation /status配合ProxyPass http://localhost:3000/status与ProxyPassReverseCaddyhandle /status/* { reverse_proxy localhost:3000 }Traefik路由规则PathPrefix(\/status)并可用 stripprefix 中间件若选择剥离前缀需保证内部路径与代理规则的一致性设计。[!WARNING] 子路径下务必保持KENER_BASE_PATH与代理location指令的尾斜杠风格一致要么都带要么都不带否则静态资源会出现 404。源码级原理KENER_BASE_PATH 如何贯穿全链路子路径不是简单的“路由前缀”而是从服务端渲染到后台任务全链路的路径感知。以下是仓库源码中可验证的实现点1. 统一 URL 解析器 serverResolveresolver.ts 是服务端统一的路径解析函数读取process.env.KENER_BASE_PATH将其拼接到所有服务端生成的路径前并处理了三种边界情况——绝对 URL 原样返回、路径缺失前导/时自动补齐、连续斜杠折叠。其配套测试 resolver.test.ts 覆盖了 favicon / 上传图片路径加前缀、未设置变量时路径不变、绝对 URL 不处理、尾斜杠折叠四种场景。2. 静态资源与 faviconlayoutController.ts 在 SSR 布局数据中通过serverResolve(siteData.favicon)为 favicon 加前缀。浏览器在 hydration 之前就会从 SSR HTML 中抓取link relicon因此 favicon 必须在布局层而不是前端运行时处理——源码注释明确记录了这一设计意图。3. Cookie 路径commonController.ts 的CookieConfig()把KENER_BASE_PATH作为登录 Cookiekener-user的path。如果 Cookie path 停留在/而站点实际挂在/status认证状态将无法正确携带。OIDC 登录/回调路由oidc/login/server.ts/account/oidc/login/server.ts#L11-L18)、oidc/callback/server.ts/account/oidc/callback/server.ts#L32)同样以KENER_BASE_PATH作为 Cookie path。4. RSS 订阅链接rss.ts 读取KENER_BASE_PATH通过joinUrl(siteURL, basePath, ...)为 RSS 中每条 incident / maintenance 条目的link拼入子路径前缀保证订阅器点击后能落到正确的页面。5. 健康检查端点生产入口 scripts/main.ts 用const base process.env.KENER_BASE_PATH || 定义基础路径并将健康检查挂在app.get(base /healthcheck)scripts/main.ts。因此子路径模式下健康检查地址是/status/healthcheck。同样地镜像的 Docker HEALTHCHECK 也使用了curl -sf http://localhost:${PORT}${KENER_BASE_PATH}/healthcheck见 Dockerfile容器编排平台据此判断应用存活。6. 心跳路由的重写保留hooks.ts 中的reroute钩子负责把旧版/ext/heartbeat/tag:secret心跳 URL 原地重写为/ext/heartbeat/tag/secret其注释明确说明重写是“in-place不做路径重建”因此任何KENER_BASE_PATH前缀都会自动保留无需额外适配。从这些实现可以推断只要环境变量与代理配置正确页面、资产、认证、订阅、健康检查全链路都会自动带上子路径前缀。部署后验证与排错验证清单部署完成后检查以下 URLhttps://example.com/status—— 状态页主入口https://example.com/status/healthcheck—— 健康检查端点应返回数据库与 Redis 组件状态 JSON逻辑见 scripts/main.ts。同时建议验证管理员登录验证 Cookie path 生效、RSS 链接验证前缀拼接、favicon 与 CSS/JS 是否正常加载。CSS/JS 404 排查三步如果页面能打开但样式/脚本 404按顺序复查KENER_BASE_PATH是否已设置为/status反向代理的转发路径是否也是/status且尾斜杠风格一致修改环境变量后 Kener 是否已重建/重启。这三点对应 base-path.md/docs/content/v4/guides/base-path.md#verify-setup) 的官方排查清单反向代理侧的更多排错502、SSL、静态资源缓存等可参考 Reverse Proxy Setup 的 Troubleshooting 章节/docs/content/v4/guides/reverse-proxy.md#troubleshooting)。相关文档Environment Variables/docs/content/v4/setup/environment-variables.md)KENER_BASE_PATH、ORIGIN及其他全部环境变量说明Reverse Proxy Setup/docs/content/v4/guides/reverse-proxy.md)Nginx / Apache / Caddy / Traefik 的完整代理与子路径配置赞分享可观测性后端前端运维【免费下载链接】kenerStunning status pages, batteries included!项目地址https://gitcode.com/gh_mirrors/ke/kener点击查看免费下载相关推荐Kener v4 入门指南开源状态页系统的架构、部署与从 v3 迁移要点Kener v4 入门指南开源状态页系统的架构、部署与从 v3 迁移要点 Kener 是一个开源的 status page状态页系统用于实时监测服务健康可观测性后端前端运维Sanic 应用挂载Application Mounting在根路径之下的子路径部署你的 Web 服务Sanic 应用挂载Application Mounting在根路径之下的子路径部署你的 Web 服务 本文档源自 guide/content/en/gu后端Web框架90DaysOfDevOps Day54 实战用 YAML 与 Helm 把无状态应用部署到 Kubernetes 集群90DaysOfDevOps Day54 实战用 YAML 与 Helm 把无状态应用部署到 Kubernetes 集群 Kubernetes 存在的核心意义文档/教程上一篇YCBlogs 崩溃日志实战分析9 类高频 Android 崩溃的定位思路与修复方案下一篇探索数据管理新境界IQSS Dataverse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑