こんにちわ。やや肌寒くなってきました。とおのぶです。なんとなくNginxでHttpImageFilterModuleを 使いたいなと思ってました。だけど、Nginxをソースからビルドしなくちゃいけないし、GDライブラリを インストールしなくちゃいけなくて面倒くさそうだったので億劫になってました。そんなところに 現れたのが、構成管理ツールのansibleです。python製で楽そうだったので、試してみました。
ansibleがまったくわかれなければ
わかりやすい説明を読みましょう。最初に Deploying with Vagrant and Ansible by yeukhon のスライドを見て、Ansible Tutorialをやるのが適当 だと思います。ansibleだけ使いたいのでvagrantやserverspecのところはやる必要はありません。(やった方が いいですが)
補足資料
環境
mac book airのansibleからCentOS 6.2へ操作します。
要件
- yumでGDライブラリをインストールすること
- 各バージョンごとにインストールできること(インストール先が異なる)
- わかりやすくオプションを設定できること(マルチラインで書けること)
- テンプレートからnginx.confをコピーできること
- テンプレートから自動起動スクリプトをコピーできること
- 自動起動スクリプトをサービスへ設定できること
playbookの内容
varsとtaskを要件ごとに説明します。gistに全ファイルを あげているので、こちらをざっくりみてください。
varsについて
ご覧のとおりです。srcは、ダウンロード先ですね。
vars: version: "nginx-1.5.x" src: 'DOWNLOAD_PATH' install_path: 'INSTALL_PATH'
yumでGDライブラリをインストールすること
with_itemsがリストっぽく書けるので、それをyumモジュールと組み合わせます。
- name: "be sure gd package for image_filter_module of nginx" yum: name={{ item }} state=installed with_items: - gd - gd-devel
各バージョンごとにインストールできること(インストール先が異なる), わかりやすくオプションを設定できること(マルチラインで書けること)
get_urlモジュールを使ってソースをバージョンごとにダウンロードします。ファイルがあれば、 スキップします。
- name: "get source" get_url: url=http://nginx.org/download/{{ version }}.tar.gz dest={{ src }}
ダウンロード先へcdして、tar コマンドで解凍します。ファイルがあればスキップします。
- name: "expand source" command: tar xvfz {{ version }}.tar.gz chdir={{ src }} creates={{ src }}/{{ version }}
install_pathとversionの変数を利用して、インストール先をバージョンごとで変更します。 >を使うことで、 マルチラインで書くことができます。必要になったモジュールを足せばいい状態にしておきます。マルチラインで 書く方法は、他にもある。
- name: "configure source" command: > ./configure --prefix={{ install_path }}/{{ version }} --with-http_image_filter_module --with-http_ssl_module chdir={{ src }}/{{ version }}
make
- name: "make" command: make chdir={{ src }}/{{ version }}
make install
- name: "make install" command: make install chdir={{ src }}/{{ version }
テンプレートからnginx.confをコピーできること
templateモジュールを使ってnginx.confをコピーします。
- name: "copy nginx.conf" template: src=template/nginx.conf.j2 dest={{ install_path }}/{{ version }}/conf/nginx.conf
テンプレートから自動起動スクリプトをコピーできること
templateモジュールを使ってコピーします。アクセス権も変更します。
- name: "copy nginx for init.d" template: src=template/nginx_init.j2 dest=/etc/init.d/{{ version }} mode=0755
自動起動スクリプトをサービスへ設定できること
chkconfigで登録します。
- name: "resister service " command: chkconfig --add {{ version }}
感想
エラー内容をみたい
エラー内容が通常見れません。-vvvをつけることで、詳細を見ることができます。sudoで 入力待ちになってたにもかかわらず、気付けませんでした。hangしている状態に見えていました。
suは使わない
sudoは使えますが、suは使わない。そういう思想っぽいです。
パスワード付きで処理したい
パスワード付きで実行することは少ないと思いますが、最初のrootでパスワード発行されたときに 必要です。sshpassが必要なので別途インストールする必要があります。