このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

Vagrant + Chef Solo の基本的な使い方(設定方法)

tool

2013.11.18

この記事は最終更新日から1年以上が経過しています。

前回、

VirtualBoxとVagrantで開発環境を構築

VirtualBoxとVagrantで開発環境を構築 その2 PHP + MySQLインストール

VirtualBoxとVagrantで開発環境を構築 その3 phpMyAdmin インストール centOS apache設定

と、Vagrant の設定を行ってきましたが、なんせこれを毎回行うとなると、非常に大変なことだと思います。

そんな構築を楽に行う為にChefを使っていきます。

Chef

Chefは、ファイルに記述した設定内容に応じて自動的にユーザーの作成やパッケージのインストール、設定ファイルの編集などを行うツールで、OPSCODEが開発しております。

OPSCODE

http://docs.opscode.com

Chef

http://www.opscode.com/chef/

そもそもChefってなんなの?ってことなんですが、

全体像はこちらのページに記載されているかと思いますが、

http://docs.opscode.com/chef_quick_overview.html

・WORKSTATION

・CHEF SERVER

・NODES

と大きく3つに分かれており、WORKSTATION(使っている PC)で設定したcpplbooksをknifeコマンドを用いて、CHEF SERVERに送られ、送られてきた情報を元にNODESに反映させる。といった流れになります。

今回は、ローカルでVagrant等で環境を構築した場合の設定で、・WORKSTATION ⇔ ・NODES のやり取りとなります。

Chef インストール

では早速、 Chef をインストールしていきましょう。

Chef を使うには ruby gem が必要となりますので、導入されていない場合はインストールしましょう。

バージョンの確認はそれぞれ、

ruby -v
gem -v

で確認できます。

公式サイト

Workstation Setup

https://learnchef.opscode.com/quickstart/workstation-setup

のページに記載されているコマンドを実行し、インストールしていきます。

それぞれの環境にあったコマンドを選択します。

macの場合は、

curl -L https://www.opscode.com/chef/install.sh | sudo bash

となります。

ちょっと時間がかかりますので、しばらく待ちましょう。

インストール完了しましたら、knife-soloをインストールしましょう。

knife-soloはknifeのプラグインで、knifeのサブコマンドを使用出来るようになります。

sudo gem install knife-solo 

ここで当方はエラーが出てしまいました。お、おうぅ。

ERROR: Failed to build gem native extension.
You have not agreed to the Xcode license agreements

どうやらxcodeがうまくいっていない的な。。どうもXcodeをしばらく起ち上げていなかったわけで起ち上げ、規約書に同意して再度コマンドを打ちなおしたらいけました。よかった。

ここまでインストールし、gem listで確認すると、

gem list

なんやかんや落ちてきたのが入っているのが確認出来るかと思います。

インストールできましたら、knife configureでKnifeコマンドの設定を行います。

knife configure

基本、デフォルトで問題ないかと思いますので、リターンの連打を行います。

NODE 設定

続いてはNODEの方の設定を行っていきます。

NODEはVagrant + VirtualBoxとなりますので、インストールしていない方は、

VirtualBoxとVagrantで開発環境を構築

等を参考にしていただければと。

Vagrant の初期化を行い、Vagrantfileを作成します。

ディレクトリは、プロジェクトの(利用する)ディレクトリとなります。

今回はtest/vagrant/ 内に作ってみました。

vagrant init centos64

初期化のコマンドで Vagrantfileが出来るかと思いますので、Vagrantfileの26行目

# config.vm.network :private_network, ip: "192.168.33.10"

config.vm.network :private_network, ip: "192.168.33.10"

コメントを外します。

また、ローカルipでアクセスする際は、Vagrantfileの22行目

# config.vm.network :forwarded_port, guest: 80, host: 8080

config.vm.network :forwarded_port, guest: 80, host: 8080

こちらもコメントアウト外すと良いかと思います。

例のコマンド vagrant up で起動するのを確認しましょう。

vagrant up

問題なく立ち上がればOKです。

SSH設定

vagrant にSSHで接続する際は、

vagrant ssh

で接続できるのですが、knifeコマンドから扱いやすくするためSSHの設定を行いましょう。

vagrant ssh-config --host [sshエイリアス名] 

で作成し、

vagrant ssh-config --host [sshエイリアス名] >> ~/.ssh/config

で反映させます。

今回、hogegeで作成したので

ssh hogege

のコマンドでvagrantにアクセス出来るようになります。

Chefリポジトリ(Cookbook)作成

Chefリポジトリ作成のコマンドは

knife solo init [リポジトリ名]

となります。

今回は test/ 直下にchef-repo というレポジトリ名で作ってみました。

knife solo init chef-repo

とすると、

と、ディレクトリが作成されるかと思います。

ここで主に使うのは「site-cookbooks」「nodes」となります。

ここまで行いましたら、先ほどのレポジトリ直下へ移動し、

cd chef-repo/ 

Vagrant(node)の方に反映させていきます。

knife solo prepare [sshエイリアス名]

hogegeと設定しましたので、

knife solo prepare hogege

となります。

処理完了後、反映されたことになります。

cookbook作成

それでは、cookbookを作っていきます。

作業はレポジトリ直下です。

cd chef-repo/ 

knifeコマンド cookbook createで、cookbookを作成します。

-o で出力先ですが、制作設定ファイルの格納先である site-cookbook/に指定。

knife cookbook create [cookbook名] -o site-cookbooks/ 

なにはともあれ、まずは、Hello Worldではないかと。。。 knife cookbook create hello で作ってみました。

すると、このような感じで、ファイルが出来るのでこのディレクトリの「recipes」以下にある 「default.rb」を扱っていきます。

default.rb

log "Hello World"

を追記します。

このままでは反映されませんので、レポジトリ作成時に出来た

chef-repo/nodes/ [SSHエイリアス名].json

を修正します。今回は、

chef-repo/nodes/hogege.json

となります。

{
  "run_list":[
      "recipe[hello]"
  ]
}

このように runlistに先程のhelloを実行するに編集します。

このようにファイル作成しましたら、knifeコマンドで反映させていきます。

knife solo cook [SSHエイリアス名]

で反映することができます。

hogegeで作っていますので、

knife solo cook hogege

となります。実行すると、

とlogが出力されていて成功したのが確認できます。

package インストール

と、Hello Worldと言っていてもしかたないので packageでインストールを行っていきましょう。

流れは上記と同じです。

packageによるvim のインストール

package "vim-enhanced" do
   action :install
end

serviceによる iptablesの指定

service "iptables" do
    action [:stop, :disable]
end

と、いままでコマンド叩いていたのがファイル形式で指定することが出来ます。

では、PHP、MySQL等一通りインストールしましょう。

default.rb

service "iptables" do
    action [:stop, :disable]
end

%w{php php-common php-mbstring php-xml php-devel php-process php-cli php-pear php-mysql mysql-server httpd}.each do |p|
    package p do
        action :install
    end
end

# apacheの起動 CentOSの場合
service "httpd" do
    action [:start, :enable]
end
 
template "/var/www/html/index.html" do
    source "index.html.erb"
    mode 0644
end

と、手作業で行っていたのを一括で完了することが出来ます。

rubyが使えますので、 インストール対象を配列に格納して行うことも可能です。

knife solo cook [SSHエイリアス名]

で反映すると、ワサーっと入ってくるかと思います。

インストールした後、実行するとUPDATEの確認となりますのでご心配なく。

template

さらーと、

template "/var/www/html/index.html" do
    source "index.html.erb"
    mode 0644
end

と記述していたのですが、templateファイルとして扱うことも可能で、変数を渡すことも可能となっております。

template “/var/www/html/index.html”vagrantのパスとなります。

source “index.html.erb”cookbook内の対象ファイル

テンプレート格納先のディレクトリは

site-cookbooks/cookbook名/templates/default

となります。

試しに、

ああああああと書いた(適当ですみません。)

index.html.erbファイル

templateの格納先に格納し、ブラウザ(192.168.33.10)で確認。

上手くいきました。

また、更にテンプレートファイルに変数を渡すことも可能となっております。

変数の受け渡し

先程の「nodes」内のJSONファイルの、今回でいうところ「hogege.json」に記入して

変数の受け渡しを行う方法です。

hogege.json

{ 
  "user": {
    "name": "webcyou!"
  },
  "run_list":[
    "recipe[hello]"
  ]
}

テンプレート先 ファイル

index.html.erb

<html>
<p>Hello!! <%= node['user']['name'] %> </p>
</html>

と、このように修正しました。

これを反映させると、

出来てるー!

httd.conf テンプレート化

更に、webサーバーの設定ファイルである、httd.confをテンプレート化していきます。

ssh [SSHエイリアス名] で、SSH接続し、httd.confをローカルの方へと持ってきます。

httd.confは以下に格納されております。

サーバー設定ファイル

/etc/httpd/conf/httpd.conf

これをコピーしてきます。

cp /etc/httpd/conf/httpd.conf /vagrant

すると、ローカルにも反映されますので、これをsite-cookbooks/cookbook名/templates/default にコピーして、拡張子をerbに変換。

site-cookbooks/cookbook名/recipes/default.rb

template "httpd.conf" do
    path "/etc/httpd/conf/httpd.conf"
    source "httpd.conf.erb"
    mode 0644
end

上記を追加後、nodeに反映。

knife solo cook [SSHエイリアス名]

これでテンプレート化完成。

直接扱うなり、jsonで設定した値を受け渡したりして設定を変更することが可能となります。

notifies

先ほど、webサーバーの設定ファイルである、httpd.confをテンプレート化したのですが、編集した際 Apacheの再起動が必要となります。

これを、手動で行うのではなく、ファイルが修正された際に行う様にしたい場合に notifies を利用します。

先ほどのrecipes/default.rb のhttpd.confの部分に以下を追記します。

notifies :restart, 'service[httpd]'

を追記。

template "httpd.conf" do
    path "/etc/httpd/conf/httpd.conf"
    source "httpd.conf.erb"
    mode 0644
    notifies :restart, 'service[httpd]'
end

これで、ファイルの変更があった際、Apacheの再起動が自動で行われます。

(httpd.conf変更後、knife solo cook [SSHエイリアス名]で反映)

その他

その他、公式ドキュメントである、

Resources and Providers Reference

http://docs.opscode.com/chef/resources.html

で、行えることが確認できます。

いやー色々とありますねー。

ではでは。

Comment

Related Article

NordVPNを使ってみた感想は?評判や口コミを徹底的に解説

2022.07.26

誰でも簡単に「ホームページ制作」が行える。というWix のサービスが進化しているという事で、あれから久しぶりに触ってみた!

2022.04.12

Macで簡単画面録画「EaseUS RecExperts for Mac」を使ってみた。

2022.01.15

単一ファイル毎に管理できる ファイルマネージャー CLI「coppeno」 v0.7.2リリース!

2021.11.20

Macのデータ復旧を簡単に! EaseUS Data Recovery Wizard for Mac Pro を使用してみた。

2021.08.24

パーティション管理ソフト「MiniTool Partition Wizard」を使ってみた。

2021.08.18

このコロナ禍で、飛沫感染防止など求められる中「電子メモパッド」が重宝。 1300円で購入可能な電子メモパッドが超絶便利な件。

2020.06.02

クローンソフトの「EaseUS Disk Copy」を使って、OSのバックアップを取ってみた。

2019.05.06

Jenkins 認証情報「Jenkinsマスター上の~/.sshから」が表示しない

2018.11.17

CPU使用しすぎて、Conohaからサーバーシャットダウンされた件。

2018.03.28

CATEGORY LIST

LATEST NEWS

【Unity x WebAssembly】UnityコンテンツをBlazorとFlutterでWebアプリとして扱う

Unity

2023.01.30

【nasne】M1 Mac Miniで、「torne® mobile」使用して、テレビ視聴。

mac

2022.12.31

2022 VIVA JS World Cup 開幕!! 〜 Vue3で作るサッカーゲーム 〜

JavaScript

2022.12.24

M1 Mac ruby rbenv install error

Ruby

2022.10.10

【Flutter】CheckboxListTileのチェックボックスをカスタマイズ

Flutter

2022.10.01

FLEXISPOT E3で作るスタンディング PCデスク

イベント

2022.09.18

NordVPNを使ってみた感想は?評判や口コミを徹底的に解説

tool

2022.07.26

Ubuntu 20.04 LTS サーバ構築 - DKIM、DMARCを設定する

ubuntu

2022.05.01

Ubuntu 20.04 LTS サーバ構築 - Postfix Let’s EncryptでTLS化

ubuntu

2022.05.01

Ubuntu 20.04 LTS サーバ構築 - Postfix SASL認証

ubuntu

2022.05.01

Ubuntu 20.04 LTS サーバ構築 - Dovecotインストール

ubuntu

2022.05.01

Ubuntu 20.04 LTS サーバ構築 - Postfixインストール

ubuntu

2022.05.01

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US