我有一个小型虚拟 Linux 服务器(500 MB RAM)。我最终可能会再购买一两台服务器,但不会更多。
我是一名开发人员,而不是系统管理员,所以我不知道涉及 Linux 管理的最佳实践。但我知道我不想设置一台机器,发出一堆命令来设置用户、安装软件包、更改环境变量,而如果我的机器崩溃,我就会失去这一切。
我宁愿将所有这些信息与我的代码一起保存在源代码存储库中。
显而易见的解决方案是 puppet 或 chef,但我没有运行机器集群。我想要一种声明式的方式来设置用户、安装包等,但不想设置 SSL 证书、主服务器等(坦率地说,我不能,我的机器很便宜,内存很少)。
对于独立机器,是否有更好的解决方案?我希望能够快速使用此解决方案重新创建我的机器(在 amazon、linode、rackspace 或我的 down 桌面上)。
答案1
Puppet 的设置非常简单。您几乎不需要做任何事情,客户端可以独立运行。我来举个例子。假设您有一个名为的文件,其中config.pp
包含以下几行:
package { 'apache2': ensure => installed }
service { 'apache2':
ensure => running,
enable => true,
require => Package['apache2'],
}
user { 'bob':
ensure => present,
uid => 1000,
gid => 'bob',
require => Group['bob'],
}
group { 'bob':
ensure => present,
gid => 1000,
}
如果您运行puppet apply config.pp
,它将确保软件包 apache2 已安装、服务正在运行且能够在启动时启动,并且将创建用户 bob 和组 bob。
就这样——安装 puppet 客户端,将其输入到这个文件中,然后运行命令。如果您想保证配置得到控制,而无需主服务器,您可以在 crontab 上安排该操作。我曾经安装了 10 个 ganeti 服务器——这涉及设置许多软件包和配置,中途至少重新启动一次——就像这样。
Puppet 确实会消耗一些内存——500 MB 有点低,但如果你主要是为了安装东西而运行它,那么它应该足够了。我将自己的服务器保持在至少 1 GB,以保证 puppet 不会对服务器上运行的服务造成问题。
此外,Puppet 绝对是声明式的,尽管您可能需要通过运行脚本或使用 ruby 代码来增强它以教它新技巧。对于您的需求,您似乎不太可能需要诉诸于此。
答案2
引擎是一种配置管理工具,启发了 Puppet 和 Chef,并拥有超过 15 年的成功经验。
需要注意的几点:
- 设置很简单 - 请参阅IBM 提供的本指南
- 它可以独立运行(无需服务器)
- 它非常节省资源 - 内存消耗在这篇博文- 既可以一次性运行,也可以作为常驻守护进程运行
- 它用 C 语言编写,依赖关系很少(只有 BerkeleyDB 和 PCRE 库)
您可以自动执行安装程序,并让 Cfengine 从源存储库中检出它们,并且能够在您丢失当前服务器时在任何服务器上重播它们。您还可以获得自动修复的额外好处 - 一旦您定义了希望服务器处于的状态,任何更改(即,删除包、删除用户等)都将由配置管理工具自动恢复。