我通过使用python flask框架开发Web应用程序。开发之后,我将代码推送到github。然后,heroku Web服务器自动从github获取代码。我想在github上隐藏我的应用程序的数据库连接URL和app.secret_key。我该如何处理这种情况?
我需要一个解决方案来帮助我隐藏该应用的机密信息。另外,我需要通过使用github将该信息移至heroku Web服务器。
答案 0 :(得分:1)
Heroku团队实际上已经编写了有关构建在云中部署的称为12 Factor App的应用程序的最佳实践的指南。他们有一个section regarding configuration,非常适合您要寻找的东西。
主要概念是,秘密配置或基于环境的更改(例如,本地与生产)的配置应作为环境变量存储,并在代码库中称为环境变量。
例如:
DB_HOST = "db.mydomain.com" # Bad practice
DB_HOST = os.environ.get("DB_HOST") # Good practice
如果您正在使用Docker和Docker Compose之类的工具,则可以自动加载.env
文件以将所有环境变量加载到您的环境中。该文件应存储在存储库之外,并被.gitignore
文件忽略。
如果您不使用Docker,则还可以安装python-dotenv之类的python软件包,以便在本地工作时从.env文件中加载环境变量。
答案 1 :(得分:0)
Heroku config命令可帮助管理应用程序的配置变量,例如数据库URL,秘密密钥等。您可以here了解更多信息。一旦在Heroku中设置了它们,就无需将它们存储在代码中。如果您不想使用Heroku CLI设置这些值,则也可以使用Heroku Dashboard。
一旦如上所述设置了配置变量,就可以使用环境变量在代码中访问它们。以下是Python示例,该示例使用boto库并建立S3连接,并从config vars中获取S3_KEY
和S3_SECRET
。有更多示例可用here
from boto.s3.connection import S3Connection
s3 = S3Connection(os.environ['S3_KEY'], os.environ['S3_SECRET'])
现在,您可以安全地将代码推送到Github。
答案 2 :(得分:0)
这可以通过使用环境变量来实现,即,您可以使用heroku cli设置heroku env变量,并使用python代码访问它们。在您的情况下,它将在heroku cli上进行
heroku config:set DB_URI = your_db_uri_here
并使用
在python中访问它们import os
db_uri = os.environ.get('DB_URI', None)
希望有帮助