Environment variables 如何将私有信息添加到OpenShift环境变量?

Environment variables 如何将私有信息添加到OpenShift环境变量?,environment-variables,openshift,Environment Variables,Openshift,诸如数据库连接字符串或密码之类的身份验证信息几乎不应该存储在版本控制系统中 为OpenShift上托管的应用程序指定环境变量的唯一方法似乎是。有,但没有有用的建议解决这个问题 我是否可以使用其他方法将身份验证信息添加到我的应用程序中,而不必将其提交到存储库?SSH到您的应用程序中并导航到您的数据目录 cd app-root/data 在此目录中创建一个包含变量(例如“.myenv”)的文件,其内容如下 export MY_VAR="something" 然后在“.openshift/acti

诸如数据库连接字符串或密码之类的身份验证信息几乎不应该存储在版本控制系统中

为OpenShift上托管的应用程序指定环境变量的唯一方法似乎是。有,但没有有用的建议解决这个问题


我是否可以使用其他方法将身份验证信息添加到我的应用程序中,而不必将其提交到存储库?

SSH到您的应用程序中并导航到您的数据目录

cd app-root/data
在此目录中创建一个包含变量(例如“.myenv”)的文件,其内容如下

export MY_VAR="something"
然后在“.openshift/action\u hooks/pre\u start”中的存储库中添加这一行

source ${OPENSHIFT_DATA_DIR}/.myenv

另一个选项是在本地计算机上创建项目的
openshift
分支。您可以为仅存在于
openshift
分支中的私人信息创建文件夹/文件。您仍然需要在
pre_start
钩子中获取文件的源代码,类似于
source${OPENSHIFT\u REPO\u DIR}/.private

然后在
master
分支中开发,合并到
openshift
分支中,并从
openshift
分支推送到openshift master分支。这听起来让人费解,但确实是一个非常简单的工作流程,特别是如果您是
origin
共享的

如果您的源站位于GitHub上,则这将是工作流


github/master local/master-->本地/openshift-->openshift/master

请注意,唯一的双向链接是github和本地主机之间的链接,因此您的凭据没有理由“转义”

这种方法还有一个额外的好处,就是能够将任何特定于OpenShift的更改限制在
OpenShift
分支中(如Gemfiles、ENV变量、路径等)

至于安全性,在OpenShift服务器上,repo应该与您的
$OpenShift\u DATA\u DIR
具有相同的安全性,因此您不再真正暴露自己

警告:
根据您的框架,可以通过HTTP直接访问
$OPENSHIFT\u REPO\u DIR
中的文件。您应该能够通过
.htaccess
文件防止这种情况

添加
.openshift/action\u hooks/pre\u start.*
不是很酷,因为除了通过SSH添加文件外,还必须修改存储库

对于nodejs,编辑
nodejs/configuration/node.env
可以正常工作几天,但我经历了多次文件被还原。所以它是不稳定的

我找到了一个更好的解决办法

echo-n foobar>~/.env/user\u vars/MY\u SECRET

这很好用

(可能这就是使用
rhc set env…
?)


希望这有帮助

Openshift现在支持使用rhc命令行工具设置环境变量,如下所示:

rhc set-env HEROKU_POSTGRESQL_DB_URL='jdbc:postgresql://myurl' -a myapp
我认为这比所有其他答案都简单


请参阅:

我特别希望避免这种复杂的多存储库设置,但我可以看到一些好处。另外,感谢大家提醒我可以通过HTTP访问repo目录,这是将凭据完全排除在存储库之外的另一个好理由。这似乎是我要寻找的答案,但在我的快速测试中,自定义变量没有显示在Node.js中的
process.env
对象中。我会在周末仔细看一看。这会影响环境变量,并使其在应用程序中可用。节点应用程序需要注意的一点是:您所期望的一系列环境(包括像这样添加的自定义环境)在通过SSH直接在命令行上运行的脚本中不可用。我的环境必须在文件
.openshift/action\u hooks/pre\u start\u nodejs-0.6
中。在某个地方找到应用程序名称gem。但这样做解决了我的问题:)在node.js中对我有效,其他人都没有。必须投入。尽管是预构建。难道你不需要重新启动或之后做些什么吗?