我是新来的厨师和一直在努力寻找如何在环境菜谱[源#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"
}
}
此部署配置文件的某些部分比其他人更稳定。 虽然这可能取决于应用程序和设置而异,如端口号,用户名的事情,我宁愿保持相同的不同环境中为了简单起见。
让我来分类的配置设置:
性能稳定
- 会议
- 服务器
- log4js.appenders
- ldapConfig.adminUsername
- ldapConfig.searchFilter
- otherService.basePath
- redis.port
环境特定的属性
- log4js.levels
- otherService.smokeTestVariable
局部环境的具体性能
- redis.host:
rds01.[environment].example.com
- otherService.basePath:
http://api.[environment].example.com:1234/otherService
加密的环境特定属性
- ldapConfig.adminPassword
问题
- 我应该如何创建配置文件? 一些选项:1)使用的应用程序部署本身内发货文件,2)使用一个食谱文件模板,3)使用JSON作为BLOB属性之一[来源#2],4)...等?
- 还有就是配置文件中的变化有很大的差异; 如何更好利用这些厨师来管理? 角色,环境,每个节点的配置,数据包,加密数据袋...? 或者我应该选择环境变量来代替?
在方法的一些关键问题:
- 我宁愿只有1设置的配置设置的方式。
- 更改配置文件对于开发人员来说应该是相当简单(他们在本地计算机上使用推流浪测试之前)。
- 这些密码必须是安全的。
- 厨师食谱是相同的git仓库的源代码进行管理。
- 某些配置设置需要的具有很大的灵活性; 例如
log4js
在我的例子配置设置可能包含更多的appender
s的几十个相当非结构化变量。
任何经验,将不胜感激!
来源
- http://blog.vialstudios.com/the-environment-cookbook-pattern/
- http://lists.opscode.com/sympa/arc/chef/2013-01/msg00392.html
- http://jtimberman.housepub.org/blog/2013/01/28/local-templates-for-application-configuration/
- http://realityforge.org/code/2012/11/12/reusable-cookbooks-revisited.html