跳到主要内容

高级环境变量配置

组件的运行环境除了用户自己设置的环境变量以外,平台还会默认注入一些有用的环境变量。另外,一些实验性质的新功能也可能基于设置特殊的环境变量的开启或设置。因此,了解 Rainbond 默认的环境变量机制可以使开发者在诸多场景中更高效的开发,也能生产出更适合 Rainbond 运行的应用。

默认注入的环境变量

一般是根据组件的相关属性注入相关的变量,以方便开发者获取组件相关的信息。

变量名变量值说明
PORT应用设置的第一个端口号应用建立端口监听时尽量获取 PORT 环境变量值进行监听
PROTOCOLhttp\tcp\mysql 等对应上述端口的协议类型
TENANT_ID租户 ID租户 ID
SERVICE_ID应用 ID应用 ID
SERVICE_NAME应用名称应用名称,由应用英文名和组件英文名组成,格式为:应用英文名-组件英文名
NAMESPACE应用所属命名空间应用所属命名空间
MEMORY_SIZEmicro, small, medium, large, 2xlarge 等,对应关系见下文表示当前应用实例的内存大小设置,一般用于应用内存相关设置的初始化,例如 JAVA_OPTS
SERVICE_POD_NUM应用实例数量应用实例的数量
DEPEND_SERVICEserviceAlias:serviceID,依赖的应用
HOST_IPip 地址组件运行时所在宿主机 IP 地址
POD_IPip 地址组件运行时的 IP 地址
DISCOVER_URLhttp://xxxxxxx/v1/resources/xxx配置发现接口地址,插件运行环境有效
DISCOVER_URL_NOHOST/v1/resources/xxx不带 IP 地址的配置发现 URL, 地址使用 HOST_IP:6100
  • 组件实例内存设置大小与 MEMORY_SIZE 环境变量值的关系

    程序获取当前组件设置的内存大小是非常有益的,比如 Java 的 JVM 配置,PHP 的 fpm 配置等,一些需要设置内存的内部中间件最好可以与组件本身内存设置协同,否则可能出现 OOM 或者内存浪费的情况。

    内存/Mb环境变量值
    128micro
    256small
    512medium
    1024large
    20482xlarge
    40964xlarge
    81928xlarge
    1638416xlarge
    3276832xlarge
    6553664xlarge
  • 域名自动注入的环境变量说明:

应用默认注入当前组件的访问域名环境变量信息:DOMIAN 和 DOMAIN_PROTOCOL,如果组件具有多个端口,注入策略如下

1.如果有多个端口, 则会在环境变量名后面加上_端口号, 即DOMAIN_端口号. 比如: DOMAIN_80, DOMAIN_8080

对应的域名协议则为 DOMAIN_PROTOCOL_80

2.DOMIAN 变量的值为组件端口号从小到大,自定义域名优先的值。比如有端口 80,8080,如果 8080 绑定了自定义域名,则 DOMIAN 的值为 8080 端口的自定义域名。如果都没有绑定自定义域名,则为 80 端口的默认域名。

构建组件时使用的变量

变量名以BUILD_开头的环境变量在源码构建类应用构建阶段生效,比如下述变量:

变量名变量值说明
BUILD_REPARSEtrue构建时重新识别代码语言类型
NO_CACHEtrue构建时不使用缓存包
BUILD_MAVEN_CUSTOM_OPTS-DskipTests=true -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true用于 maven 构建,默认值如前
BUILD_MAVEN_CUSTOM_GOALSclean install用于 maven 构建,默认值如前

更多组件构建环境设置,请参考 组件构建源配置

应用运行时功能控制变量

ES_开头的环境变量将作为扩展功能变量,例如下面用例:

变量名变量值说明
ES_SELECTNODE选择宿主机的 ID用于定点调度,指定调度到某台宿主机上,节点的 ID 通过 grctl node list 可得
ES_HOSTNETWORKtrue是否使用主机端口映射,该变量请谨慎使用
ES_HOSTNAME主机名设置实例的主机名,适用于单实例组件
ES_CPULIMIT1 核=1000自定义组件的 CPU 限制值 5.0.3 及以后版本支持
ES_CPUREQUEST1 核=1000自定义组件的 CPU 请求值 5.0.3 及以后版本支持
ES_TCPUDP_MESH_MEMORYMB自定义默认的 MESH 容器内存限制量,默认为 128MB
ES_TCPUDP_MESH_CPU1 核=1000自定义默认的 MESH 容器 CPU 限制量,默认为 120, 最小为 120
ES_HOST_DOMAINNAMEIP地址自定义域名解析,在 /etc/hosts 生成对应 DOMAINNAME 到 IP地址 的解析记录。
比如为组件添加环境变量 ES_HOST_test.goodrain.com(值为 172.18.1.6),则会在组件容器的 /etc/hosts 文件中追加如下内容:
# Entries added by HostAliases.
172.18.1.6 test.goodrain.com
ES_DISABLE_SIDECAR_CHECKtrue关闭 MESH 插件对依赖服务的端口检测,即使依赖组件对应端口未准备就绪,依然启动自身组件

有效使用环境变量进行软件配置

云原生应用的 12 要素第三点:“代码和配置严格分离,配置要和代码完全分离,不同环境共享一套代码。推荐将应用的配置存储于环境变量中”。推荐将你的程序需要配置的部分尽可能的环境变量化。