gpt4 book ai didi

deployment - 在 Chef 环境 Recipe 中管理应用程序配置

转载 作者:行者123 更新时间:2023-12-04 02:23:58 25 4
gpt4 key购买 nike

我是 Chef 的新手,一直在努力寻找有关如何在环境说明书 [来源 #1] 中配置应用程序配置的最佳实践。

我正在编写的环境 Recipe 应该执行以下操作:

  • 通过创建仅特定于此部署的目录、用户等,为自定义应用程序部署准备节点。
  • 添加特定于应用程序部署的初始化和监控脚本。
  • 定义应用程序配置设置。

这最后的责任一直是一个特别棘手的问题。

应用程序部署的示例配置文件可能如下所示:

{
"server": {
"port": 9090
},
"session": {
"proxy": false,
"expires": 100
},
"redis": [{
"port": 9031,
"host": "rds01.prd.example.com"
}, {
"port": 9031,
"host": "rds02.prd.example.com"
}],
"ldapConfig": {
"url": "ldap://example.inc:389",
"adminDn": "CN=Admin,CN=Users,DC=example,DC=inc",
"adminUsername": "user",
"adminPassword": "secret",
"searchBase": "OU=BigCustomer,OU=customers,DC=example,DC=inc",
"searchFilter": "(example=*)"
},
"log4js": {
"appenders": [
{
"category": "[all]",
"type": "file",
"filename": "./logs/myapp.log"
}
],
"levels": {
"[all]": "ERROR"
}
},
"otherService": {
"basePath" : "http://api.prd.example.com:1234/otherService",
"smokeTestVariable" : "testVar"
}
}

此部署配置文件的某些部分比其他部分更稳定。虽然这可能会因应用程序和设置而异,但为简单起见,我希望在不同环境中保持相同的端口号和用户名等内容。

让我对配置设置进行分类:

性能稳定

  • session
  • 服务器
  • log4js.appenders
  • ldapConfig.admin用户名
  • ldapConfig.searchFilter
  • otherService.basePath
  • redis.端口

环境特定属性

  • log4js.levels
  • otherService.smokeTestVariable

部分环境特定属性

  • redis.host: rds01.[environment].example.com
  • otherService.basePath: http://api.[environment].example.com:1234/otherService

加密环境特定属性

  • ldapConfig.admin密码

问题

  1. 我应该如何创建配置文件?一些选项:1) 使用应用程序部署本身附带的文件,2) 使用说明书文件模板,3) 使用 JSON blob 作为属性之一 [来源 #2],4)...其他?
  2. 配置文件的变化很大;如何最好地使用 Chef 来管理这些?角色、环境、每个节点配置、数据包、加密数据包……?还是我应该选择环境变量?

方法中的一些关键问题:

  • 我希望只有一种方法来设置配置设置。
  • 为开发人员更改配置文件应该相当简单(他们在推送测试之前在本地机器上使用 Vagrant)。
  • 密码必须安全。
  • Chef Recipe 在与源代码相同的 git 存储库中进行管理。
  • 一些配置设置需要很大的灵 active ;例如,我的示例配置中的 log4js 设置可能包含更多带有许多非结构化变量的 appender

任何经验将不胜感激!

来源

  1. http://blog.vialstudios.com/the-environment-cookbook-pattern/
  2. http://lists.opscode.com/sympa/arc/chef/2013-01/msg00392.html
  3. http://jtimberman.housepub.org/blog/2013/01/28/local-templates-for-application-configuration/
  4. http://realityforge.org/code/2012/11/12/reusable-cookbooks-revisited.html

最佳答案

Jamie Winsor 在 chefconf 上做了一次演讲,进一步解释了 environment cookbook pattern's基本原理和用法:

在我看来,此模式引入的关键概念之一是使用 chef environments 的想法。控制每个应用程序实例的设置。使用 berkshelf 更新环境, 应用程序使用的 Recipe 的运行时版本。

不太明显的是,如果您决定为单个应用程序实例保留一个 Chef 环境,那么使用该环境来配置应用程序的全局运行时设置就变得安全了。

berkshelf-api 中给出的示例 installation instructions .在那里您将看到正在使用各种运行时设置编辑生产环境(用于应用程序):

knife environment edit berkshelf-api-production

总而言之, Chef 给了我们很多选择。我会提出以下一般性建议:

  1. 在应用程序说明书中捕获默认值
  2. 为每个应用程序实例创建一个环境(按照模式的建议)
  3. 在环境中设置运行时属性覆盖

注意事项:

  • 另请参阅 berksflow工具。旨在使环境 Recipe 模式更易于实现。
  • 我没有提到使用角色。这些也可用于在运行时覆盖属性,但在专用 Chef 环境中捕获所有内容可能更简单。角色似乎更适合捕获应用程序组件特有的信息。

关于deployment - 在 Chef 环境 Recipe 中管理应用程序配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com