ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

NocoBase CLI 自启动标记开启指南:`nb app autostart enable` 命令详解与源码原理

NocoBase CLI 自启动标记开启指南:`nb app autostart enable` 命令详解与源码原理 NocoBase CLI 自启动标记开启指南nb app autostart enable命令详解与源码原理【免费下载链接】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导读nb app autostart enable是 NocoBase CLInb中用于为指定local或dockerenv 开启“应用自启动标记”的命令。它本身不会立刻启动应用而是把目标 env 写入后续nb app autostart run的批量启动名单是搭建systemd、容器平台启动脚本等宿主机自启动流程的第一步。读完本文你将掌握该命令的完整用法、参数语义、跨 env 交互确认机制以及标记在 CLI 配置文件中的持久化原理与底层实现。命令定位autostart 命令组中的“开关注册”一环nb app autostart命令组负责管理应用自启动相关设置分为两类职责为某个 env 开启或关闭自启动标记enable/disable在系统启动后批量启动所有已开启自启动的 envrun并通过list查看状态从文档结构看docs/docs/cn/api/cli/app/autostart/index.mdnb app autostart只适用于当前机器上由 CLI 托管运行态的 env也就是local和docker。如果一个 env 只是远程 API 连接例如kind: http或者不是当前机器上可启动的 CLI 托管应用就不能加入自动启动流程。enable是这组命令的入口没有它run就没有可启动的名单。用法与参数基本用法nb app autostart enable [flags]参数一览参数类型说明--env,-estring要加入自启动的 CLI env 名称省略时使用当前 env--yes,-yboolean当显式--env指向的 env 与当前 env 不一致时跳过交互确认默认false这两个 flag 在源码中的定义位于 packages/core/cli/src/commands/app/autostart/enable.ts#L26-L36env是可选的字符串 flagyes是默认关闭的布尔 flag。命令的描述为 “Enable app autostart for the selected local or Docker env.”。典型示例# 为当前 env 开启自启动 nb app autostart enable # 为指定 env 开启自启动可能触发交互确认 nb app autostart enable --env app1 # 为指定 env 开启自启动并跳过跨 env 交互确认 nb app autostart enable --env app1 --yes执行成功时命令会输出一行Enabled app autostart for envName.作为确认。跨 env 交互确认机制命令的核心行为之一是“只有显式传入--env时CLI 才会检查它是否与当前 env 一致”。在 enable.ts#L42-L51 中可以看到完整流程const requestedEnv flags.env?.trim() || undefined; if (requestedEnv hasExplicitEnvSelection(this.argv)) { const confirmed await ensureCrossEnvConfirmed({ command: this, requestedEnv, yes: flags.yes, }); if (!confirmed) { return; } }hasExplicitEnvSelection会检查argv中是否确实出现了--env只有满足“显式指定了 env”且“与当前 env 不同”两个条件时才会走ensureCrossEnvConfirmed交互确认。这意味着省略--env直接使用当前 env不会触发确认显式--env指向当前 env无确认显式--env指向其他 env交互终端弹出确认在非交互终端或 AI agent 场景下必须显式追加--yes或者先执行nb env use name切换当前 env 再重试。执行前的运行时校验确认通过后命令调用getEnv(requestedEnv)解析目标 env。如果 env 不存在或没有名称会调用formatMissingManagedAppEnvMessage直接报错退出enable.ts#L53-L56。随后写入标记前updateAutostartSetting内部还会执行一次运行时校验。在 packages/core/cli/src/commands/app/autostart/shared.ts#L17-L32 中ensureManagedAutostartRuntime会检查 env 的kind与sourceconst kind String(config.kind ?? ).trim(); const source String(config.source ?? ).trim(); const inferredLocal source npm || source git || source local; if (kind local || kind docker || (!kind (source docker || inferredLocal))) { return; }也就是说以下 env 被判定为“可自启动”kind显式为local或docker或者kind未设置但source为docker、npm、git、local推断为本地托管运行态。其余类型如kind: http的远程连接会抛出错误Env name cannot be added to app autostart. Only local and Docker envs with CLI-managed app runtimes can be started automatically on this machine.因此如果目标 env 不是当前机器上 CLI 托管运行态的local或dockerenv命令会直接报错且不会保存任何标记这与文档说明一致。标记的持久化与存储位置enable最终通过updateAutostartSetting(envName, true)写标记实现在 shared.ts#L34-L65const config await loadExactAuthConfig(); const previous config.envs[envName]; if (!previous) { throw new Error(Env ${envName} is not configured); } ensureManagedAutostartRuntime({ ...previous, name: envName }); const next { ...previous }; next.autostart { enabled: true }; config.envs[envName] next; if (wasEnabled ! enabled) { await saveAuthConfig(config); }可见标记以autostart: { enabled: true }的形式挂在 env 配置条目上类型定义见 packages/core/cli/src/lib/auth-store.ts#L58。值得注意的细节若目标 env 尚未配置会报Env envName is not configured若该 env 原本就已是enabled: true幂等场景changed为false不会重复写盘disable方向则直接delete next.autostart两条命令共用同一updateAutostartSetting。CLI 的 env 配置最终落在~/.nocobase/config.json通过 packages/core/cli/src/lib/cli-home.ts#L13-L37 中的CLI_HOME_DIRNAME .nocobase与resolveCliHomeDir解析并可用环境变量NB_CLI_ROOT覆盖根目录。也就是说执行nb app autostart enable后可以直接在该 JSON 文件中看到对应 env 的autostart: { enabled: true }字段。开启自启动后与run/list/disable的协同enable只负责“登记”真正拉起应用的是nb app autostart run。根据 docs/docs/cn/api/cli/app/autostart/run.md 与命令组文档run会读取所有已保存 env、筛出自启动标记已开启的条目逐个调用nb app start --env name --yes并输出结果表能正常启动的显示started不适合在当前机器上自动启动的显示skipped启动报错的显示failed只要存在failed命令最终以错误退出并输出Some app autostart envs failed to start.以便systemd、CI 等主机启动机制能明确感知失败。run支持--verbose透传底层启动输出。日常管理闭环如下# 1. 开启自启动本文主角 nb app autostart enable --env app1 --yes # 2. 查看所有 env 的自启动状态 nb app autostart list # Current|Env|Kind|Source|Autostart # * |app1|local|npm |yes # |app2|docker|docker|yes # |remote1|http|- |no # 3. 系统启动后批量拉起 nb app autostart run nb app autostart run --verbose # 4. 关闭某 env 的自启动不会停止已运行的应用 nb app autostart disable --env app1 --yeslist输出表包含Current、Env、Kind、Source、Autostart五列当前 env 以*标注若尚未配置任何 env则输出No environments are configured.。disable只移除标记、不停止应用若需停止运行中的实例还要执行nb app stop。从测试用例看行为契约命令行为由 packages/core/cli/src/tests/app-autostart-commands.test.ts 固化其中与enable直接相关的两个用例可作为可验证依据enable 在选中 env 上写入 autostart对app1kind: local执行 enable 后断言state.envs.app1?.autostart等于{ enabled: true }且日志输出Enabled app autostart for app1.enable 拒绝不支持的 env 类型对remote1kind: http执行--env remote1时断言抛出Env remote1 cannot be added to app autostart.错误。测试中的run用例还验证了run会按保存顺序调用app:start --env name --yes且单个 env 失败不影响后续 env 启动失败后继续处理app2最终以错误退出——这与文档描述的批量启动与失败感知语义完全一致。典型部署落地接入 systemd一个常见的生产落地方式是把run接进宿主机自启动流程。示例需按实际环境调整# /etc/systemd/system/nocobase-autostart.service [Unit] DescriptionNocoBase app autostart Afternetwork-online.target docker.service Wantsnetwork-online.target [Service] Typeoneshot Usernocobase ExecStart/path/to/nb app autostart run --yes RemainAfterExityes [Install] WantedBymulti-user.target整体流程为先用nb app autostart enable --env name --yes为各 env 打上标记标记持久化在~/.nocobase/config.json再让系统启动机制执行nb app autostart runrun内部逐个调用nb app start --env name --yes拉起所有已启用 env并通过failed状态与错误退出码让上层机制感知失败。相关命令速查nb app autostart disable关闭指定 env 的自启动标记nb app autostart list查看所有 env 的自启动状态nb app autostart run批量启动所有已开启自启动的 envnb app start/nb app stop单个 env 的启动与停止nb env list/nb env use查看与切换当前 env【免费下载链接】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),仅供参考
返回列表