我是厨师新手,一直在努力寻找有关如何在环境食谱中配置应用程序配置的最佳实践[来源#1]。
我正在研究的环境食谱应该做到以下几点:
这最后的责任是一个特别难以破解的难题。
应用程序部署的示例配置文件可能如下所示:
{
"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"
}
}
此部署配置文件的某些部分比其他部分更稳定。虽然这可能会因应用程序和设置而异,但端口号和用户名之类的东西我更喜欢在环境中保持相同,以简化起见。
让我对配置设置进行分类:
稳定属性
特定于环境的属性
特定于环境的属性
rds01.[environment].example.com
http://api.[environment].example.com:1234/otherService
加密环境特定属性
问题
该方法的一些关键问题:
log4js
设置可能包含更多带有数十个非结构化变量的appender
。任何经历都会非常感激!
来源
答案 0 :(得分:3)
Jamie Winsor在chefconf发表演讲,进一步解释environment cookbook pattern's理由和用法:
在我看来,此模式引入的一个关键概念是使用chef environments来控制每个应用程序实例的设置。使用berkshelf更新环境,以及应用程序正在使用的cookbook的运行时版本。
不太明显的是,如果您决定为使用单个应用程序实例保留一个厨师环境,那么使用该环境配置应用程序的全局运行时设置就变得安全了。
如果在berkshelf-api installation instructions中给出的示例。在那里,您将看到正在使用各种运行时设置编辑的生产环境(对于应用程序):
knife environment edit berkshelf-api-production
总之,厨师为我们提供了很多选择。我会提出以下通用建议:
注意: