设置自托管文档
设置自托管文档
企业功能
此功能仅适用于企业计划。如需开始使用,请联系 support@buildwithfern.com。
前置条件
在设置自托管文档之前,请确保您具备:
- 在您的系统上安装了 Docker
- 可以访问您的 Fern 项目的
fern/目录 - 来自 Fern 的 Docker Hub 组织访问令牌(OAT)(用于拉取私有镜像)
设置说明
向 Docker Hub 进行身份验证
自托管文档运行在私有 Docker 镜像上:fernenterprise/fern-self-hosted
联系 Fern 支持 以获取 Docker Hub 组织访问令牌(OAT)。
使用 Fern 提供的令牌登录到 Docker Hub:
当提示输入密码时,输入 Fern 团队提供的 OAT。
在 CI 中,通过 DOCKERHUB_OAT 环境变量传递令牌:
创建 Dockerfile
在包含您的 fern/ 文件夹的同一目录中,创建一个名为 Dockerfile 的文件:
将以下内容添加到 Dockerfile 中:
fern-generate 是 Docker 镜像内可用的命令,它在构建时处理您的文档,从而实现更快的容器启动、离线部署和更小的攻击面。这不是您在主机上运行的命令。您也可以选择将生成延迟到运行时。
自定义域名
您的文档使用在 docs.yml 文件中指定的域名。例如:
要在运行时覆盖域名(例如,当实际主机名与 docs.yml 中的 custom-domain 不同时),请设置 CUSTOM_DOMAIN 环境变量:
详细信息请参见环境变量。
环境变量
通过在您的 Dockerfile 或 Kubernetes 部署中设置环境变量来配置自托管容器的行为。
通用
缓存预热
容器可以在启动时预取所有页面,以确保第一个真实用户请求是快速的。
缓存代理
容器包含一个位于 Next.js 服务器前面的缓存代理。
跨源资源共享(CORS)代理
容器包含一个 CORS 代理,允许文档前端进行跨源请求(例如,为 API Explorer 的试用功能向您的 API 发送请求)。默认情况下,只允许文档域名本身。使用 CORS_PROXY_ALLOWED_DOMAINS 来将其他域名添加到白名单中。
例如,要允许对 api.plantstore.dev 和 auth.plantstore.dev 的请求:
要允许多个域名:
调试
页面反馈
在自托管模式下,页面反馈事件作为结构化 JSON 日志输出到容器的 stdout,前缀为 [fern-docs-feedback]。您可以在您的日志基础设施中过滤这些:
每个日志行包含一个事件名称、时间戳和一组属性:
跟踪的事件
属性
其他配置
以下部分涵盖了特定部署场景的可选配置。
基础路径
默认情况下,自托管容器从根路径(/)提供文档服务。设置 NEXT_PUBLIC_BASE_PATH 以从子路径提供服务,例如 /docs。当您的文档与反向代理后面的其他应用程序共享域名时,这很有用。
值必须以 / 开头,不能以尾部斜杠结尾。
构建时(推荐)
运行时
在运行 fern-generate 之前在您的 Dockerfile 中设置 NEXT_PUBLIC_BASE_PATH。这会在构建时将基础路径修补到包中,因此容器可以使用只读文件系统运行。
使用 NEXT_PUBLIC_BASE_PATH=/docs,文档可在 http://localhost:3000/docs 而不是 http://localhost:3000/ 访问。
构建时不使用 NEXT_PUBLIC_BASE_PATH 的单个 Docker 镜像可以在运行时配置为从任何路径提供服务。这让您可以在可能需要不同基础路径的环境中重用一个镜像。
运行时生成
默认情况下,fern-generate 在 Docker 构建时运行。如果您需要以下功能,可以将生成延迟到运行时:
- 在运行时传递配置(环境变量、密钥)
- 在开发期间加速 Docker 构建
- 在多个文档配置间共享单个镜像
使用 --only-deps 标志将生成延迟到运行时:
这会在构建时启动所需的服务(PostgreSQL、MinIO、FDR),但跳过文档生成。当容器启动时,它会自动运行 fern generate --docs。
运行时生成需要在容器启动时访问网络。对于离线部署,请使用默认的构建时生成。
使用 gRPC 的离线部署
如果您的 API 使用 gRPC 并具有来自 Buf Schema Registry(BSR)的依赖项,buf CLI 会在生成期间从 buf.build 获取模块。这在没有网络访问的离线环境中会失败。
检查 BSR 依赖项
检查您的项目在任一位置是否有 BSR 依赖项:
在 buf.yaml 中:
在 generators.yml 中:
如果没有 deps 或 dependencies 部分(或只有本地路径),您可以跳过本节的其余部分。
选择解决方案
选项 1:构建时生成(推荐)
在网络访问可用时在构建时运行 fern-generate:
这会在 Docker 构建期间下载 BSR 依赖项并将其嵌入到镜像中。运行时不需要网络访问。
选项 2:为运行时生成供应商依赖项
当您在构建时没有所有信息且需要文档在运行时生成不同的内容时使用此选项,例如在运行时注入环境变量。
要在离线环境中在运行时生成,请在本地供应商 buf 依赖项:
更新 buf.yaml 以引用供应商依赖项:
有关更多详细信息,请参见 Buf 依赖项管理文档。
选项 3:在 generators.yml 中指定依赖项
如果您没有 buf.yaml 文件,您可以直接在您的 generators.yml 中指定 proto 依赖项。自托管容器在构建过程中会自动从这些依赖项创建临时的 buf.yaml。
这种方法适用于构建时和运行时生成:
容器会解析您的 fern 目录中的所有 generators.yml 文件,找到具有依赖项但没有 buf.yaml 的 proto 规范,并自动创建必要的配置。
Kubernetes 部署
这是一个示例 Deployment 和 Service 配置。将 your-registry/fern-docs:latest 替换为您的镜像名称。
应用配置:
deployment.yaml:
service.yaml:
有关健康检查端点的详细信息,请参见健康检查端点。