PR TIMESデザイナー&エンジニアブログ BREAK TIMES

PR TIMES Developer Blog(デザイナー&エンジニアによる開発者ブログ)

PR TIMES Developer Blog

当ブログは下記URLに移転しました。
https://developers.prtimes.jp/

Chefを使ってサーバー構築運用! PR TIMES導入編!

こんにちは。PR TIMESエンジニアの落合です。
主にWEBアプリケーション開発を担当しているのですが、
最近は開発環境構築や、インフラ周りも担当しています。

前回は開発環境自動化というネタで話させてもらいましたが、
今回は、Chefで開発環境を開発したお話をさせてもらいます。

vagrantを使用する事によって、簡単に環境を共有する事は出来ますが、
Peclなどのライブラリを開発していく上で追加した場合、
毎回指示書(手順書)などを作成して情報の共有を図る必要がありました。
そこで、Chefの登場です!

Chefとは?

Chef社が開発している「インフラフレームワーク」とか「構成管理ツール」と言われるツールです。
通常サーバーを構築する場合、OSのセットアップからネットワーク設定や、ミドルウエアのインストール、各種設定やチューニングを行います。
またその際、設定手順書も同時に作成していき、複数台構築を行う事になると思います。
ChefはRubyで書かれた設定書(プログラム)に応じて、自動的に設定編集を行ってくれるツールです。
類似しているツールとして、「Puppet」があり、Chefと人気を二分しています。

簡単に一例を書いてみたいと思います。

package "httpd" do
  action :install
end
service "httpd" do
  supports :status => true, :restart => true
  action [ :enable, :restart ]
end

上記では、httpd(apache)をインストールし、サービスをスタートさせ、さらに常時起動させるといったものです。

Chefのファイル構成について

まずRubyの文法で書かれたサーバーの設定ファイルは「Recipe(レシピ)」と呼びます。
レシピを取りまとめているのを「Cookbook(クックブック)」と呼びます。
クックブックには、設定ファイルを管理するための、「Template(テンプレート)」や、
環境情報を取得して値を変更する事が出来る変数を定義する「Attribute(アトリビュート)」なども含まれています。
クックブック群やChefの実行なファイル群の事を「Repository(リポジトリ)」と呼ばれます。

Chefによるサーバー管理構成について

Chefの構成には、大きく分けて2種類の構成があります。
1台のサーバーでCookbookの作成や管理を行い、実行までを完結する方法のスタンドアロン構成と
Cookbookをサーバーで集中管理して、クライアントはサーバーからCookbookをダウンロード実行する
クライアント/サーバー構成です。
通常、クライアント/サーバー構成の場合には、Chefサーバーを構築し、
「Node」と呼ばれているクライアントにはChefクライアントをインストールする必要がある。
また、サーバーでレシピの作成も出来るが、別のマシンで行う事も可能。
また、その場合のマシンを「Workstation(ワークステーション)」と呼びます。
「knife-solo」というプラグインを使えば、Chefサーバー無しで、複数台を管理する事も出来る。

f:id:breaktimes:20140708200824p:plain

knife-soloというツール

先ほども記述したとおり、スタンドアロン構成であれば、Chefサーバーが不要ですが、
設定対象のそれぞれのサーバーにChefクライアントとクックブックを配置して管理しなければなりません。
この作業を自動化するツールがknife-soloというツールです。
knife-soloは、作業マシンで作成したCookbookなどの設定ファイルを、
対象マシンにコピーし、その後、chef-soloコマンドを実行する、という一連の作業を自動実行してくれるツールです。
設定ファイルのコピーにはrsyncが、chef-soloコマンドの実行にはsshが利用されます。
Windowsで実現するには、コマンドプロンプトには両方とも初期状態では入っていませんが、
Cygwinなどを使えば、簡単に実現する事が出来ると思います。

f:id:breaktimes:20140708200848p:plain

Windows7CygwinでChefをインストール

windowsの場合、chefはバイナリが用意されていますが、
今回は、CygwinRubyのgemを用いてインストールしたいと思います。
ちなみにgemのバージョンは以下の通り。

$ gem -v
2.2.2

それでは早速gemを使ってChefのインストールから行います。

$ gem install chef --no-ri --no-rdoc
DL is deprecated, please use Fiddle
Fetching: mixlib-config-2.1.0.gem (100%)
Successfully installed mixlib-config-2.1.0
Fetching: mixlib-cli-1.5.0.gem (100%)
Successfully installed mixlib-cli-1.5.0
・・・中略
Fetching: chef-11.12.4.gem (100%)
Successfully installed chef-11.12.4
25 gems installed

$ chef-solo --version
DL is deprecated, please use Fiddle
Chef: 11.12.4

現在の最新版chef-11.12.4がインストールされました。
次に、knife-soloもインストールしたいと思います。
こちらもgemを使ってインストールします。

$ gem install knife-solo --no-ri --no-rdoc
DL is deprecated, please use Fiddle
Fetching: knife-solo-0.4.1.gem (100%)
Thanks for installing knife-solo!

If you run into any issues please let us know at:
  https://github.com/matschaffer/knife-solo/issues

If you are upgrading knife-solo please uninstall any old versions by
running `gem clean knife-solo` to avoid any errors.

See http://bit.ly/CHEF-3255 for more information on the knife bug
that causes this.
Successfully installed knife-solo-0.4.1
1 gem installed

$ gem list | grep knife-solo
DL is deprecated, please use Fiddle
knife-solo (0.4.1)

以上で、Chefのインストールは完了となります。

PrtimesにおけるChefの活用法!

f:id:breaktimes:20140708200907p:plain
現在のPrtimesでは、現在開発環境、ステージング環境、プレビュー環境、本番環境の環境が存在しています。
それぞれ、開発環境・ステージング環境には、WEBとDBが入っており、プレビューと本番環境では、
WEBとDBで別のサーバーを使用しています。

このようにWindows上からknife-soloを実行して、本番への適応を行えるような仕組みの構築を進めています。
また、今後は自動デプロイツール等も組み合わせていけるように日々研究中です。

もっとChefについて深く話そうと思ったのですが、
長くなってきてしまったので、次回以降に持ち越したいと思います!