it-swarm.cn

存在哪些解决方案可以对服务器配置文件使用修订控制?

在具有多个系统管理员的环境中,我看到了将服务器配置文件添加到版本控制系统中的一些优点。最值得一提的是能够跟踪更改的源头,当然还有能够回滚到已知的有效配置的能力。

我主要对Unix/Linux解决方案感兴趣,但也会对Windows实现感到好奇。

85
Dave K

我已经在家里(〜3台主机)测试了一段时间,尝试使用不同的scms(RCS,Subversion,git)。现在最适合我的设置是带有 setgitperms 钩子的git。

您需要考虑的事情:

文件权限和所有权的处理

  • RCS:本机执行
  • Subversion:上一次我尝试过,您需要在svn周围使用包装器来执行此操作
  • git:setgitperms钩子可以透明地处理此问题(不过需要支持_post-checkout_钩子的git的较新版本)

另外,如果您不希望所有_/etc_受版本控制,而只希望您实际修改的文件(如我),则需要一个支持这种使用的scm。

  • RCS:无论如何,仅适用于单个文件。
  • 颠覆:我发现这很棘手。
  • git:无探针,在顶级_*_文件中放入“ _.gitignore_”,然后仅使用_git add --force_添加您想要的文件

最后,在_/etc_下有一些问题目录,程序包可以删除配置摘要,然后由某些程序或守护程序(_/etc/cron.d_,_/etc/modprobe.d_等)读取这些摘要。其中一些程序足够聪明,可以忽略RCS文件(例如cron),而有些则不能(例如modprobe)。与_.svn_目录相同。还是git的一大优点(仅创建一个顶级_.git_目录)。

52
8jean

我已经用git非正式地完成了,但是还有 etckeeper 项目,它是一个更加完善和详细的实现。

28
pjz

另一个选择是使用自动服务器配置工具,例如 PuppetCfengine ,以声明性语言编写服务器配置脚本。

这是前端的额外工作,但是使用Puppet这样的实用程序,您可以在很少的人工干预下自动重建和配置服务器。

23
berberich

我一直在尝试 etckeeper ,它似乎工作得很好。我不需要集中式服务器,这在某些情况下可能很重要。您可以使用几个不同的DVCS后端,因此可以选择最熟悉的一个。它对我来说似乎很好用,但是我还没有尝试让其他技术人员开始使用它。

10
Zoredache

我最近一直在研究Chef)。它不仅在版本控制中保留 templatable (.erb)配置,而且还允许您执行操作(例如将配置上传到节点后 重新启动服务 )。 Chef帮助进行软件包管理,因此您可以 验证依赖项 与您连接的任何节点(即必须安装Sudo软件包)。 Chef在Ruby中似乎很容易扩展,因此,如果您有任何自定义进程,则可以在提供的框架中编写脚本。

但是仍然没有尝试过,您必须使用适当的gem在客户端和服务器上安装Ruby(这实际上并不难)。总体而言,在以下位置管理许多服务器确实很容易一旦。

6
bluehavana

我正在整个基础架构中实施Puppet,这非常有助于将其数据保留在版本控制中。

我更喜欢Mercurial,因为它只是文件的集合,一些元数据存储在隐藏目录中(易于管理,易于理解,易于使用)。

我的Puppet文件位于/ usr/local/etc/puppet /(FreeBSD 7.1)。添加Mercurial所需的全部时间:

> cd /usr/local/etc/puppet
> hg init

所有更改均通过简单的“ hg commit”提交。如果发生变化,我可以使用单个命令将每个服务器回滚到文件的给定版本(例如sudoers)。

Mercurial简介

3
sh-beta

我一直在管理的服务器上使用Subversion。工作良好。我还设置了 Trac 实例,因此我们具有时间轴视图,票务系统,浏览等。

使用符号链接,cron和Subversion,我还基于Subversion存储库设置了自动配置分发,其中每个Linux服务器都使用svn update和脚本(例如防火墙脚本)来更新存储库。

3
Martin C.

这是一个现实生活中的用例:用Subversion管理4台不同服务器上的配置文件。我建议对配置文件使用版本控制,原因与您将它们与代码一起使用的原因相同-它是一个备份和一个撤消按钮,它们合而为一。如果我要管理大量的服务器,而它们在配置方面更接近,那么我将使用berberich的答案中详细介绍的Puppet之类的东西。

这个想法是,您可以拥有一个存储库,可以检出服务器上的特定文件夹(例如/ var/named /),因此我既有历史记录又有配置文件的备份(如果您输入错误,则备份是一个奖励)使用GUI配置应用程序擦除您手工编辑的附加内容cough在Mac OS X Server中的服务器管理cough)。然后,可以轻松地在测试服务器上对其进行测试,然后使用无需手动复制文件即可运行的文件来更新生产服务器。

2
Chealion

几年前,我创建了一个项目来完全做到这一点: Savon

它使用Subversion来存储文件,并具有一些附加功能,例如跟踪所有权,权限和SELinux上下文。它还允许您在逻辑上将文件系统更改分成几层,因此,例如,您可以跟踪应单独发送到所有Web服务器的更改。

1
Thomas Vander Stichele

Subversion非常易于设置和使用,并且有很多资源:

基本操作方法

SVN书

文档管理概述

0
Jimmie R. Houts

我们的大多数更改都通过我们的Help Desk系统进行管理,即使是日常维护类型的东西也是如此。我们一直在缓慢地将文档移至Wiki供自己使用,以及将其发布给最终用户。发布配置更改及其背后的讨论很高兴在我们的Intranet上公开。

0
Waldo

多年以来,我一直使用rcs来开始修改文件,但是几年前,我开始将整个/ etc置于git控制之下。检入大容量文件需要一些工作(有时我诉诸巨大的“各种更新”检入),并且我编写了一些脚本来帮助解决此问题,但是提到的etckeeper似乎非常有趣,我将立即尝试。

0
hlovdal