数据库连接字符串或密码等身份验证信息几乎不应存储在版本控制系统中。
看起来为在OpenShift上托管的应用指定环境变量的唯一方法是commit them to the Git repository。有a discussion about this on the OpenShift forums,但没有有用的建议解决方法来解决问题。
我是否可以使用另一种方法向我的应用添加身份验证信息,而无需将其提交到存储库?
答案 0 :(得分:27)
SSH到您的应用程序并导航到您的数据目录
cd app-root/data
在此目录中使用您的变量(例如“.myenv”)创建一个包含
等内容的文件export MY_VAR="something"
然后在您的存储库中“.openshift / action_hooks / pre_start”添加此行
source ${OPENSHIFT_DATA_DIR}/.myenv
答案 1 :(得分: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/
答案 2 :(得分:5)
添加.openshift/action_hooks/pre_start_*
并不是很酷,因为除了通过SSH添加文件外,还必须修改存储库。
对于nodejs,编辑nodejs/configuration/node.env
在某些日子里工作得很好,但我经历过几次恢复文件。所以它不稳定。
我找到了一个更好的解决方案。
echo -n foobar > ~/.env/user_vars/MY_SECRET
这很有效。
(也许这是rhc set-env ...
完成的事情?)
希望这有帮助!
答案 3 :(得分: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和您的本地主服务器之间,因此您的凭据没有理由“逃避”。
此方法还具有额外的好处,即能够将任何OpenShift特定更改限制在openshift
分支(例如Gemfiles,ENV变量,路径等)。
至于安全性,在OpenShift服务器上,repo应该具有与$OPENSHIFT_DATA_DIR
相同的安全性,因此您不再真正暴露自己。
警告:
您可以通过HTTP直接访问$OPENSHIFT_REPO_DIR
中的文件,具体取决于您的框架。您应该可以使用.htaccess
文件阻止此操作。