Deployment 奥普斯沃克斯厨师长12份食谱

Deployment 奥普斯沃克斯厨师长12份食谱,deployment,aws-opsworks,devops,chef-infra,Deployment,Aws Opsworks,Devops,Chef Infra,是否有人试图将Opsworks厨师v11配方转换为厨师v12 我在Chef 11上运行多个堆栈,并决定开始将其中一些转换为Chef 12。由于AWS放弃了他们的opsworks应用程序层,例如rails层配方,我们(opsworks用户)现在负责创建deployuser、git签出repos到deploy\u到,等等 灵活性很好,没有更多的名称空间冲突,但是我们错过了opsworks免费提供给我们的所有好东西 想知道是否有人把12号厨师的食谱改成了开源的?否则,社区对这些食谱感兴趣吗?我很确定我

是否有人试图将Opsworks厨师v11配方转换为厨师v12

我在Chef 11上运行多个堆栈,并决定开始将其中一些转换为Chef 12。由于AWS放弃了他们的opsworks应用程序层,例如
rails
层配方,我们(opsworks用户)现在负责创建
deploy
user、git签出repos到
deploy\u到
,等等

灵活性很好,没有更多的名称空间冲突,但是我们错过了opsworks免费提供给我们的所有好东西

想知道是否有人把12号厨师的食谱改成了开源的?否则,社区对这些食谱感兴趣吗?我很确定我不是一个人在这里


提前谢谢你

我不知道OpsWorks的老食谱,但请查看一些使用plain Chef进行Rails(以及更多)部署的示例(也适用于OpsWorks)。

基本上就是您所需要的一切。它甚至将应用程序放在相同的目录中(即
/srv/www/app\u name/
),设置数据库.yml等

此配方与其他非OpsWorks配方的主要区别在于,这将为您从OpsWorks配置中提取所有内容。您不必自定义配方,只需确保您的应用程序和层命名正确-它将从那里构建所有内容-包括您的RDS数据库配置。yml

主要的区别是OpsWorks中的层不会是“Ruby感知”的,因此您不会有Rails或Ruby的字段,而是需要在其他地方管理这些字段。环境变量的加载方式也有点不同

另外,请务必阅读AWS针对OpsWorks实施的Chef 12。从技术上讲,他们有两本厨师烹饪书,一本是内部的,另一本是你的。它们包括管理最新的代理、加载用户(用于ssh)、连接监控等。您必须管理其余部分

我们要么用超市里的个人烹饪书替换了他们巨大的烹饪书中的东西,要么只是重写了它。例如,旧的Chef 11 opsworks_初始设置有一些关于调整网络和linux设置的东西-我们重新创建了它们

如果适用,它也会使用部署用户,例如:

$ps-eo用户,命令
用户命令
//剪断
根nginx:master进程/usr/sbin/nginx-c/etc/nginx/nginx.conf
aws opsworks代理:master 10820
aws opsworks代理:让大师10820活着
aws opsworks代理:master 10820的统计数据
aws opsworks代理:主控10820的进程_命令
部署unicorn_rails master--env production--daemonize-c/srv/www/app/shared/config/unicorn.conf
部署unicorn_rails worker[0]--env production--daemonize-c/srv/www/app/shared/config/unicorn.conf
部署unicorn_rails worker[1]--环境生产--daemonize-c/srv/www/app/shared/config/unicorn.conf
部署unicorn_rails worker[2]--环境生产--daemonize-c/srv/www/app/shared/config/unicorn.conf
部署unicorn_rails worker[3]--环境生产--daemonize-c/srv/www/app/shared/config/unicorn.conf
nginx nginx:工作进程
nginx nginx:工作进程


这只是流程输出的一个小例子,但root会根据需要启动一些东西,每个流程都利用自己的用户来限制权限和访问。

我认为最常见的方法是使用超市的“应用程序”食谱:(这也是基于Poise)。注意:使用版本4,他们删除了v5中几乎所有的好功能

它将创建目录结构,支持不同的部署策略,并提供一些要挂钩的事件。 请注意:在我看来,Opsworks文档对于“使用Opsworks和chef12部署”主题来说是半好的:来自gui的信息(如repo url等)不在
节点上,而是在应用程序的数据库中。对于调试,查看
/var/chef/runs/
目录以查看从何处可用的内容非常有用。 小片段展示了这个想法:

app = search("aws_opsworks_app").first
application "#{app['shortname']}" do
  owner 'root'
  group 'root'
  repository app['app_source']['url']
  revision   'master'
  path "/srv/#{app['shortname']}"
end

这将在
/srv
上创建releases/current目录结构并签出代码。注意:您可能认为您在GUI中指定的ssh密钥以某种方式自动放置在正确的位置。不是,你得自己处理。查看chef11 opsworks食谱:

谢谢,这是一个很好的例子,但它非常基本。当我提到Opsworks配方的好处时,我的意思是
deploy
配方将创建模仿capistrano部署的目录结构(
/srv/www/app/releases
/srv/www/app/shared
/srv/www/app/current
),为每个应用程序准备
deploy
用户及其
ssh\code>,用与环境相关的正确值替换
database.yml
。您可以这样做,但我不推荐这样做。
deploy
资源比它的价值更脆弱。您是否必须在opsworks中指定使用build essentials、application\u ruby等。。。正如您在自述文件中所说,这是一个依赖项,但不是是否首先在层中运行这些依赖项?它将为您安装所有这些,请参阅将repo上载到my chef repo与打包依赖项和从S3提取之间是否有区别?我还没能从我的回购协议中实现这一点。它一直在要求一本windows烹饪书,当然它在Linux AMI上不起作用。。。