2015年4月1日水曜日

ConoHaのVPSにchefを使ってRails環境を構築する。~knife solo 準備編~


最近ConoHaのVPSで遊んでます。
安いしコンソール見やすいしいい感じ。

最終的にはRails環境を作りたいんだけどせっかくなのでChefを使ってやってみる。
ただLinuxもあまり分からないから調べることだらけ。
なんとかchef soloが通るとこまで行ったので一旦メモしておきます。

まだまだ頭の中整理できてないので変なこと書いてたら指摘お願いします。

やりたいこと

・標準テンプレートOSをインストールしたConoHaVPSに対して、
・できるだけ少ない手順で knife solo cook が通るようにする。
まずはここまで。

環境

MacBookAir 2013 Mid
OS X Yosemite 10.10.2
Chef Solo 12.1.1(どうやって入れたか覚えてない)

手順

VPSの作成

OSはテンプレートイメージの CentOS 6.5 を選択。

残りは全部安いやつ。
1〜2分待てば起動する。

ローカル側でSSH接続準備

ConoHaコントロールパネルからSSH Private Keyをダウンロードする。
1234567-1.keyみたいな名前。とりあえずホームディレクトリ(~/)に置く。
ここからローカル側Macのターミナル.appで操作

ローカル側(MacBookAir)
$ cd ~
// ~/.sshフォルダが存在しない場合はフォルダ作成
$ mkdir .ssh
$ chmod 700 .ssh/
$ mv 1234567-1.key .ssh/conoha_private_key
$ cd .ssh/
$ chmod 600 conoha_private_key 
$ vi config 
//configファイルは下記のようにして保存。すでにある場合は追記する。
Host conoha
  HostName [VPSのIP]
  IdentityFile ~/.ssh/conoha_private_key
  User root

//うまく設定できていれば下記コマンドでssh接続ができるはず。
$ ssh conoha
[root@v[xxx-xxx-xxx-xxx]] ~]# logout
Connection to xxx.xxx.xxx.xxx closed.
//成功

どうもConoHaの標準テンプレートを使うとVPS作成時に選んだ秘密鍵でrootへSSH接続できるみたい。 この鍵はVPSをホストしている共有サーバ部分への接続にも使うらしいからあまり共用しない方がいい気がするけどよくわからん。もう少し詳しくなってから考えることにする。

VPS側でChef接続用ユーザーの作成

Chefを実行するためにはSSH接続可能且つパスワードなしでsudo可能なユーザーが必要らしい。ConoHa側に専用の'chef'ユーザーを作成し、rootに設定済みの公開鍵をchefユーザーでも利用可能にする。(rootへのssh接続は後で禁止します)

ローカル側(MacBookAir)
$ ssh conoha

ここからVPSのrootユーザーでの操作

VPS側(rootユーザー)
# adduser chef
# passwd chef
ユーザー chef のパスワードを変更。
新しいパスワード: <パスワードを決めて入力>
新しいパスワードを再入力してください: <パスワードを再入力>
passwd: 全ての認証トークンが正しく更新できました。
# visudo
// 下記1行を追加(パスワードなしでsudoできるようになる)
root    ALL=(ALL)       ALL                          ←この行の下に
chef    ALL=(ALL)       NOPASSWD:ALL     ←この行を追加
// 保存して閉じる(esc -> :wq)

# mkdir /home/chef/.ssh
# cp ~/.ssh/authorized_keys /home/chef/.ssh/
# cd /home/chef/.ssh/
# ls -la
drwxr-xr-x 2 root root 4096  4月  1 00:08 2015 .
drwx------ 3 chef chef 4096  4月  1 00:08 2015 ..
-rw------- 1 root root  445  4月  1 00:08 2015 authorized_keys
# chown chef:chef authorized_keys 
# chown chef:chef .
# chmod 600 authorized_keys 
# chmod 700 .
# ls -la
drwx------ 2 chef chef 4096  4月  1 00:08 2015 .
drwx------ 3 chef chef 4096  4月  1 00:08 2015 ..
-rw------- 1 chef chef  445  4月  1 00:08 2015 authorized_keys
これでVPS側は一旦終わり。logoutで抜ける。

ローカル側(MacBookAir)
$ cd ~/.ssh/
$ vi config
//root接続用になってるところをchefに書き換える
Host conoha
  HostName [VPSのIP]
  IdentityFile ~/.ssh/conoha_private_key
  User root   ←  chefに書き換える

//これでchefユーザーでssh接続できるはず。
$ ssh conoha
[chef@vxxx-xxx-xxx-xxx ~]$ who am i
chef     pts/0        2015-04-01 00:17
[chef@vxxx-xxx-xxx-xxx ~]$ logout
Connection to xxx-xxx-xxx-xxx closed.
//成功
これでchef solo実行準備が整った。

ChefでHello World

Chef-Soloを使ってVPSにHello Worldしてみることまでやってみます。

キッチン(リポジトリ)の作成

knife solo initコマンドを使ってリポジトリ(cookbookを入れていくための箱)を作ります。

ローカル側(MacBookAir)
$ cd ~
$ knife solo init conoha-helloworld
WARNING: No knife configuration file found
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
Setting up Berkshelf...

こんな感じでファイルが生成されてるはず

Cookbookの作成

knife cookbook createコマンドを使ってクックブック(レシピを入れるための箱)を作ります。

ローカル側(MacBookAir)
$ cd ~/conoha-helloworld/
$ knife cookbook create helloworld -o site-cookbooks/

-oで指定した site-cookbooksフォルダにhelloworldクックブックが生成されました。

レシピの編集

helloworldクックブックの中にあるrecipes/default.rbを修正します。
log "Hello World!!"
これだけ。

VPSにchefをインストール

さて、レシピを作ったので実行準備。knife solo prepareコマンドを使ってvpsにchefをインストールします。

ローカル側(MacBookAir)
$ knife -v
Chef: 12.1.1
$ knife solo prepare conoha
WARNING: No knife configuration file found
Bootstrapping Chef...

//インストールログがずらずらと

Thank you for installing Chef!
Generating node config 'nodes/conoha.json'...
//インストール完了

//vps側で確認してみる。
$ ssh conoha

VPS側(chefユーザー)
[chef@vxxx-xxx-xxx-xxx ~]$ knife -v
Chef: 12.1.1
これでVPSにchefをインストールできました。

VPSにレシピを適用

knife solo prepareを行ったときに、conoha-helloworld/nodes/conoha.jsonが生成されています。
このホストに対してどのcookbookを適用するかを管理するファイル。
すでにhelloworldクックブックは作成済みなのでこれを適用するようにconoha.jsonを書き換えます。
{
  "run_list": [
    "recipe[helloworld]"          ←この1行を追加
  ],
  "automatic": {
    "ipaddress": "conoha"
  }
}
あとはcookするだけ。
knife solo cookコマンドでレシピを適用します。
ローカル側(MacBookAir)
$ cd ~/conoha-helloworld/
$ knife solo cook conoha
Running Chef on conoha...
Checking Chef version...
Installing Berkshelf cookbooks to 'cookbooks'...
Resolving cookbook dependencies...
Uploading the kitchen...
Generating solo config...
Running Chef...
Starting Chef Client, version 12.1.1
Compiling Cookbooks...
Converging 1 resources
Recipe: helloworld::default
  * log[Hello World!!] action write
  

Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 1.36169233 seconds
Hello World出ましたね!今日はここまで。
ここから先はcookbook作成→レシピ編集→conoha.jsonに追記→knife solo cook conohaの繰り返しです。
Rails環境の構築ができたらまた整理します。

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...