iOS开发其他网络知识

Cloud Foundry 中使用 cfenv

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到底是什么呢?

文档:http://nodejs.cn/api/process.html

http://nodejs.cn/api/process.html#process_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