てきとうなさいと べぇたばん

このサイトのサーバーをAnsibleでDevOps化してDebianのバージョンアップを行いました

もんだいてん

このサイト、Debian GNU/Linuxで動いているわけだが、Debianですら、OSのアップグレードがしんどくなってきた。 また、デプロイ作業も自動化してしまいたいわけで、どうにかならんものか。

DevOps

むかしむかしってほどでもない最近、あるチームの開発と運用の人たちの間で対立がおこっておりました。開発の人たちはもっと新機能いれたい、運用の人たちはきっちりシステム守りたいという矛盾の関係が彼らを取り巻いていたのです。

そこで出てきたのがDevOps。これは変化に強くありたい、だけど運用は効率的にかつ守りたいという願いからうまれた発想なのです。

なんかまちがってたらごめん。

Chef

というわけで、プロビジョニングツールを探してすぐに見つけたのがChefである。Rubyでできていて、cookbookというレシピ書いて料理すれば、サーバーというフルコースが出来上がりますよーというもの。Chef-soloとかServerとかが出てきて、たくさんのサーバーを回すには最適なプロダクトだと思える。

しかし、さくらのvps(2015年6月22日時点)のみのこのサイトには大げさ過ぎると感じた。効率化のために入れたChefを運用しなければならないというのが、ツールに使われるような気がしてしまったため。

Ansible

Chefほど大規模なツールは必要ないが、DevOpsという思想を実現したプロダクトはないか。そんな時、Pythonで書かれたAnsibleというプロダクトに出会った。対象のサーバーに対しては、SSHとPython 2.4以降があればいいらしい。恐ろしくシンプルですね〜。

yamlで設定するplaybookと、対象となるサーバーのリストのファイルの2つが最低限あればよろしい。これは気に入りました。

セットアップ

Ansibleの使い方は、以下のサイトを参考に。

vagrantを使って、一つ一つこのサイトの設定を持ってきてはansible-playbookしてプロビジョニングする。それはまるでC言語をコンパイルしているかのよう。この方法だと、OSを壊して作りなおすことになるのだが、なんというかすごい時代になったもんだなと思ってしまう。

ディレクトリ

今のところ、以下のようにしている。

$ tree -L 2
.
├── README
├── backup_media.sh
├── base-tekitoh-memdhoi.yml
├── conf
│   ├── apache
│   ├── cron
│   ├── dovecot
│   ├── git
│   ├── iptables
│   ├── mysql
│   ├── postfix
│   ├── ssh
│   ├── ssl
│   └── tekitoh
├── data
│   ├── Maildir
│   ├── backup
│   ├── htdocs
│   └── repo
├── hosts
├── tekitoh-memdhoi.yml
└── test-server.yml

confにサーバーの設定。dataに現在存在しているサーバーのデータとしている。test-server.ymlから以下のように行えば、テスト用環境が速攻でできあがる。

$ ansible-playbook -i hosts test-server.yml

本番環境の場合、少しややこしくなってしまって、base-tekitoh-memdhoi.ymlとtekitoh-memdhoi.ymlを行う必要がある。

$ ansible-playbook -i hosts base-tekitoh-memdhoi.yml
$ ansible-playbook -i hosts tekitoh-memdhoi.yml

という感じ。

ymlの中にMySQLのパスワードをぶち込んでたりと結構豪快なことをしているので、これは公開できないけど。運用していく中で、設定を変えないといけないという場面も出てくるだろうし、その時にBest Practicesなんかも読みながら、色々と試行錯誤していこうと思う。

とりあえず、jessieになったので、ひとまずはおしまい。