将配置文件(例如 httpd.conf、my.cnf、.bashrc ...)置于版本控制之下的最佳方式是什么?除了版本控制的好处之外,我希望该解决方案也可以用作备份,这样我就可以带来一个全新的服务器并直接从 SVN 中检出(或导出)配置文件
一个好的方法是存储配置文件的原始路径。
将配置文件(例如 httpd.conf、my.cnf、.bashrc ...)置于版本控制之下的最佳方式是什么?除了版本控制的好处之外,我希望该解决方案也可以用作备份,这样我就可以带来一个全新的服务器并直接从 SVN 中检出(或导出)配置文件
一个好的方法是存储配置文件的原始路径。
我对我的配置文件进行修订控制,但我使用git而不是 svn(当你有多台机器时这更容易)。我有一个 bash 脚本(称为install.sh
),也在存储库下,它将文件复制或符号链接到机器上的适当位置。
因此,如果我需要在新机器上进行设置,我只需对存储库进行 git clone(相当于 svn checkout)并运行 myinstall.sh
以在适当的位置设置我的配置文件。有install.sh
周围意味着我还存储了配置文件的原始路径,正如你所指出的那样。
This is what I have implemented:
I have a server that does rsync of all the configs into one directory (say /data/configs/hostname/{etc,httpd}.
I have an rsync running every hour to transfer the changes. as soon as rsync is complete, there is an svnautocommit script that does autocommit of the changes. This way, I can roll back to any change or any version I want to.
You might need to plan the SVN directory structure based on your requirements.
As you want a central store anyway, you may go for something slightly more complicated like Slack. You administer and version control the files at a push server, then rsync it to the clients. The explanation of subroles has some examples on how to structure the tree.
我为几台机器执行此操作,从旧的 Solaris 8 机器到 Mac OS X,我有一个非常简单的布局:
在我的存储库中,我有以下内容:
<root>/common
/.emacs.d
/.bash_common
/scripts # platform-independent binary tools
<root>/linux
.bashrc
.emacs
...
<root>/solaris
.bashrc
.emacs
...
<root>/osx
.bashrc
.emacs
...
每个操作系统主目录都有一个 svn:externals 对 .emacs.d、.bash_common 和脚本的引用,因此不会重复。
此外,我在 linux 和 solaris 目录中有一个 .bash_hostconfig 具有特定于主机的路径配置等,因为我在工作中的设置与我在家里的设置非常不同(FC5-8 和 RHEL3-5,取决于我在哪里是)。
因此,在这些事情之间,我有一个在新机器上启动和运行的非常简单的过程:我只需将 /$platform 检出到一个临时目录中,然后用这些文件覆盖 $HOME 中的所有内容。我不需要存储原始路径,因为它总是以这种方式相对于 $HOME 。
我们使用 CVS 将配置存储在一个尽可能扁平的目录结构中。这种技术很容易扩展到 SVN。
然后我们设置了一个 Makefile 以使用 CVS 导出到:
我们还设置了这些 tarball 以增加专业化,例如 Sol10、Apache、特定应用程序等。
高温高压
干杯,
抢
好吧,您可以将所有配置文件存储在特定的目录树下,每个应用程序一个子目录。由于大多数应用程序应该有一个指令来指定配置路径,因此这是每个服务器唯一需要更改的内容(或者如果您有硬编码的配置文件,可能支持 include 之类的东西)。
然后可以将这棵树检查到您喜欢的任何 VCS 中。
对于部署,您可以编写一个 shell 脚本或类似的东西来初始化所有内容以使用您的配置文件树。