NocoBase 全局环境变量完全指南:从 TZ、APP_KEY 到 DB、LOGGER、CACHE 与 TELEMETRY 的配置实战

NocoBase 全局环境变量完全指南:从 TZ、APP_KEY 到 DB、LOGGER、CACHE 与 TELEMETRY 的配置实战 NocoBase 全局环境变量完全指南从 TZ、APP_KEY 到 DB、LOGGER、CACHE 与 TELEMETRY 的配置实战【免费下载链接】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导读NocoBase 是开源的 AI 无代码业务系统构建平台其服务端几乎所有核心行为——应用密钥、数据库连接、日志输出、缓存后端、遥测采集——都可以通过一组全局环境变量在启动前完成配置无需改动任何代码。本文以官方文档 全局环境变量 为主体逐项讲解 TZ、APP_ENV、APP_KEY、DB_、LOGGER_、CACHE_、TELEMETRY_等变量的作用、默认值、可选项与注意事项并结合仓库源码说明这些变量在 数据库解析、缓存配置、日志配置 与 网关启动 中的实际落地方式。读完本文你将能独立完成 NocoBase 生产部署的环境变量规划并理解每个变量背后的实现原理。说明本文描述的默认值与行为均以当前仓库v1.6.0为准未特别标注版本的变量在 v1.6.0 之前同样适用。应用级基础变量时区、环境、密钥与端口TZ应用时区TZ用于设置应用的时区默认值为操作系统时区。可取值参照 IANA tz 数据库 中的时区标识例如Asia/Shanghai、UTC、America/New_YorkTZAsia/Shanghai:::warning 与时间相关的操作会依据该时区进行处理修改TZ可能会影响数据库里已存储的日期值。因此时区应当在首次初始化数据库前确定后续尽量保持一致避免因时区切换导致日期数据出现偏移。 :::APP_ENV应用环境APP_ENV声明应用运行环境默认值development开发环境。可选项production生产环境development开发环境APP_ENVproductionAPP_ENV不是摆设变量它直接影响多个子系统的默认行为。从源码可以看到日志级别与日志格式的默认值都会根据APP_ENV切换详见下文 LOGGER 部分在 locale 资源加载 与 locale.ts 中process.env.APP_ENV ! production也会影响非生产环境下的语言资源加载策略。生产部署请务必显式设置APP_ENVproduction否则将使用开发环境的日志级别与格式可能带来额外的性能开销与日志噪音。APP_KEY应用密钥APP_KEY是应用的签名密钥用于生成用户 token 等安全凭据。部署时应替换为自己的随机密钥并确保不对外泄露APP_KEYyour-random-secret-key:::warning一旦修改APP_KEY旧的 token 会全部失效所有已登录用户需要重新登录。因此密钥一经确定非必要不要变更。 :::在源码中APP_KEY由插件管理器读取并注入插件上下文plugin-manager/options/resource.ts 通过process.env.APP_KEY || 取用该值。推荐使用足够长的随机字符串如openssl rand -hex 32生成的 64 位十六进制串并妥善保存在密钥管理系统中。APP_PORT应用端口APP_PORT指定 HTTP 服务监听端口默认值13000APP_PORT13000网关在启动时会解析该变量gateway/index.ts 中parseInt(process.env.APP_PORT)并在 启动逻辑 中回退为默认值13000。若端口被占用可修改为其他可用端口同时注意反向代理如 Nginx的 upstream 端口需保持一致。API_BASE_PATH 与 API_BASE_URLAPI 地址API_BASE_PATH是 NocoBase API 地址前缀默认值/api/API_BASE_PATH/api/网关在处理请求时会执行normalizeBasePath(process.env.API_BASE_PATH || /api)规范化路径并以此判断请求是否属于 API 请求gateway/index.ts应用容器也会将前缀透传给插件配置app-options-factory.ts。API_BASE_URL用于声明 API 的完整对外地址供前端运行时注入__nocobase_api_base_url__未配置时回退到API_BASE_PATHgateway/index.tsAPI_BASE_URLhttps://api.example.com/api/两者配合使用时API_BASE_URL更偏向对外可达地址API_BASE_PATH更偏向路由前缀一般建议同时显式配置避免部署在子路径或 CDN 之后时前端请求地址错误。SERVER_REQUEST_WHITELIST服务端出站请求白名单SERVER_REQUEST_WHITELIST用于控制服务端主动发起的 HTTP 请求目标。它会影响由 NocoBase 服务端发出的请求例如工作流中的请求节点自定义请求自定义 API 调用AI 服务调用等未配置时的行为NocoBase 仍会允许http/https请求以兼容已有部署。不过如果请求目标是 loopback回环地址、内网地址、link-local 地址、metadata 地址如云厂商的169.254.169.254或者域名解析到了这些地址服务端日志会输出 warning 提示。官方文档提示后续版本可能会逐步收紧默认策略如果你的部署需要访问内网服务建议提前配置明确的白名单以免版本升级后被默认策略拦截。配置后的行为初始请求和每个重定向目标都必须匹配白名单。如果重定向指向未匹配的主机NocoBase 会在发出下一跳请求前停止——这是防止 SSRF服务端请求伪造的关键设计重定向链上的每一跳都会被重新校验。支持的写法类型示例精确 IPv4 地址192.168.1.10IPv4 CIDR 网段10.0.0.0/8精确 IPv6 地址::1IPv6 CIDR 网段fc00::/7精确域名api.example.com单层通配子域名*.example.com多个目标使用,分隔SERVER_REQUEST_WHITELISTapi.example.com,*.trusted.com,10.0.0.0/8,127.0.0.1:::warning 注意 如果白名单中配置的是域名白名单判断会以请求 URL 中的 host为准。也就是说配置了internal.example.com后即使该域名解析到127.0.0.1或内网地址也会被视为显式允许。因此在配置域名白名单时要确认该域名确实是可信的受控域名避免域名被劫持或解析变更后形成安全漏洞。 :::CLUSTER_MODE多核集群启动模式该变量要求v1.6.0。CLUSTER_MODE控制多核集群启动模式。配置后该值会透传至pm2 start命令中作为-i instances参数。可选项与 PM2 的-i参数一致max使用 CPU 最大核数-1使用 CPU 最大核数减 1number指定核数如4CLUSTER_MODEmax默认值为空代表不开启集群模式。:::warning 该模式需要配合集群模式相关的插件使用否则应用功能可能出现异常例如多实例间内存态数据不一致、定时任务重复执行等。开启前请先安装并启用对应的集群模式插件。 :::PLUGIN_PACKAGE_PREFIX插件包名前缀PLUGIN_PACKAGE_PREFIX定义插件包名的前缀默认值nocobase/plugin-,nocobase/preset-。它决定了插件名 → 完整 npm 包名的映射关系。例如向my-nocobase-app项目添加hello插件默认情况下需要安装的包名是my-nocobase-app/plugin-hello。可以配置为多个前缀用,分隔PLUGIN_PACKAGE_PREFIXnocobase/plugin-,nocobase-preset-,my-nocobase-app/plugin-则插件名称和包名对应关系如下插件名完整包名usersnocobase/plugin-usersnocobasenocobase/preset-nocobasehellomy-nocobase-app/plugin-hello自定义前缀让第三方插件、私有 npm 源中的插件也能被 NocoBase 的插件管理器正确识别和加载是扩展插件生态时的必备配置。数据库连接变量DB_* 系列数据库相关变量在 helpers.ts 的parseDatabaseOptionsFromEnv()中被统一解析直接映射为 Sequelize 的IDatabaseOptions。DB_DIALECT数据库类型数据库方言可选项mariadbmysqlpostgresDB_DIALECTmysql源码中该值直接作为dialect传入并配合仓库内置的 MysqlDialect、MariadbDialect、PostgresDialect 等方言实现工作。DB_HOST / DB_PORT / DB_DATABASE / DB_USER / DB_PASSWORD使用 MySQL 或 PostgreSQL 数据库时以下连接信息必须配置变量说明默认值DB_HOST数据库主机localhostDB_PORT数据库端口MySQL/MariaDB 默认3306PostgreSQL 默认5432按方言DB_DATABASE数据库名无DB_USER数据库用户无DB_PASSWORD数据库密码无DB_HOSTlocalhost DB_PORT3306 DB_DATABASEnocobase DB_USERnocobase DB_PASSWORDnocobaseDB_TABLE_PREFIX数据表前缀为所有数据表添加统一前缀便于与同一数据库实例中的其他业务表隔离DB_TABLE_PREFIXnocobase_DB_UNDERSCORED表名字段名风格控制数据库表名、字段名是否转换为 snake case 风格下划线命名默认false。DB_UNDERSCOREDtrue:::warning 当DB_UNDERSCOREDtrue时数据库实际的表名和字段名与界面所见的并不一致例如界面中的orderDetails在数据库里对应的是order_details。这会给直接操作数据库的团队带来认知成本请务必在项目文档中注明。 :::一个必须遵守的强约束如果使用 MySQLMariaDB数据库并且实例配置了lower_case_table_names1则DB_UNDERSCORED必须为true。源码中该变量通过process.env.DB_UNDERSCORED true严格判断helpers.ts也就是说只有字面量true才会生效。DB_LOGGING数据库日志开关控制是否输出 SQL 日志默认值off可选项on打开off关闭DB_LOGGINGon源码中logging: process.env.DB_LOGGING on ? customLogger : falsehelpers.ts开启后通过customLogger打印 SQL 语句及其 bind 参数helpers.ts适合在开发阶段排查慢查询与 SQL 行为。隐藏的进阶变量源码佐证parseDatabaseOptionsFromEnv()还支持若干文档之外的连接增强变量供有特殊需求的部署参考DB_STORAGESQLite 场景下的数据库文件路径源码 helpers.tsDB_TIMEZONE数据库连接时区helpers.tsDB_SCHEMAPostgreSQL schemahelpers.tsDB_POOL_MAX/DB_POOL_MIN/DB_POOL_IDLE/DB_POOL_ACQUIRE/DB_POOL_EVICT/DB_POOL_MAX_USES连接池参数helpers.tsDB_DIALECT_OPTIONS_SSL_MODE/DB_DIALECT_OPTIONS_SSL_CA/DB_DIALECT_OPTIONS_SSL_KEY/DB_DIALECT_OPTIONS_SSL_CERT/DB_DIALECT_OPTIONS_SSL_REJECT_UNAUTHORIZEDTLS/SSL 连接配置支持直接填写证书内容或文件路径helpers.ts日志输出变量LOGGER_* 系列日志系统的默认值会根据APP_ENV区分开发/生产核心解析逻辑集中在 logger/config.ts。LOGGER_TRANSPORT日志输出方式指定日志输出到哪些目的地多个用,分隔。开发环境默认console生产环境默认console,dailyRotateFile。可选项consoleconsole.log输出file普通文件dailyRotateFile按天滚动的文件LOGGER_TRANSPORTconsole,dailyRotateFile源码实现为(process.env.LOGGER_TRANSPORT || console,dailyRotateFile).split(,)config.ts解析后数组中的每个元素对应一个传输通道。LOGGER_LEVEL日志级别输出日志的最低级别。开发环境默认debug生产环境默认info源码process.env.LOGGER_LEVEL || (process.env.APP_ENV development ? debug : info)见 config.ts。可选项errorwarninfodebugtraceLOGGER_LEVELinfo一个容易混淆的细节数据库日志的输出级别固定为debug由DB_LOGGING控制是否输出不受LOGGER_LEVEL影响。也就是说即使全局日志级别为info只要DB_LOGGINGonSQL 日志仍会输出。LOGGER_MAX_FILES最大保留日志文件数当LOGGER_TRANSPORT为file时默认值10份当LOGGER_TRANSPORT为dailyRotateFile时使用[n]d表示天数默认值14dLOGGER_MAX_FILES14d对应的传输层实现见 logger/transports.tsfile通道使用maxFiles: Number(process.env.LOGGER_MAX_FILES) || 10dailyRotateFile使用maxFiles: ... || 14d。LOGGER_MAX_SIZE按大小滚动当LOGGER_TRANSPORT为file时单位为byte默认值20971520即20 * 1024 * 102420MB见 transports.ts当LOGGER_TRANSPORT为dailyRotateFile时可以使用[n]k、[n]m、[n]g后缀默认不配置LOGGER_MAX_SIZE20971520LOGGER_FORMAT日志打印格式开发环境默认console生产环境默认json源码见 config.ts。可选项console可读的控制台格式jsonJSON 结构化输出便于日志采集系统ELK、Loki 等解析logfmtkeyvalue 键值对格式delimiter分隔符格式LOGGER_FORMATjson生产环境强烈建议保持json格式以便与集中式日志平台对接调试阶段可临时切换为console提升可读性。缓存变量CACHE_* 系列缓存配置在 app/src/config/cache.ts 中被解析为CacheManagerOptions用于服务端默认缓存如系统配置、ACL、数据字典等。CACHE_DEFAULT_STORE默认缓存方式指定服务端默认缓存方式的唯一标识默认值memory内置可选项memory进程内内存缓存redisRedis 缓存CACHE_DEFAULT_STOREmemoryCACHE_MEMORY_MAX内存缓存上限内存缓存项的最大个数默认值2000CACHE_MEMORY_MAX2000源码中通过max: parseInt(process.env.CACHE_MEMORY_MAX) || 2000生效cache.ts。CACHE_REDIS_URLRedis 连接地址Redis 连接串可选。示例redis://localhost:6379。配置后会自动注册redis存储CACHE_REDIS_URLredis://localhost:6379源码同时兼容REDIS_URL变量const redisURL process.env.CACHE_REDIS_URL || process.env.REDIS_URLcache.ts只有当redisURL存在时redis存储才会被注册。多实例部署或集群模式下建议使用 Redis 作为默认缓存避免各实例缓存不一致。遥测变量TELEMETRY_* 系列TELEMETRY_ENABLED是否启动遥测数据收集默认offTELEMETRY_ENABLEDonTELEMETRY_METRIC_READER启用的监控指标Metrics采集器默认console。其他取值需要参考对应采集器插件注册的名字例如prometheus多个使用,分隔TELEMETRY_METRIC_READERconsole,prometheusTELEMETRY_TRACE_PROCESSOR启用的链路追踪Trace数据处理器默认console。其他取值需要参考对应处理器插件注册的名字多个使用,分隔TELEMETRY_TRACE_PROCESSORconsole遥测模块的指标与链路能力位于 packages/core/telemetry 中实现。生产环境接入 Prometheus 时需先安装并注册对应的采集器插件再将TELEMETRY_METRIC_READER设置为插件注册名。实战一份生产环境变量清单综合以上内容一份典型的 NocoBase 生产环境MySQL Redis 文件日志 集群模式配置清单如下# 应用 APP_ENVproduction APP_KEY你的随机密钥 APP_PORT13000 API_BASE_PATH/api/ API_BASE_URLhttps://your-domain.com/api/ # 出站请求安全 SERVER_REQUEST_WHITELISTapi.example.com,*.trusted.com,10.0.0.0/8 # 集群v1.6.0需配合集群插件 CLUSTER_MODEmax # 数据库 DB_DIALECTmysql DB_HOSTdb.internal DB_PORT3306 DB_DATABASEnocobase DB_USERnocobase DB_PASSWORD强密码 DB_TABLE_PREFIXnocobase_ DB_UNDERSCOREDtrue DB_LOGGINGoff # 日志 LOGGER_TRANSPORTconsole,dailyRotateFile LOGGER_LEVELinfo LOGGER_FORMATjson LOGGER_MAX_FILES14d LOGGER_MAX_SIZE100m # 缓存 CACHE_DEFAULT_STOREredis CACHE_REDIS_URLredis://:passwordredis.internal:6379/0 # 遥测按需 TELEMETRY_ENABLEDon TELEMETRY_METRIC_READERconsole,prometheus TELEMETRY_TRACE_PROCESSORconsole配置时有几个关键先后顺序需要记住先定TZ与DB_UNDERSCORED再初始化数据库因为两者都会影响落库的日期值与表结构命名中途变更代价高APP_KEY一经生成保持不变变更会导致全部 token 失效APP_ENV必须显式设为production否则日志级别、日志格式都会落入开发环境默认值集群模式必须与集群插件配合否则功能可能异常内网出站请求务必提前配置SERVER_REQUEST_WHITELIST以兼容未来更严格的默认安全策略。这些变量在启动时由 NocoBase 的 server、database、logger 与 app 等核心模块读取配置错误通常会在启动阶段直接暴露因此建议按上表逐项核对后再执行yarn nocobase start或通过 PM2/容器编排启动。【免费下载链接】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),仅供参考