我有几台运行 Linux 发行版的相对较小的服务器。有时我需要从头开始重新安装 1 或 2 台“开发”服务器。我经常会忘记设置一些小东西,例如在 sysctl.conf 中转发,或者忘记安装更新监控脚本、非必要但有用的软件包等。
理想情况下,我希望它们之间有精确的设置。
1) 您如何处理记录“部署”过程以理清事情?您能给我举几个例子吗?
2) 您是否使用一些流行的部署工具?我研究过 chef 和 puppet 之类的东西,但它们现在对我来说似乎过于复杂。有什么更简单的吗?
答案1
您不喜欢 Puppet(或 Chef)的什么地方?它们是专门设计用来做您需要的事情的工具。如果是因为客户端/服务器设置的复杂性,那么对于其中任何一个,您都可以跳过安装服务器组件,只需以“独立”或“单独”模式运行客户端即可。
答案2
我最终将转向 Chef 系统以实现自动扩展/发现,但现在我实际上直接从需要部署服务器的源代码控制服务器引导过程。不确定您是否在 webstack 上,或者您是否在使用 ruby,但如果您使用的是,那么一个非常好用的工具是:回顾(基于 Capistrano)
它允许您在任意数量的远程服务器上运行脚本。它的工作原理是使用“Capfile”来定义您的服务器等,然后有一些您可以扩展的内置任务。其中之一是 :bootstrap 任务。因此,在配置新服务器时,我有一个简单的链
before 'bootstrap', 'bootstrap:dependencies'
...
namespace :bootstrap do
task :dependencies do
uname = capture('uname -r')
abort('ENV Not Supported') unless uname.strip == "some uname version"
sudo('apt-get -y install build-essential')
run('echo 'America/New_York' | sudo tee /etc/timezone')
end
end
...
这只是使用 recap 提供的“capture”、“sudo”和“run”命令可以执行的一些操作的示例。当然,此示例假设您部署的软件与 ruby 堆栈绑定,但重点是,有适用于各种语言/框架的类似工具。
我的建议是将服务器的配置与您在该服务器上部署的代码绑定在一起,除非您想使用像 chef 或 puppet 这样的工具。
答案3
一些简单且灵活的模块化 bash 脚本既可以作为推出方法,又可以作为自包含文档?直到你使用 puppet/chef/somethingelse...
答案4
对于开发环境,我非常喜欢 Vagrant。它更简单(恕我直言),感谢 chef 和 puppet,它基本上允许您设置一次环境,然后将其拆除并恢复到您满意的状态。
由于这是本周我推荐 Vagrant 的第二个问题,我只想声明我与他们没有任何关系,并且从推荐他们中没有得到任何好处!