将python flask Web项目移至github时如何隐藏数据库连接URL?

时间:2019-04-16 10:53:55

标签: python github heroku flask

我通过使用python flask框架开发Web应用程序。开发之后,我将代码推送到github。然后,heroku Web服务器自动从github获取代码。我想在github上隐藏我的应用程序的数据库连接URL和app.secret_key。我该如何处理这种情况?

我需要一个解决方案来帮助我隐藏该应用的机密信息。另外,我需要通过使用github将该信息移至heroku Web服务器。

3 个答案:

答案 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_KEYS3_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)

希望有帮助