Git/Heroku - 如何隐藏我的 SECRET_KEY?
Posted
技术标签:
【中文标题】Git/Heroku - 如何隐藏我的 SECRET_KEY?【英文标题】:Git/Heroku - How to hide my SECRET_KEY? 【发布时间】:2018-06-05 13:13:40 【问题描述】:我正在使用 Python 和 Django 创建 Heroku Web 应用程序,而 Heroku 在尝试执行此操作时在命令“git push heroku master”后给了我这个错误:ModuleNotFoundError: No module named 'dlist.secret_settings'
:
#settings.py
from .secret_settings import *
# from secret_settings.py import * doesn't work for some reason.
以下是 secret_settings.py(与 settings.py 位于同一文件夹中)包含的内容:
#secret_settings.py
SECRET_KEY = 'string here'
问题是,当我在本地服务器(即http://127.0.0.1:8000/)上测试我的 Web 应用程序时,它可以工作,但是当我将这些更改推送到 Heroku 时,它不起作用。正如你所看到的,根据其他人的建议,我想要做的就是隐藏我的 SECRET_KEY。我看过其他人的建议,我似乎无法弄清楚,选择这种方法是因为它可以理解。非常令人沮丧。非常感谢初学者友好的答案/步骤。
【问题讨论】:
【参考方案1】:我猜你已经将 Git 配置为忽略 secret_settings.py
。这是我能想到的创建单独文件的唯一原因。
Heroku 部署由 Git 提供支持。由于 Git 不跟踪 secret_settings.py
,因此它不会被推送到 Heroku。您可以将该文件添加到您的存储库中,但这会破坏首先拥有一个单独的未跟踪文件的目的。
解决方案是使用environment variable。这是well-supported on Heroku。
在您的settings.py
文件中,使用os.getenv()
设置您的SECRET_KEY
,如下所示:
import os
SECRET_KEY = os.getenv('SECRET_KEY', 'Optional default value')
这告诉 Django 从名为 SECRET_KEY
的环境变量中加载您的 SECRET_KEY
设置。如果不存在这样的环境变量,它将回退到可选的默认值。在您的开发机器上,使用默认值可能没问题。
最后,在 Heroku 上设置 SECRET_KEY
环境变量。您可以通过在您的开发机器上运行 heroku config:set SECRET_KEY="YOUR_SECRET_KEY_VALUE"
或通过 Heroku 的基于 Web 的仪表板来执行此操作。
您的secret_settings.py
文件不再需要。
【讨论】:
感谢 Chris 提供了极大的帮助,文档对我来说不是很清楚。一个后续问题是,如果我将其提交给公共回购,是否将我的原始SECRET_KEY
包含在os.getenv
的第二个参数(即可选默认值)中是否安全?如果它不安全,我应该在settings.py
中使用SECRET_KEY = os.getenv('SECRET_KEY')
吗?我想问题真的是os.getenv
中的第一个参数是否是网络应用程序上only 真实的SECRET_KEY
(如果包含),但如果不包含它并且您在开发机器上,它会而是使用第二个参数?
@reedx8,如果您将真正的密钥作为第二个参数包含在内,它将在您的公共存储库中对全世界可见。这可能不是你想要的。您可以使用os.getenv('SECRET_KEY')
,但您需要在所有环境(您的开发机器、您可能拥有的任何测试或暂存环境等)中设置一个SECRET_KEY
环境变量.包含一个虚拟值作为默认值可能更容易,尽管当然可以在任何地方设置环境变量。我为os.getenv()
添加了指向文档的链接。以上是关于Git/Heroku - 如何隐藏我的 SECRET_KEY?的主要内容,如果未能解决你的问题,请参考以下文章
使用 git-tracked heroku 项目时如何安全地存储 .pem 文件?