こんにちわ。やや肌寒くなってきました。とおのぶです。なんとなく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が必要なので別途インストールする必要があります。

« pythonの面接時の質問事項

NginxでREST認証してS3へリバースプロキシー »

blog comments powered by Disqus

Categories

Uncategorized (rss) (2) | blogofile (rss) (2) | designpettern (rss) (3) | flask (rss) (2) | fluxflex (rss) (3) | java (rss) (6) | nginx (rss) (6) | python (rss) (8) | sacloud (rss) (3) | spdy (rss) (2) | thistownneedsguns (rss) (2) | webService (rss) (2) | zabbix (rss) (3) | さくらVPS (rss) (4) | 芸術は爆発しろ (rss) (3) |