13

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

看起来为托管在 OpenShift 上的应用程序指定环境变量的唯一方法是将它们提交到 Git 存储库。OpenShift 论坛上对此进行了讨论,但没有针对该问题提出有用的建议解决方法。

是否可以使用另一种方法将身份验证信息添加到我的应用程序而无需将其提交到存储库?

4

4 回答 4

27

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

cd app-root/data

在这个目录中创建一个包含变量的文件(例如“.myenv”),内容如下

export MY_VAR="something"

然后在“.openshift/action_hooks/pre_start”中的存储库中添加这一行

source ${OPENSHIFT_DATA_DIR}/.myenv
于 2012-11-27T16:16:28.580 回答
18

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

rhc set-env HEROKU_POSTGRESQL_DB_URL='jdbc:postgresql://myurl' -a myapp

我认为这比所有其他答案都容易...

请参阅:https ://blog.openshift.com/taking-advantage-of-environment-variables-in-openshift-php-apps/

于 2013-11-18T22:37:49.980 回答
5

添加.openshift/action_hooks/pre_start_*不是很酷,因为除了通过 SSH 添加文件之外,您还必须修改存储库。

对于nodejs,编辑nodejs/configuration/node.env工作好几天,但我经历了文件被恢复了好几次。所以不稳定。

我找到了一个更好的解决方案。

echo -n foobar > ~/.env/user_vars/MY_SECRET

这完美地工作。

(也许这就是做的rhc set-env ...?)

希望这可以帮助!

于 2013-09-20T13:44:10.837 回答
2

您的另一个选择是openshift在本地计算机上创建项目的分支。您可以为仅存在于您的openshift分支中的私人信息创建一个文件夹/文件。您仍然需要获取pre_start挂钩中的文件,例如source ${OPENSHIFT_REPO_DIR}/.private.

然后在你的master分支中开发,合并到你的openshift分支中,然后从你的分支推openshift送到 OpenShift 主分支。这听起来令人费解,但确实使工作流程变得非常简单,尤其是在origin共享的情况下。

如果您的来源在 GitHub 上,这将是工作流程。

github/master <--> local/master --> local/openshift --> openshift/master

请注意,唯一的双向链接是在 github 和您的本地 master 之间,因此您的凭据不应该“逃逸”。

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

至于安全性,在 OpenShift 服务器上,repo 应该具有与您相同的安全性$OPENSHIFT_DATA_DIR,因此您不会再暴露自己。

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

于 2012-11-27T21:55:22.257 回答