LoginSignup
9

More than 5 years have passed since last update.

【#Chef】Windows 環境上に Vagrant と Chef を使って CentOS + Apache HTTP Server の環境をセットアップ #Vagrant #GetChef_ja

Last updated at Posted at 2014-06-22

Windows 環境上に Vagrant と Chef を使って CentOS + Apache HTTP Server の環境をセットアップした際の手順を自分用のメモとしてまとめました。

Vagrant と Chef のインストールと操作は、PowerChef という PowerShell モジュールを作成しましたので、これを使います。

1: PowerChef モジュールのインストール

まず、PowerChef モジュールをローカルマシンにダウンロードします。

手順 1-1: 'Windows PowerShell' を起動します

スタートメニューから 'Windows PowerShell' を起動します

手順 1-2: PowerShellスクリプトの実行セキュリティ・ポリシーを RemoteSigned に変更します

PS> Set-ExecutionPolicy RemoteSigned
PS> Get-ExecutionPolicy
RemoteSigned

→ RemoteSigned と表示されることを確かめます。

手順 1-3: インストールスクリプト(install.ps1)を使って、GitHub上からモジュールをダウンロードします

PS> Invoke-Expression (New-Object System.Net.WebClient).DownloadString("https://raw.github.com/kukita/PowerChef/master/install.ps1")

→ Installation of 'PowerChef' has finished successfully. と表示されれば成功です。

2: WorkStation 環境のセットアップ

次に、ローカルマシンを Chef の WorkStation 環境としてセットアップします。

手順 2-1: PowerChef モジュールをインポートします

PS> Import-Module "PowerChef"
PS> Get-Module
ModuleType Version    Name
---------- -------    ----
Manifest   3.1.0.0    Microsoft.PowerShell.Management
Manifest   3.1.0.0    Microsoft.PowerShell.Utility
Manifest   0.5.0      PowerChef

→ PowerChef が表示されていることを確かめます。

手順 2-2: SetUp-ChefWorkstation ファンクションを使って、ローカルマシンを WorkStation 環境としてセットアップします

PS> SetUp-ChefWorkstation -PowerChefHomePath "D:\PowerChef"
※30分くらいかかります。最後にWinRMのセキュリティ設定に関して聞かれるので [Y]Yes を選択します。

次のソフトウェアがインストールされます。

手順 2-3: Open-HomeVagrantfile ファンクションを使って、Vagrant ホームディレクトリの Vagrantfile を編集します

PS> Open-HomeVagrantfile

→ 仮想化支援機能の有無等ホストマシンのスペックに合わせてファイルを編集しファイルを閉じます。

3: クックブックの作成

コミュニティに公開されているクックブック apache2chef-client をラップしただけの簡単なクックブック role-as-webserver を作成します。

手順 3-1: New-ChefRepo ファンクションを使って、"SampleRepo" という名前のリポジトリを作成します

PS> New-ChefRepo "SampleRepo"
PS> Show-ChefRepoList
Name        CreationTime        LastWriteTime       LastAccessTime
----        ------------        --------------      -------------
SampleRepo  2014/XX/XX XX:XX:XX 2014/XX/XX XX:XX:XX 2014/XX/XX XX:XX:XX

→ SampleRepo が表示されることを確かめます。

手順 3-2: Get-ChefRepoPath ファンクションを使って、作成した chef-repo のパスを取得しカレントディレクトリを移動します

PS> Get-ChefRepoPath "SampleRepo" | Set-Location
PS> pwd
Path
----
D:\PowerChef\chef-repositories\SampleRepo\chef-repo

→ D:\PowerChef\chef-repositories\SampleRepo\chef-repo と表示されることを確かめます。

手順 3-3: New-Cookbook ファンクションを使って、"role-as-webserver" という名前のクックブックを作成します

PS> New-Cookbook "role-as-webserver"
Maintainer: xxxxxxx xxxxxx ←作成者(メンテナー)の名前を入力します。
MainteinerEmail: xxxxxxxx@xxxxxx.xx ←作成者(メンテナー)のメールアドレスを入力します。
PS> Show-CookbookList
Name              Parent         CreationTime        LastWriteTime       LastAccessTime
----              ------         ------------        --------------      -------------
role-as-webserver site-cookbooks 2014/xx/xx xx:xx:xx 2014/xx/xx xx:xx:xx 2014/xx/xx xx:xx:xx

→ role-as-webserver が表示されることを確かめます。

手順 3-4: Open-CookbookMetadata ファンクションを使って、クックブックのメタデータ(metadata.rb)を編集します

PS> Open-CookbookMetadata "role-as-webserver"

次のように編集しファイルを閉じます。

name             'role-as-webserver'
maintainer       'xxxxxxx xxxxxx'
maintainer_email 'xxxxxxxx@xxxxxx.xx'
license          'Apache 2.0'
description      'This is a cookbook of the role as web server.' ←編集
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version          '0.1.0'
depends          'apache2'     ←追記
depends          'chef-client' ←追記

手順 3-5: Open-CookbookRecipe ファンクションを使って、クックブックのデフォルトレシピ(default.rb)を編集します

PS> Open-CookbookRecipe "role-as-webserver"

行末に次の2行を追記しファイルを閉じます。

include_recipe "apache2::default"     ←追記
include_recipe "chef-client::default" ←追記

4: クックブックのアップロード

Chef Zero(インメモリー版軽量 Chef Server)を起動し、作成したクックブックをアップロードします。

手順 4-1: Start-ChefZero ファンクションを使って、ローカルマシン上にChef Zero(インメモリー版軽量 Chef Server)を起動します。

PS> Start-ChefZero
PS> & NETSTAT.EXE -anb | Select-String "8889"

→ ポート 8889 番の状態が LISTENING であることを確かめます。

手順 4-2: New-ChefZeroACL ファンクションを使って、Windows ファイアウォールの設定を行います(Windows 8、Windows Server 2012 以降の環境のみ)

PS> New-ChefZeroACL

手順 4-3: Update-Cookbook ファンクションを使って、依存関係のあるクックブックをダウンロードし Chef Zero にアップロードします

PS> Update-Cookbook "role-as-webserver"
PS> & knife.bat cookbook list

→ クックブックの一覧が表示されれば成功です。

5: Node の作成とセットアップ

Vagrant を使って CentOS がインストールされた仮想マシンを作成し Chef の Node 環境としてセットアップします。

手順 5-1: CentOS の Box を登録します

PS> & vagrant.exe box add "opscode-centos-6.5" "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box"
PS> & vagrant.exe box list
opscode-centos-6.5 (virtualbox, 0)

→ "opscode-centos-6.5" という名前の Box が追加されたことを確かめます。

手順 5-2: New-ChefNode ファンクションを使って、Node 環境の定義ファイルを作成します

PS> New-ChefNode -BoxName "opscode-centos-6.5" -OSType "Linux" -VMNumber 20 -NodeNamePrefix "WebServer"
PS> Show-ChefNodeList

→ "WebServer-192-168-56-20" という名前の Node が作成されたことを確かめます。

手順 5-3: Open-ChefNodeVagrantfile ファンクションを使って、Vagrantfile を編集します

PS> Open-ChefNodeVagrantfile "WebServer-192-168-56-20"

→ ここでは、Vagrantfile が作成されていることを確認し、そのままファイルを閉じます。

手順 5-4: Create-ChefNode ファンクションを使って、仮想マシン(VirtualBox のゲスト OS)を作成します

PS> Create-ChefNode "WebServer-192-168-56-20"
PS> Show-ChefNodeStatus "WebServer-192-168-56-20"

手順 5-5: SetUp-ChefNode ファンクションを使って、作成した仮想マシンを Node 環境としてセットアップします

PS> SetUp-ChefNode "WebServer-192-168-56-20"

手順 5-6: knife コマンドを使って、Chef Zero サーバー上に Node として登録されたことを確認します

PS> & knife.bat node list

WebServer-192-168-56-20

→ WebServer-192-168-56-20 が表示されれば成功です。

6: クックブックの適用

作成したクックブックを Node 環境に適用します。

手順 6-1: knife コマンドを使って run_list に作成したクックブックを追加します

PS> & knife.bat node run_list add "WebServer-192-168-56-20" "role-as-webserver::default"
PS> & knife.bat node show "WebServer-192-168-56-20"

手順 6-2: Environment の設定ファイル development.json を作成します

PS> New-Item -Path ".\environments\development.json" -ItemType "File" -Value @'
{
  "name": "development",
  "json_class": "Chef::Environment",
  "chef_type": "environment",
  "default_attributes": {
    "apache2": {
      "worker": {
        "startservers": 4,
        "serverlimit": 16,
        "maxclients": 1024,
        "minsparethreads": 64,
        "maxsparethreads": 192,
        "threadsperchild": 64,
        "maxrequestsperchild": 0
      }
    }
  }
}
'@

手順 6-3: knife コマンドを使って、 Environment を設定します

PS> & knife.bat environment create from file ".\environments\development.json"

手順 6-4: Converge-ChefNode ファンクションを使って、クックブックを Node に適用します(Node 上で chef-client を実行します)

PS> Converge-ChefNode "WebServer-192-168-56-20"

→ Node 上で chef-client が実行されエラーが出力されなければ成功です。

以上

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9