【问题标题】:Chef LWRP, Definition, or Cookbook for abstracting creation of Nginx virtual hostsChef LWRP、Definition 或 Cookbook,用于抽象 Nginx 虚拟主机的创建
【发布时间】:2014-06-04 06:37:39
【问题描述】:

我正在尝试找出构建解决方案以自动配置新 Rails 应用服务器的正确方法。

我查看了 chef-rails 食谱,它似乎有点冗长。在我们的例子中,我们总是以某种方式部署 Nginx,总是以某种方式执行备份,等等,所以从一个节点定义到下一个节点定义,很多配置都是多余的。

我的目标是能够通过仅定义以下信息来创建一个新的 Rails 应用服务器。

wh_webhead "test_app" do
  ssl :enable
  backups :enable
  passenger :enable
  ruby_version 2.0.0
  db_type :mysql
  db_user "testuser"
  db_pass "3207496r9w6"
  nagios_ssl_string_match "login"
end

那么我希望 Chef 执行以下操作:

  • 创建用户帐户
  • 设置框和安装
  • 使用通配符 SSL 证书安装 Nginx
  • 配置日志轮换
  • 设置防火墙规则以允许流量到端口 80 和 443
  • 使用 Ruby 2.0.0 安装乘客和 RVM
  • 按照模板创建 Rails 应用程序目录(例如 /opt/local/test_app)
  • 在 MySQL 服务器上创建新数据库、授予访问权限并设置防火墙规则
  • 为 Nagios 创建防火墙规则并配置 Nagios 进行监控:
    • 端口 80 用于重定向到端口 443
    • 端口 443 用于 HTTP 200 状态
    • 端口 443 用于文本“登录”
  • 为应用目录配置备份(例如 /opt/local/test_app)

我已经在使用 Nginx、Nagios、Ufw 等社区食谱,并在自定义食谱中创建了食谱来配置 Mysql 和 Nginx。从一个应用程序的 Nginx/Mysql 食谱到下一个应用程序,只有很多重复的代码。

我正在努力解决的问题是在哪里使用 Cookbooks、Recipes、LWRP 和 Definitions 来正确地抽象它。

我应该将 Nginx 和 Mysql 的默认配置放在定义中,然后在食谱中使用它们还是使用默认值创建自定义包装食谱?

【问题讨论】:

标签: chef-recipe chef-infra


【解决方案1】:

首先,看看 application_rubyartifact 手册,它们都可以为您自动执行这些工作流程。

我特别喜欢使用artifact说明书,因为它提供了很大的灵活性,但是application_ruby说明书内置了对Passenger、Unicorn和其他工具的支持'通常会在 Rails 应用程序要求中找到。

至于您关于食谱、食谱、LWRP 和定义的问题,我肯定会在https://stackoverflow.com/a/21733093/747032 上查看@sethvargo 的回答。它为 Opscode 的一名员工(现称为 Chef(公司))以及经常参与 Chef 社区并因此对该主题有丰富知识的人提供了关于何时使用的很好的指南。

就我的建议(我会保持简洁):

  • 使用 LWRP 来包装许多总是一起调用的资源,例如,我们使用“AWS EBS”LWRP 来创建、挂载和格式化新的 EBS。
  • 使用配方调用所有 LWRP(自定义和公共)和资源。
  • 不要使用定义,我认为 LWRP 确实不推荐使用它们。

【讨论】:

  • 谢谢,这正是我想要的。看起来 LWRP 可以很好地解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2011-01-11
  • 2014-11-12
  • 1970-01-01
  • 2015-09-16
  • 2014-08-23
  • 2012-01-29
  • 2022-09-27
  • 2016-05-12
相关资源
最近更新 更多