php中文网

在 Python 中管理配置的方法

php中文网

在开发服务器应用程序时,您可能会遇到管理配置的问题。当然,这个问题在任何需要配置管理的地方以及服务器应用程序中都会遇到。

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

就我而言,我主要开发服务器应用程序,并为每个项目以不同的方式管理配置。所以,我想介绍一下我所使用的方法,以帮助那些不太了解配置管理的人。

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

立即学习“Python免费学习笔记(深入)”;

在这篇文章中,我将介绍以下四种管理方式。 (但是,在这里,我不会谈论基础设施或分布式系统级别的大规模管理。我稍后会发布)

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

使用内置数据结构

这是一种非常简单直观的方法。正如标题所示,它使用内置的数据结构来管理配置,基本上可以如下使用。

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

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

因此,如果您的配置中没有秘密值,我建议您采用这种方式。

使用外部配置文件

这种方式加载外部文件中定义的配置值,而不是内置的数据结构。这是更通用的方法,因为这种方法会将配置视为只是配置,而不是代码的一部分。让我们看看使用 ini 和 json 格式作为配置的基本示例。 (请注意,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 重命名该文件名,以正确地将其用作配置。

使用环境变量

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

配置值不作为单独的文件进行管理,因此暴露秘密值的风险较小,并且它非常易于使用,可以在代码库中的任何位置使用。

但是,当然,最终您可能必须使用 shell 脚本或其他脚本来系统地管理每个环境变量。因此,如果您熟悉系统和脚本,那么这种方法适合您。但是,如果某些环境无法使用环境变量,例如 Apache、Nginx Web 服务器,则应该使用其他方式。

使用动态加载

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

原理就这么简单。只需动态注册并加载配置.py文件的路径即可。即,请参阅以下内容。

是的,它看起来与第一种方式非常相似:使用内置数据结构。但是,它的最大优点是您可以将配置 .py 文件与项目本身分开。因此,当同时利用第一种和第二种方式的优点,并且想要(或需要)将配置 .py 文件与项目代码库分离时,这种方式是正确的。

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

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

结论

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

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

以上就是在 Python 中管理配置的方法的详细内容,更多请关注php中文网其它相关文章!