在 Python 中管理配置的 4 种方法

在 Python 中管理配置的 4 种方法

原文:https://medium.com/hackernoon/4-ways-to-manage-the-configuration-in-python-4623049e841b

我的母语不是英语。抱歉,我的英语不好。请理解。

在开发服务器应用程序时,您可能会遇到管理配置的问题。当然,这个问题在每个需要配置管理的地方都会遇到,服务器应用程序也是如此。

如果你是初学者或者没有配置管理的经验,这可能有点难。特别是,如果你有像数据库信息、AWS 凭证这样的秘密值,在开放的 VCS(版本控制系统)上管理配置可能是非常危险的,比如 Github、Bitbucket。事实上,在某些情况下,由于粗心的配置管理,web 应用程序可能会被其他黑客攻击或占用他们的服务器资源,因此会意外地收取大量费用。因此,配置管理,尤其是秘密值管理是一个非常重要的问题。

在我的例子中,我主要开发服务器应用程序,并为每个项目以不同的方式管理配置。所以,我想向那些不太了解配置管理的人介绍一下我用来帮助他们的方法。

我主要在开发服务器应用程序时使用 Python,所以我将介绍的这些方法都是在 Python 中工作的。当然,这些是管理配置的“方法”,所以您也可以在其他语言中使用这些思想。没有任何问题。

在这篇文章中,我将介绍如下 4 种管理方法。(但是,在这里,我不会谈论基础设施或分布式系统级别的大规模管理。我一会儿再贴)

  • 使用内置数据结构
  • 使用外部配置文件
  • 使用环境变量
  • 使用动态加载

现在就来探索一下吧!

使用内置数据结构

这是一种非常简单直观的方法。顾名思义,它使用内置的数据结构来管理配置,基本上,它可以如下使用。

然后,看一个稍微复杂一点的案例。例如,如果您是 web 开发人员,您可能需要为每个开发、测试、生产环境进行不同的配置,因此,您可以按照下面的方法来做。

它使用起来简单直观,因为您可以直接从同一个项目中导入配置文件,并按原样使用内置的数据结构。但是,如果您使用的是 VCS,您的代码库将会公开,因此,如果存在秘密值,可能会有安全问题。因此,您应该在 VCS 上使用虚拟数据(非真实数据)而不是真实的秘密数据来保护您免受外部安全攻击。然后,您将自己在生产服务器中用真实的配置值替换虚拟数据,但是,这会很麻烦。有一种稍微高级一点的方法是使用动态加载,我们将在后面讨论。

所以,如果你在配置中没有秘密值,我推荐这种方式。

使用外部配置文件

这种方式加载外部文件中定义的配置值,而不是内置的数据结构。这是一种更通用的方式,因为这种方式将配置视为仅仅是配置,而不是代码的一部分。让我们看看使用 inijson 格式作为配置的基本例子。(注意configparser是针对 Python 3.x 的,在 Python 2.x 中,应该用ConfigParser代替)

也可以使用其他格式比如 xml,yaml。基本方法是一样的,所以,如果有一种方法可以解析格式,任何格式都可以。

在这种方法中,配置将从代码中分离出来,所以如果你使用 Git,只需要能够从 VCS 中指定文件来忽略。但是,当配置完全脱离 VCS 时,您的同事可能无法使用该配置。所以,你可以使用下面的技巧来解决这个问题。

假设 config.json 有真实的配置值。然后创建一个示例配置文件,其名称表明它是一个类似于 config.json.example. 的示例,您应该在 VCS 上管理唯一的 config.json.example 而不是 config.json 。这允许其他开发人员知道格式并自己操作配置。当然,他们应该用 config.json 重命名该文件名,以便正确地使用它作为配置。

使用环境变量

这种方式不使用文件,而是使用系统环境变量作为配置值。

配置值不是作为一个单独的文件来管理的,所以暴露秘密值的风险较小,而且它非常容易使用,可以在 codebase 中的任何地方使用。

但是,当然,最终,您可能不得不使用 shell 脚本或其他脚本来系统地管理每个环境变量。所以,如果你熟悉系统和脚本,这种方式是适合你的。但是,如果有些环境无法使用环境变量,如 Apache、Nginx web 服务器,就应该使用其他方法。

使用动态加载

如上所述,这是一种比使用内置数据结构更先进的方法。前一种方式应该导入配置。py 文件来自需要使用配置的特定文件,因此,配置文件必须位于可导入的路径上。但是,在这种方法中,配置文件不必位于可导入的路径上,甚至可以位于其他存储库中。

原理就是这么简单。只是注册和加载配置的路径。py 文件。也就是说,见下文。

是的,这似乎非常类似于第一种方式:使用内置数据结构。但是,它最大的优点是可以分离配置。项目本身的 py 文件。所以,这种方式在同时利用第一种和第二种方式的优点,并且想要(或需要)分离配置时是合适的。项目代码库中的 py 文件。

在我的例子中,我使用这种方式独立管理配置存储库和 API 服务器存储库。API 服务器只是通过导入那个文件来使用配置,但是真正的配置值是在其他存储库上管理的。然后,在配置服务器时,我克隆了两个存储库,并使 API 服务器能够动态地使用配置。

通过这样做,您可以在利用第一种方法的优势的同时管理配置,还可以最小化安全风险并更容易地管理配置。此外,特别是,随着配置环境的规模变得越来越大,独立于项目存储库来维护配置将变得更加容易和有效。

结论

到目前为止,我们已经讨论了 4 种管理配置的方法。事实上,这取决于你的应用。当然,你可以将它们混合使用,可能会有比这些方法更好的方法。而且,当系统规模非常大时,最好使用主要提供配置管理的第三方工具或服务。

我希望这篇文章能帮助那些有配置管理问题的人。

黑客中午是黑客如何开始他们的下午。我们是 @AMI 家庭的一员。我们现在接受投稿并乐意讨论广告&赞助机会。

要了解更多信息,请阅读我们的“关于”页面在脸书上点赞/给我们发消息,或者简单地说, tweet/DM @HackerNoon。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除