1.当我们开发Nodejs 后台代码,并且发布到 IBM Cloud Foundry时,可能Nodejs后台代码要使用IBM Cloud DB2服务, 当然我们可以把DB2连接的URL 和 认证信息等,硬编码在Nodejs程序中,但是这样安全性不高,这时候我们可以通过cfenv 来获得IBM Cloud DB2的认证连接信息。
https://www.npmjs.com/package/cfenv
https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-cloud-foundry&locale=zh-CN
- 首先,进入到IBM Cloud Foundry的控制台,在连接的选项中,添加我们需要的服务。比如这里面添加cloud-object-storage
- 服务信息如下
{ "cloud-object-storage": [ { "credentials": { "apikey": "abcDEFg_lpQtE23laVRPAbmmBIqKIPmyN4EyJnAnYU9S-", "endpoints": "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints", "iam_apikey_description": "Auto generated apikey during resource-key operation for Instance - crn:v1:bluemix:public:cloud-object-storage:global:a/123456cabcddda99gd8eff3191340732:7766d05c-b182-2425-4d7e-0e5c123b4567::", "iam_apikey_name": "auto-generated-apikey-cf4999ce-be10-4712-b489-9876e57a1234", "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Manager", "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/ad123ab94a1cca96fd8efe3191340999::serviceid:ServiceId-41e36abc-7171-4545-8b34-983330d55f4d", "resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/1d524cd94a0dda86fd8eff3191340732:8888c05a-b144-4816-9d7f-1d2b333a1444::" }, "syslog_drain_url": null, "volume_mounts": [], "label": "cloud-object-storage", "provider": null, "plan": "Lite", "name": "mycos", "tags": [ "Lite", "storage", "ibm_release", "ibm_created", "rc_compatible", "ibmcloud-alias" ] } ] }
- 在nodejs 代码中,可以通过appEnv或者上面的service信息。
const appEnv = cfenv.getAppEnv(); const cosService = 'cloud-object-storage'; // init the cos sdk var cosCreds = appEnv.services[cosService][0].credentials; var AWS = require('ibm-cos-sdk'); var config = { endpoint: 's3.us-south.objectstorage.s3.us-south.cloud-object-storage.appdomain.cloud.net', apiKeyId: cosCreds.apikey, ibmAuthEndpoint: 'https://iam.cloud.ibm.com/identity/token', serviceInstanceId: cosCreds.resource_instance_id, }; var cos = new AWS.S3(config);
2.有的时候我们需要自己定义自己的环境变量,灵活的来对应测试环境和生产环境的发布。可以通过 cf env 命令来实现。
https://docs.cloudfoundry.org/devguide/deploy-apps/environment-variable.html
- 在IBM Devops Deliver PipLine的部署阶段
- 在部署脚本上使用命令 cf set-env WebsocketServer myenv test
- 在后台代码中,可以通过process.env.myenv得到之前设定的值。
// Start server.on( 'request', app ); server.listen( environment.port, function() { // 通过process.env.myenv 就能拿到设定的值。 console.log(process.env.myenv); } );
3.Node.js中环境变量process.env到底是什么呢?
官方解释:process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程。作为一个对象,它对于 Node.js 应用程序始终是可用的,故无需使用 require()。
process(进程)其实就是存在nodejs中的一个全局变量。
process.env属性返回一个包含用户环境信息的对象。原来着个属性能返回项目运行所在环境的一些信息。很明显的一个使用场景,依靠这个我们就可以给服务器上打上一个标签。这样的话,我们就能根据不同的环境,在代码上做一些配置上的处理,比如dev,uat,product环境的发布的问题。
如何配置环境变量
Windows配置
- 临时配置
直接在cmd环境配置即可,查看环境变量,添加环境变量,删除环境变量。 #node中常用的到的环境变量是NODE_ENV,首先查看是否存在 set NODE_ENV #如果不存在则添加环境变量 set NODE_ENV=production #环境变量追加值 set 变量名=%变量名%;变量内容 set path=%path%;C:\web;C:\Tools #某些时候需要删除环境变量 set NODE_ENV=
- 永久配置
右键(此电脑) -> 属性(R) -> 高级系统设置 -> 环境变量(N)…
Linux配置
- 临时配置
#node中常用的到的环境变量是NODE_ENV,首先查看是否存在 echo $NODE_ENV #如果不存在则添加环境变量 export NODE_ENV=production #环境变量追加值 export path=$path:/home/download:/usr/local/ #某些时候需要删除环境变量 unset NODE_ENV #某些时候需要显示所有的环境变量 env
- 永久配置
打开配置文件所在 # 所有用户都生效 vim /etc/profile # 当前用户生效 vim ~/.bash_profile 在文件末尾添加类似如下语句进行环境变量的设置或修改 # 在文件末尾添加如下格式的环境变量 export path=$path:/home/download:/usr/local/ export NODE_ENV = product 最后修改完成后需要运行如下语句令系统重新加载 # 修改/etc/profile文件后 source /etc/profile # 修改~/.bash_profile文件后 source ~/.bash_profile