【发布时间】:2014-06-27 19:33:46
【问题描述】:
我是 Chef 新手,一直在努力寻找有关如何在环境说明书中配置应用程序配置的最佳实践 [来源 #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.admin用户名
- 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)... 其他?
- 配置文件的可变性非常多样化;如何最好地使用 Chef 管理这些?角色、环境、每个节点的配置、数据包、加密数据包……?还是我应该选择环境变量?
该方法中的一些关键问题:
- 我希望只有一种方法来设置配置设置。
- 为开发人员更改配置文件应该相当简单(他们在推送测试之前在本地计算机上使用 Vagrant)。
- 密码必须是安全的。
- 厨师食谱与源代码在同一 git 存储库中进行管理。
- 一些配置设置需要很大的灵活性;例如,我的示例配置中的
log4js设置可能包含更多appenders 以及数十个相当非结构化的变量。
任何经验将不胜感激!
来源
【问题讨论】:
标签: deployment configuration chef-infra