跳到主要内容

环境变量

夜莺读的环境变量,以及为什么配置项本身不能用环境变量覆盖。

先说清楚一件事:夜莺没有「用环境变量覆盖任意配置项」的机制。 没有 N9E_DB_DSN 这种东西。配置的唯一来源是 etc/ 下的 toml 文件。

容器化部署时的做法是挂载配置文件,不是堆环境变量—— compose 方案就是这么做的(./etc-nightingale:/app/etc)。

夜莺读的环境变量​

变量作用默认
N9E_CONFIGSCenter 的配置目录,等价于 --configsetc
N9E_ALERT_CONFIGSn9e-alert 的配置目录etc
N9E_PUSHGW_CONFIGSn9e-pushgw 的配置目录etc
N9E_EDGE_CONFIGSn9e-edge 的配置目录etc/edge
N9E_PROXY_URL出向 HTTP 请求走的代理空
N9E_GRAFANA_IMPORT_ALLOWLIST从 Grafana 导入时允许连接的地址白名单空
N9E_SKILL_GATEWAYSkill 沙箱的出网网关 socket(Linux 沙箱用)空

compose 方案里出现的环境变量​

这些是给别的容器用的,不是夜莺自己读的,看 compose 文件时别搞混:

变量属于谁
MYSQL_ROOT_PASSWORDmysql 容器
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB / PGDATApostgres 容器
WAIT_HOSTS等待依赖就绪的启动脚本
HOST_PROC / HOST_SYS / HOST_MOUNT_PREFIXcategraf 容器,用来采集宿主机
GIN_MODE / TZ通用

想按环境改配置怎么办​

三种做法,按推荐程度排:

  1. 每个环境一份配置文件,用 N9E_CONFIGS 或 --configs 指到对应目录。 最直白,也最好审计。
  2. 配置模板 + 启动时渲染:在容器的 entrypoint 里用 envsubst 之类把变量填进 toml, 然后再启动进程。
  3. 加密字段:敏感值用 --crypto-key 对应的密钥加密后存在配置文件里, 密钥本身走环境变量或密钥管理系统。见凭据管理。

相关​