ARTICLE DETAIL

资讯详情

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

NocoBase CLI `nb proxy nginx generate`:生成与刷新 Nginx 反向代理入口配置

NocoBase CLI `nb proxy nginx generate`:生成与刷新 Nginx 反向代理入口配置 NocoBase CLInb proxy nginx generate生成与刷新 Nginx 反向代理入口配置【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobasenb proxy nginx generate是 NocoBase CLI 为 CLI 托管 env 生成或刷新 Nginx 反向代理入口配置的核心命令。它会把 Nginx 站点配置、SPA 运行时 HTML 和公共片段一次性写入 CLI 主目录让本地local或docker部署的 NocoBase 应用可以直接通过域名、上传目录静态化、API 转发和 WebSocket 代理对外提供服务。读完本文你将掌握该命令的完整参数、生成物的目录结构、托管配置区块的保护机制以及底层从命令到文件落盘的完整调用链。命令用法nb proxy nginx generate --env name [--host domain] [--port port]命令入口实现在 generate.ts。省略--env时命令会使用当前 env见命令源码中的 flags 定义Defaults to the current env when omitted。基本参数参数类型说明--env,-estring要生成配置的 CLI 托管 env 名称省略时取当前 env--hoststring写入入口配置的域名例如app1.example.com--portstring写入入口配置的监听端口例如8080必须是 165535 的整数关于--port的校验逻辑源码中的 normalizeProxyListenPort 会先做纯数字正则匹配再检查是否为 165535 范围内的整数不满足时命令直接报错Invalid proxy entry port xxx. Use an integer between 1 and 65535.另外需要注意--port是 Nginx 入口对外暴露的监听端口不是上游 NocoBase 应用的app-port命令 flags 中明确标注not the upstream NocoBase app port。manual 模式扩展参数除了面向托管 env 的常规模式命令还支持--manual手动模式不读取已保存的 env而是完全由显式参数驱动生成。该模式下以下参数为必填见 generate.ts 的校验逻辑参数说明--manual启用手动模式不能与--env同时使用--name输出 bundle 在.nocobase/proxy/nginx下的名称--upstream-portproxy_pass使用的上游端口--storage-pathNocoBase storage 目录路径--dist-root-pathdist-client 根目录用于生成index-v1.html与index-v2.html--runtime-versiondist-root-path 下的前端运行时版本可选参数包括--app-public-path被代理应用的 public 基础路径默认/、--upstream-hostproxy_pass上游主机、--cdn-base-url生成运行时 HTML 时使用的客户端资源 CDN 基础地址。生成结果文件结构与职责以 envtest2为例命令会维护这些文件和目录NB_CLI_ROOT/.nocobase/proxy/nginx/nocobase.confNB_CLI_ROOT/.nocobase/proxy/nginx/snippets/NB_CLI_ROOT/.nocobase/proxy/nginx/test2/app.confNB_CLI_ROOT/.nocobase/proxy/nginx/test2/public/index-v1.htmlNB_CLI_ROOT/.nocobase/proxy/nginx/test2/public/index-v2.html各文件的来源与职责可以在模板和落盘逻辑中得到印证nocobase.conf主配置由模板 nocobase.conf.tpl 渲染内容只有三行 include——日志格式片段、maps 片段以及通配所有 env 的 app 配置include {{appConfigIncludePath}}。该文件头部注释明确写着Managed by ... Changes will be overwritten即整体由 CLI 管理。snippets/目录由 syncEnvProxyNginxSnippets 从 CLI 包内的 assets/env-proxy/nginx/snippets 逐文件拷贝同步包含mime-types.conf、gzip.conf、proxy-location.conf、spa-location.conf、uploads-location.conf、dist-location.conf等片段。env/app.conf可编辑入口配置由模板 app.conf.tpl 渲染。这是唯一允许人工修改的文件模板中预留了上下两个自定义区server { listen 80; server_name _; # Add custom directives or locations above the managed block as needed. {{managedConfigBlock}} # Add custom directives or locations below the managed block as needed. }env/public/index-v1.html/index-v2.htmlSPA 运行时入口从该版本 dist 产物中的index.html读取重写资源 public path 后注入一段运行时配置 script见下文托管区块覆盖的能力一节。托管区块覆盖的能力生成出来的入口会覆盖这些主要能力uploads、dist、well-known、api、ws、spa。对照源码 buildNginxManagedConfigBlock 可以看到每个能力对应的具体 locationuploadslocation appPublicPathstorage/uploads/直接alias到storage/uploads/目录并 includeuploads-location.conf上传文件由此走 Nginx 静态服务绕过 Node 后端distlocation ^~ appPublicPathdist/alias 到 dist-client 根目录前端静态资源由 Nginx 直接提供well-known用正则 location 处理/.well-known/oauth-authorization-server/...与/.well-known/openid-configuration/...的改写和转发服务于 OIDC 相关发现端点apilocation ^~ apiBasePath转发到backendUrl即http://upstreamHost:upstreamPort且对不带尾斜杠的 API 基础路径先做308重定向补全斜杠wslocation wsPath精确匹配 WebSocket 路径并转发include 统一的proxy-location.conf其中包含代理头设置spalocation ^~ appPublicPath与location ^~ v2PublicPath新版客户端前缀路径分别 alias 到env/public/用try_files $uri /index-v1.html 404或index-v2.html实现 SPA 回退。此外托管区块还包含client_max_body_size 0;放开请求体大小限制便于大文件上传以及一个内部 location/_nocobase_legacy_file_auth它会向auth:checkLegacyFileAccess接口透传 Cookie、Authorization 与X-Original-URI用于旧版文件访问的鉴权检查。当app-public-path不是/时区块内还会追加根路径到应用子路径的302重定向。index-v1 / index-v2 的运行时注入两份 HTML 不是简单的拷贝。buildNginxRuntimeConfig 会构造一组运行时变量并注入 HTMLAPI 基础 URL__nocobase_api_base_url__、WebSocket URL 与路径、public path、API client 的存储前缀/类型/分享 token、CDN 基础地址等。这意味着前端页面在浏览器中加载后可以依据注入的 script 动态确定后端地址这也是 Nginx 能安全地直出前端入口页的原因。生成流程与托管区块保护机制常规模式下命令的执行链路为参见 generate.ts 的run()解析 env 运行时resolveManagedAppRuntime(requestedEnv)解析目标 env。若 env 只暴露 API 连接http类型命令报错the env only has an API connectionssh类型则报 not implemented。因此只有local或docker类型的 CLI 托管 env 可以使用这条命令。解析运行时上下文resolveNginxProxyRuntimeContext 根据 driver 决定两件事——本地 driver 下 upstream host 为127.0.0.1Docker driver 下为host.docker.internalDocker driver 下 CLI 根目录映射为容器内/apps。合并入口选项--host/--port若未传则回退到已保存的 env 代理入口配置resolveEnvProxyEntry。构建并落盘 bundlewriteNginxProxyBundle 先由 buildEnvProxyNginxBundle 渲染模板再由 writeResolvedNginxProxyBundle 写文件。持久化入口选项成功后调用setEnvProxyEntry把本次的host/port写回 env 配置作为下次省略参数时的默认值。第 4 步中有一个关键的托管区块保护机制如果目标 env 目录下已存在app.confCLI 会检查文件是否仍包含成对标记# BEGIN NocoBase managed config/# END NocoBase managed config见 appConfigHasManagedNginxBlock标记存在仅用replaceManagedNginxConfigBlock替换区块内部区块之外的人工自定义内容原样保留落盘状态为updated标记缺失默认直接报错提示恢复托管区块或删除文件后重新生成只有显式传--force才会强制覆盖整个app.conf。首次生成时状态为created命令输出会区分created editable app entry config与refreshed editable app entry config两种成功信息。运行前提与典型流程driver 决定了生成物由谁来消费也决定了路径映射local driver默认调用bin.nginx配置项指向的可执行文件默认nginx配置文件路径直接是宿主机上的NB_CLI_ROOT/.nocobase/proxy/nginx/下路径docker driver使用nginx:latest镜像容器名为docker.container-prefix-nginx-proxy把宿主机NB_CLI_ROOT挂载到容器内/apps主配置以只读方式挂载到容器内/etc/nginx/conf.d/default.conf并注入--add-host host.docker.internal:host-gateway使容器可通过host.docker.internal回连宿主机上的 NocoBase 应用见 ensureDockerNginxProxyContainer。注意generate只负责生成或刷新配置不会自动启动 Nginx。完整的典型流程是nb proxy nginx use docker nb proxy nginx generate --env app1 --host app1.example.com nb proxy nginx start nb proxy nginx status nb proxy nginx info文档与源码中的示例nb proxy nginx generate --env demo --host demo.local.nocobase.com nb proxy nginx generate --env demo --host demo.local.nocobase.com --port 8080命令行为有对应的测试覆盖包括参数校验、manual 与 env 模式互斥、落盘状态输出等可参考 proxy-nginx-command.test.ts。使用注意事项generate只负责生成或刷新配置不会自动启动 Nginxapp.conf是可编辑入口文件但其中的托管区块必须保留否则再次生成时会被拒绝除非--force如果你通过nb env update修改了app-port、app-public-path等影响代理结果的配置通常需要重新执行一次本命令只有local或docker类型的 CLI 托管 env 可以使用这条命令env 缺少app-port或无法确定前端运行时版本时命令会分别报Missing appPort与Couldnt determine the app version提示先保存/更新 env 配置见 resolveRuntimeNginxBundleSource。相关命令nb proxy nginx startnb proxy nginx reloadnb env update【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表