Windows 環境上に Vagrant と Chef を使って CentOS + Apache HTTP Server の環境をセットアップした際の手順を自分用のメモとしてまとめました。
Vagrant と Chef のインストールと操作は、PowerChef という PowerShell モジュールを作成しましたので、これを使います。
- PowerChef [https://github.com/kukita/PowerChef]
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 を選択します。
次のソフトウェアがインストールされます。
- Chocolatey [https://chocolatey.org/]
- Oracle VM VitrualBox [https://www.virtualbox.org/]
- Git for Windows [http://msysgit.github.io/]
- posh-git [https://github.com/dahlbyk/posh-git]
- Chef [http://www.getchef.com/chef/]
- serverspec [http://serverspec.org/]
- Bento [https://github.com/opscode/bento]
- em-winrm [https://github.com/opscode/em-winrm]
- Oracle Java Runtime [http://java.com/en/download/]
- Vagrant [http://www.vagrantup.com/]
- 7-Zip [http://www.7-zip.org/]
- CwRsync [https://www.itefix.no/i2/cwrsync]
- Berkshelf [http://berkshelf.com/]
手順 2-3: Open-HomeVagrantfile
ファンクションを使って、Vagrant ホームディレクトリの Vagrantfile
を編集します
PS> Open-HomeVagrantfile
→ 仮想化支援機能の有無等ホストマシンのスペックに合わせてファイルを編集しファイルを閉じます。
3: クックブックの作成
コミュニティに公開されているクックブック apache2
と chef-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 が実行されエラーが出力されなければ成功です。
以上