17

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

有没有我可以学习的完整的rails堆栈示例?

4

1 回答 1

25

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

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

您需要从基本设置的Puppet 最佳实践开始。

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

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

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

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

因此,例如:

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

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

于 2011-04-27T17:34:59.637 回答