読者です 読者をやめる 読者になる 読者になる

TakayukiKoyama Geek Blog

Create, Entertain, Experience

Chefでサーバを構築する方法 入門編 [httpd,php,mysqlを一発で入れる]

サーバ構築 Chef

 2013年ぐらいからDevOpsのキーワードと共に話題になっているインフラ自動化フレームワークのChefを使い始めました。

『Chef』のざっくりとした概要

 従来(というか今でも)、サーバを構築すると言えば、サーバを立ち上げて、SSHでログインして、ApachePHPMySQLなどのミドルウェアをインストールして、ユーザアカウントやネットワーク環境設定を行うことが一般的かと思います。

 最近では、『Infrastructure as Code』という概念が登場し、上記のサーバ構築をコードで記述して、自動的に実行させようというやり方が注目され始めました。メリットとしては、一度コードを書いてしまえば、一度完成した『サーバの状態』を他のサーバにも適用することができたり、手作業が必要なくなるので人為的なミスが減るなどが挙げられます。

 『Infrastructure as Code』のフレームワークとして『Chef』や『Puppet』、『Ansible』、『Salt』などがありますが、今回は『Chef』について簡単に書いておこうと思います。『Chef』はRubyの文法でサーバを構築することができます。

Chefの用語

ワークステーション  Chefコードを書くPC(MacOSXWindows,Linux) ・ノード  Chefで書いたコードを実行するサーバ ・リポジトリ  Chefのコードをまとめたディレクトリ ・レシピ  Chefのコード

・Chef Server/Client と Chef Solo  Chefには2種類の使い方があります。Server/Clientは中央管理するサーバと設定を配布するクライアントを構築する方法で、Soloは1つのサーバだけを構築する方法です。小規模なサーバ構築であればSoloを使うのが一般的です。

Chef Solo、Knife Soloのインストール

 ワークステーションのChefをインストールします。gemがインストールされていることを前提とします。

$ gem install chef

 次にChefを便利に使えるプラグインのknife-soloをインストールします。(Chefとまとめてインストールしても構いません)

$ gem install knife-solo

 Knifeをインストールしたら、コマンドを使うために設定をしておく必要があります。

$ knife configure

 y/nに関してはy、他はデフォルトのままEnterで問題ありません。

Chefのリポジトリ作成

 まず、Chefのリポジトリを作成します。

$ cd 対象ディレクトリ
$ knife solo init [リポジトリ名:chef-repo]

 作成したリポジトリ名と同じディレクトリが生成されていると思います。ディレクトリの中で最初に知っておいたほうが良いのが『nodes』と『site-cookbooks』ディレクトリです。『nodes』はコードを実行するサーバにどのクックブックを使うかを書いていきます。『site-cookbooks』はサーバ構築のためのクックブックやレシピを入れていきます。

ノードの設定

 ノード(構築するサーバ)にChefを入れて、Chefのコードが動くようにします。

$ knife solo prepare <ユーザ名>@<IPアドレス、ドメイン>

 これでnodesディレクトリにノードの情報がJson形式でファイル生成されました。

簡単なクックブックを書いてみる

 まず、クックブックの初期設定を行います。

$ knife cookbook create [クックブック名:test] -o site-cookbooks/

 site-cookbooksディレクトリ上にクックブックが生成されます。testディレクトリの中にディレクトリがたくさん生成されていますが、最初は『recipes』ディレクトリのdefault.rbを使います。

 default.rbに以下のような記述をしてみます。

#
# Cookbook Name:: apiserver
# Recipe:: default
#
# Copyright 2015, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
#log "Hello World!"

package "vim-enhanced" do
  action :install
end

%w{php mysql-server httpd}.each do |p|
  package p do
    action :install
  end
end

service "httpd" do
  action [:start, :enable]
end

 上記のように記述すると、vimphpmysqlapacheがインストールされて、『httpd』の『start』でサービスが立ち上がり、『enable』でchkconfigがonになります。

ノードに反映させる

 クックブックを作成したら、ノードに反映させましょう。

$ knife solo cook <ユーザ名>@<IPアドレス、ドメイン>

 これで、クックブックに書かれたサーバ構築手順が実行されます。

ちなみに

 実際にVPSなどのサーバへ反映させるときは上記の方法で問題無いと思いますが、テスト環境を作りたいときは、定番のVirtualBox+Vagrantを使うべきでしょう。テスト環境の作り方や詳しいChefの使い方は下記の参考文献が分かりやすいのでオススメです。

参考

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef入門 (全14回) - プログラミングならドットインストール