题 有哪些解决方案允许对服务器配置文件使用修订控制? [关闭]


在具有多个系统管理员的环境中,我发现将服务器配置文件添加到修订控制系统有一些优点。最值得注意的是能够跟踪变化,制作变更的能力,当然还能够回滚到已知的工作配置。

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


85
2018-05-06 17:46




似乎重复或与此问题非常相关 serverfault.com/questions/3852/... - Zoredache


答案:


我已经在家里测试了这个(~3个主机)一段时间了,尝试不同 scms(RCS,Subversion,git)。现在适合我的设置是git with 该 setgitperms 钩。

你需要考虑的事情:

处理文件权限和所有权

  • RCS:这本身就是这样做的
  • 颠覆:最后我试过,你需要一个包装器 svn 去做这个
  • 吉特: setgitperms 钩子处理这个透明(需要公平 最新版本的git支持 post-checkout 但是,钩子)

另外,如果你不想要你的全部 /etc 在版本控制下,但仅限于 你实际修改过的文件(比如我),你需要一个scm 支持这种用途。

  • RCS:无论如何只适用于单个文件。
  • 颠覆:我发现这很棘手。
  • git:没有探测,放“*“在顶级 .gitignore 文件并只添加那些 您想要使用的文件 git add --force

最后,还有一些有问题的目录 /etc 包可以丢弃的地方 然后由某些程序或守护程序读取的配置片段(/etc/cron.d/etc/modprobe.d等)。其中一些程序足够聪明,可以忽略 RCS文件(例如cron),有些不是(例如modprobe)。同样的事情 .svn 目录。对git来说又是一个很大的优势(只创建一个顶级 .git 目录)。


52
2018-05-06 18:23



Subversion需要asvn svn.collab.net/repos/svn/trunk/contrib/client-side/asvn。归档SVN(asvn)将允许记录通常不由svn处理的文件类型。目前,这包括设备,符号链接和文件所有权/权限。 - Cristian Ciupitu
你有没有写过如何设置你使用的钩子,等等? - GruffTech
这里有一篇简短的文章: jottit.com/jg8h7 - 8jean
这是一篇关于在Arch Linux ARM中设置类似内容的帖子,在这里应该同样适用。 zduck.com/2012/storing-your-raspberry-pi-config-in-git - silent__thought


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


28
2018-05-06 17:47



etckeeper非常好 - 它处理恢复权限(不受git,hg等支持)并支持你的后端选择(包括git,hg,bazaar等)。还集成到APT中,这样每次执行apt-get操作时,都会提交/ etc存储库,并进行隔夜提交。我已经使用了一段时间,总体来说它比使用vanilla VCS要好得多,如果仅用于权限功能。 - RichVel


另一种选择是使用自动服务器配置工具 木偶 要么 Cfengine的 以声明性语言编写服务器配置脚本。

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


23
2018-05-06 18:03



是的,但你也应该修改控制你的Puppet / CFengine配置。我也是修改控制输出的粉丝,所以你可以回答“什么 是 日期x的配置?“以及”根据puppet配置应该是什么?“,并将输入与输出相关联,以便对配置管理系统进行故障排除。 - Rob Chanter


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


10
2018-05-06 18:10





我一直在调查 厨师 最近。它不仅保留 模板化 (.erb)配置版本控制,但允许您执行操作(如 重新启动服务 将配置上传到节点后)。 Chef可以帮助您进行包管理 验证依赖关系 与您接口的任何节点(即必须安装sudo包)。 Chef似乎可以在Ruby中轻松扩展,因此如果您有任何自定义流程,您可以在提供的框架内编写脚本。

但仍然没有尝试过,你必须在客户端和服务器上安装适当的宝石(这真的不是那么难)。整体看起来很容易同时管理多台服务器。


6
2018-05-27 20:49



我们非常成功地使用Chef(60多台服务器)。所有配方和配置文件都签入Subversion。 - organicveggie


我正在我们的基础架构中实现Puppet,它非常有助于将其数据保持在版本控制中。

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

我的Puppet文件位于/ usr / local / etc / puppet /(FreeBSD 7.1)。只需将Mercurial添加到其中:

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

所有更改都通过简单的“hg commit”提交。如果更改了某些内容,我可以使用单个命令将每个服务器回滚到该文件的给定版本(例如,sudoers)。

Mercurial的精彩介绍


3
2018-05-06 19:59





我一直在我管理的服务器上使用Subversion。工作良好。我也成立了 TRAC 例如,我们有时间线视图,票务系统,浏览等。

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


3
2018-05-07 16:19





这是一个真实的用例: 使用Subversion管理4个不同服务器上的配置文件。我建议对配置文件使用版本控制,原因与将它们与代码一起使用的原因相同 - 它是一个备份和撤消按钮。如果我管理的服务器数量要大得多,而且他们在配置方面更接近我会使用类似Puppet的东西,详见berberich的回答。

这个想法是你可以有一个存储库,你可以检查服务器上的特定文件夹(例如/ var / named /),所以我都有一个历史记录和配置文件的备份(如果你犯了错误,备份是一个奖励使用GUI配置应用程序擦除您的手编辑添加 咳嗽 Mac OS X Server中的服务器管理员 咳嗽)。然后,可以轻松地在测试服务器上对其进行测试,然后使用无需手动复制文件的文件更新生产服务器。


2
2018-05-06 19:11





几年前我创建了一个项目来做到这一点: 萨翁

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


1
2018-05-12 07:13





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

基本方法

SVN书

文档管理概述


0
2018-05-06 17:58



我同意,如果你使用windows checkout tortise svn,它的使用非常简单。 - Element