用于轨道堆栈的示例Puppet设置? (nginx,清漆,薄,postgres,memcached,redis)

时间:2011-04-25 23:06:37

标签: ruby-on-rails puppet

我刚开始使用Puppet。示例演练和教程很好地帮助我理解Puppet的有用性和基本工具集,但是我很难概念化完整的堆栈。即使advanced tutorial似乎也没有让我清楚地了解需要发生什么。

我可以从哪里学习一个完整的rails堆栈示例吗?

1 个答案:

答案 0 :(得分:25)

完整堆栈的例子很难得到。但是,您应该能够找到管理其中一些特定示例的模块示例。一个问题是,创建一个抽象出所有特定于站点的假设并且真正是跨平台的模块可能需要做很多额外的工作。

http://forge.puppetlabs.com/是人们希望分享的模块的规范位置。通过快速扫描,我找到了nginxvarnishpostgres的模块。

您需要从Puppet Best Practices开始进行基本设置。

从那里开始,您将(至少)想要一个模块用于nginx,varnish,thin,postgres,memcached,redis和一个站点模块(可能以您的站点命名)。

在您的nodes.pp中,每个系统都会对角色进行相当简单的分配。 (“包括角色”)

在“站点”模块中,您将需要每个系统角色的子类(我假设您将拥有多组服务器,并且在一组中,它们基本上与彼此。我也假设你可能有上面的一个以上)。您可能还需要一个site :: commonvariables类(或类似的东西)来处理您可能需要跨多个其他模块或类的事物(例如角色中的服务器列表,密码等)。最佳实践似乎在/ services辅助模块区域中具有这些site :: role事物,其名称更像是s_role,因此您可能希望遵循该命名/放置方案。这些角色类将包括这些角色所需的实际组件的类,调用定义等。

对于您提到的6个组件中的每个组件,您将拥有一个模块。在该模块中,您可能想要拥有类似“服务器”和“客户端”子类的东西。客户端和服务器可能包含第三类,用于两者所需的事物(公共库等)。在服务器子类中,一个用于设置特定实例(虚拟主机,数据库等)的定义。 (如果它绝对只是一个服务器,也许跳过这个级别的子类)。

所以,例如:

  • postgres模块(清单,文件,模板等)
    • postgres类(在init.pp中):也许是空类,也许客户端和服务器需要的东西
      • postgres :: client class:安装postgres客户端库
      • postgres :: server class:安装postgres服务器代码,确保postgres服务正在运行,配置,设置备份等
        • postgres :: server :: database define:在服务器类内部,一个定义,它接受数据库名称,用户名,密码等参数,并创建数据库和用户,并授予用户访问数据库的权限。也许这是两个或三个单独的定义,取决于您喜欢如何建模。

最好是组件模块保持相当独立(并且可重用),并且您的角色类是所有更多特定于站点的配置发生的地方,但如果您的组件模块包含一些特定于站点的东西,那么它不是世界末日