Django和Chef中的PostgreSQL连接细节

4
我有一个使用Postgres数据库的Django应用程序。
我有一个Chef配方,可以设置Postgres数据库,包括为Django应用程序设置Postgres用户名/密码。
然后,这个用户名/密码由DATABASES settings.py值使用。
目前,我必须在attributes.rb和settings.py中都有Postgres细节。如何只在一个地方拥有它们?
我目前考虑的选项:
1. 通过Chef模板生成settings.py(或其一部分)。这样,细节只需要在Chef配方中。这种方法的缺点是,除非通过Chef部署,否则Django应用程序不完整。(这可能并不是太大的问题,因为即使是本地开发也是使用vagrant+chef完成的)。 2. 在文件系统上有一个已知的文件,settings.py检查并从中加载一些值。这个文件由Chef生成。这只比第一种解决方案好一点。此外,它需要一些样板代码在settings.py中加载和解析该文件。 3. 在settings.py中添加细节,并让Chef提取它们(以某种方式)。这种方法有问题,因为它会混淆Chef配方中的顺序(我必须检出我的Django应用程序,提取值,使用这些值设置Postgres,然后启动Django)。这本身可能并不太糟糕,但真正的问题出现在我想要移动到密码不在源控制文件中而是在像Chef数据包这样的东西中的系统时。
我已经搜索了很多,但除了关于settings.py布局和如何使用Django和Chef的一般讨论之外,我找不到一个好的解决方案。肯定有其他人使用Chef部署过带有Postgres的Django应用程序,并且遇到过这个问题吧?
1个回答

1
你应该使用一个data bag。而且,由于你将密码存储在其中,它应该是加密的数据包。然后你可以在两个配方中(postgres和python)从中读取数据。
此外,将密码存储在属性中也不是一个好主意,因为它们容易被暴露。

我看不到从Python中访问数据包项的简单方法(除了将数据包导出到文件系统上的文件,然后让settings.py读取它)。这是你的意思吗? - Sujay
食谱应该读取数据包,然后使用模板创建 settings.py,并传递读取的值。 - Draco Ater

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接