一个用于Rails堆栈的Puppet示例设置?(包括Nginx、Varnish、Thin、Postgres、Memcached和Redis)

17

我刚开始接触Puppet。示例演练和教程对我理解Puppet的用途和基本工具集有很大帮助,但我很难构想整个堆栈。即使是高级教程也没有给我清晰的思路。

是否有Rails堆栈的完整示例可以学习?

1个回答

25

全栈的例子很难找到。但是你应该能够找到管理某些特定示例的模块的示例。问题在于创建一个抽象了所有特定网站假设并真正跨平台的模块可能需要大量额外的工作。

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

您将从Puppet最佳实践开始进行基本设置。

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

在nodes.pp中,每个系统都会分配到一个相当简单的角色。("include role")

在你的“站点”模块中,你需要为每个系统角色创建一个子类(我假设你会有多组服务器,并且在一个组内,它们应该基本相同。我还假设你可能会包含多个以上的内容)。您还可能需要一个site::commonvariables类(或类似的东西)来存储一些跨多个其他模块或类需要的内容(例如角色中的服务器列表、密码等)。最好的实践是将这些site::role放置在/services二级模块区域中,名称更像是s_role,因此您可能希望遵循该命名/位置方案。这些角色类将包括所需组件的类、调用定义等。
对于你提到的6个组件,你需要一个模块。在该模块中,你可能需要一个"server"和"client"子类。可能还需要第三个类,由客户端和服务端共同使用(例如公共库等)。在服务端子类中,设置特定实例的定义(虚拟主机、数据库等)。如果它绝对只是一个服务器,那么可以跳过这个子类的层次结构。
例如:
  • postgres模块(清单、文件、模板等)
    • postgres类(在init.pp中):可能是空的类,也可能是客户端和服务器所需的内容
      • postgres::client类:安装postgres客户端库
      • postgres::server类:安装postgres服务器代码,确保postgres服务正在运行,配置它,设置备份等
        • postgres::server::database定义:在服务器类内部,一个定义,接受参数,如数据库名称、用户名、密码,并创建数据库和用户,并使用户访问数据库。也许这是两个或三个不同的定义,取决于您如何建模。

最好保持组件模块相对独立(可重用),您的角色类是所有更具站点特定性质的配置发生的地方,但如果您的组件模块包含一些站点特定的内容,也不是世界末日。


谢谢您提供这些信息。这可能是我能够得到的关于这个主题的最接近确定性答案了。我遇到的一个问题是,一开始,我只会运行两个混合“类别”的虚拟机——比如在一个上运行负载均衡器和应用服务器,在另一个上运行数据库。随着网站的发展,我将希望分离应用服务器(并可能添加更多)。我没有看到很多这方面的例子(分离类别),因此很难评估在这方面的“最佳实践”设置。如果您有其他提示,将不胜感激。再次感谢。 - markquezada
1
创建至少与您最终可能拆分的内容相同数量的单独类,并为每个VM“类型”定义一个主类,以确定包含哪些类。当您扩展时,为新的角色拆分创建新的主类,并将服务器分配给新的主类,而不是旧的主类。您还可能需要一些“否定”类来删除一个类,并将其包含在已从系统角色中删除的内容上。 - freiheit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接