最近このブログの置き場所を自宅サーバからlinodeに移しました。それにあたってサーバの設定ファイルを git リポジトリで管理して linode に同期するようにしてみました。今日はそんなことをつらつらと書いてみたいと思います。
まず、なぜにサーバの設定ファイルをバージョン管理する必要があるのか、ということですが
- ファイルを任意の時点の状態に簡単に戻すことができる
- いつどんな修正をしたのか簡単に見れる
というのがメリットだと思ってます。あと、自分の場合はGitリポジトリがあるディレクトリを丸ごとバックアップ取っているので、リポジトリで管理しておくと自動的にバックアップされるというのがメリットとしてあります。色々熟考されて作られた設定ファイルは大事な財産だったりします。
Gitリポジトリの構成
僕は以下のような構成でGitリポジトリに設定ファイルを置いています。
savacan
|
`-- napoli.lampetty.net
|
`-- files
`-- etc
|-- apache2
| |-- error-document.conf
| |-- icon.conf
| |-- language.conf
| |-- log-env.conf
| `-- mod_php.conf
|-- init.d
| |-- mysql
| |-- reverse_proxy_nginx
| `-- svscan
|-- logrotate.d
| `-- reverse_proxy_nginx
|-- my.cnf
`-- nginx
|-- htpasswd
|-- mime.types
`-- reverse_proxy_nginx.conf
TOPレベルの"savacan" というのは適当につけた名前ですが(*1)、簡単に解説するとこんな感じでしょうか。
- savacan配下にサーバ毎に napoli.lampetty.net のようなディレクトリを用意
- その下の files ディレクトリに設定ファイルを置く
- 設定ファイルは実際にサーバに置くパスと同じものに
そして、この files 配下のファイルをサーバに rsync して、各ファイルの symlink を張るスクリプトを書いています。symlink を張るという形を取ることで、サーバにアップすれば最新のファイルに置き換わるのが良いところかなぁと。あと実際にサーバ上に配置するパス通りに管理しておくのもわかりやすくて気に入っています。また、おそらく様々な用途のサーバがあるような環境だと、savacan配下に作るディレクトリは"db_master","reverse_proxy" のような役割にしておいて、db_master/files 配下のファイルはマスタDBサーバにrsyncする、みたいな運用にすればいいのかなと思っています。
最近は puppet も盛り上がってますし、puppet 使えば幸せになれることも多々あると思いますが(*2)、シンプルに運用したいのであればこのぐらいでもいいのかなぁと思っています。
- *1)サーバ管理 -> 鯖管 -> savacan
- *2)ファイルの権限設定したい場合とか