2014年度 総会 開催

■開催日時 2014年5月17日(土) 13:00~17:00

■場所   クロスパルにいがた

■勉強会  Rails勉強会 ・ NPO会計システム
      講師:板垣 
         株式会社イーリープ 代表取締役社長 尾崎 重信氏

■総会

■懇親会  御米屋にて
2014-05-17 18.12.52

Rubyでサーバ設定を自動化! Chef Soloを試そう!第4回

前回はファイアウォールの設定が必要だというところで終わりましたが、ファイアウォールであるiptablesの操作を行うcookbookも提供されています。これも、cookbooksディレクトリにダウンロード展開します。


cookbooks$git clone git://github.com/opscode-cookbooks/iptables.git

このcookbookは/etc/iptables.dに設定用のファイルをコピーし、その後そのファイルを使ってiptablesを設定します。

既定では確立済みのセッションを許可するall_established.erbというテンプレートと、ICMPプロトコルを許可するall_icmp.erbだけが設定されます。HTTPを許可するためには下記のファイルを用意します。

cookbooks/main/templates/default/http.erb


# Port 80 for http
-A FWR -p tcp -m tcp --dport 80 -j ACCEPT

ただ、これではSSHによる接続もできなくなるので、これを許可するテンプレートも用意します。

cookbooks/main/templates/default/ssh.erb


# Port 22 for ssh
-A FWR -p tcp -m tcp --dport 22 -j ACCEPT

つぎに、cookbooks/main/recipes/default.rbに、iptablesのレシピと、上記の2つのファイルを設定するためのメソッド呼び出しを追加します。

cookbooks/main/recipes/default.rb


include_recipe "selinux::permissive"
include_recipe "apache2"
include_recipe "iptables"
iptables_rule "ssh"
iptables_rule "http"

これでrsyncとsshによるchef-solo実行を行えば、http://192.168.1.1/でApacheのでファオルトページが表示されるはずです。

Rubyでサーバ設定を自動化! Chef Soloを試そう!第3回

さて、これまですべて自作でApacheのインストールと起動設定を行いましたが、実はたくさんの方が使っている製品の場合、他の方が既にCookbookやレシピを公開している事が多いのです。たとえばChefの主要開発元であるOpscodeのコミュニティページには、主要なオープンソースプロダクトのCookbookが列挙されています。

http://community.opscode.com/cookbooks

Apacheについてもapache2の名前で各種のLinuxディストリビューションやAmazon EC2、FreeBSDに対応したCookbookが登録されています。

CentOSなどRedHat系OSの場合、Apacheの設定ファイルはhttp.confの大きなファイルが使われていますが、このファイルを編集して使用するのは自動化にとっては頭の痛い問題です。そこで、apache2のCookbookではDebianスタイルの設定ファイルを採用しています。つまり、サイトやモジュールごとに設定ファイルを分け、シンボリックリンクを使ってロードする方式です。

apache2のCookbookをダウンロードし、ローカルのcookbooksディレクトリに展開します。gitが使える場合には下記のコマンドでダウンロードと展開ができます。

cookbooks$git clone git://github.com/opscode-cookbooks/apache2.git

main/recipes/default.rbはこのapache2のレシピを呼び出すことになるので、下記のように書き換えます。

include_recipe "apache2"

編集後に

client$ rsync -r . root@192.168.1.1:/var/chef
client$ ssh root@192.168.1.1 "chef-solo -c /var/chef/solo.rb"

を実行すると、下記のようなエラーが発生しました。


[apache2] (apache2::default line 219) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of /sbin/service httpd start ----
STDOUT: httpd を起動中: [失敗]
STDERR: httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: Permission denied
---- End output of /sbin/service httpd start ----

/etc/httpd/conf/httpd.confの読み取り権限がないというメッセージですが、パーミッションは0644となっており読み取りできるはずということで調べてみると、centOSでデフォルトで有効になっているselinuxが原因のようです。

自分で解除してもよいのですが、opscode-cookbooks/selinuxが用意されているので、これも使うことにします。

cookbooks$git clone git://github.com/opscode-cookbooks/selinux.git

main/recipes/default.rbに呼び出しを書き加えます。

include_recipe "selinux::permissive"
include_recipe "apache2"

更新後chef-soloを実行すると、今度はエラーは出なくなり、httpdが無事起動されました。

ただ、http://192.168.1.1/を参照してみると接続出来ませんね。調べてみるとデフォルトでファイアウォールが有効になっているためブロックされているようです。
ファイアウォールの設定も自動化したいところですが、それは次回ということで。

クラウドを使ってみた。第1回 — Sakura VPS その2 –

1. VPSの初期化

それでは実際の作業に入ります。今回は、まずVM の初期化から。今回は、多少手が加わったVPSを引き渡してもらったので、いったん初期化してから構築することとしました。
新規で申し込まれる方は、こちらから。
<http://vps.sakura.ad.jp/>
なお、sakuraの回し者ではありませんので念のため。

初期化にはまず次の URL にアクセスします。
<https://secure.sakura.ad.jp/vpscontrol/>
VPS コントロールパネル

IP アドレス、パスワードには、Sakura から送られてくる登録完了メールに記載されたIP アドレスとパスワードを入力します。
そこで表示される VPS コントロールパネルから仮想マシンをコントロールします。
VPS コントロールパネル
左側のメニューから「OS再インストール」を選択します。
OS 再インストール
OS は特に変更する必要もないので、標準の CentOS 6.2 x86_64 を選択。カスタムOSインストールを選択すると、CentOS 以外でもUbuntu、 Scientific Linux (最近人気があるらしいRedHat互換 OS)、FreeBSD、Debian、Fedoraが選択できます。ただし、カスタムインストールは、インストール作業を自分でやらなければならないとのことで、少し敷居が高いです。 また、「ISO イメージインストール」を選択すると、自分でアップロードしたISOイメージからインストールできるので、メニューから選択できないOS でもインストールできます。
パーティションの設定も標準のままとします。
当然といえば当然ですが、root パスワードを要求されますので入力。お約束ですが、すべてのデータが失われるのでバックアップをとっておくように、との注意書きもあります。
数分でインストールが終了します。

OSが初期インストール状態になりましたので、ここから設定を開始します。

実際の設定は、また次回以降。

クラウドを使ってみた。第1回 — Sakura VPS その1 –

今回のこの「クラウドを使ってみた」という企画を発案したのは、私。当然のこととして、「言い出しっぺの法則」が適用されて担当になることになりました。

実際に「使ってみる」前に、クラウドについてちょっと調べてみました。

クラウドの形態としては、次のような分類がありますね。

SaaS
インターネット経由のソフトウェアパッケージの提供。一般の人々が触れることの多いクラウドの形態と思います。GMailとかストレージサービスとかですね。今までの私の使ってきたサービスです。
PaaS
インターネット経由のアプリケーション実行用のプラットフォームの提供。仮想化されたアプリケーションサーバやデータベースなど。ユーザーが自分のアプリケーションを配置して運用できる。セールスフォース・ドットコムのForce.comプラットフォーム、GoogleのGoogle App Engine、AppScale、マイクロソフトのWindows Azure、Amazon.comのAmazon S3やAmazon DynamoDBやAmazon SimpleDBなど。
HaaSまたはIaaS
インターネット経由のハードウェアやインフラの提供。サーバー仮想化やデスクトップ仮想化や共有ディスクなど。ユーザーが自分でOSなどを含めてシステム導入・構築できる。Amazon.comのAmazon EC2など。

「クラウドを使ってみた。」第1回は、まず HaaS または IaaS に分類されるであろうSakura VPS から始めます。

次のような内容でセットアップします。(セットアップは Kさんにご指導いただきました。ありがとうございます。)

1. VPS の初期化
2. Apache のインストール
3. Webmin のインストール
4. PostgreSQLのインストール
5. PHP のインストール
6. phpPgAdmin のインストール
7. postfix のインストール
8. dovecotのインストール
9. ClamAV のインストール
10. Fail2Ban のインストール
11. WordPress のインストール(MySQL、phpMyAdmin も含む)

実際のインストールは、次回から。

Rubyでサーバ設定を自動化! Chef Soloを試そう!第2回

前回は、chef-soloを使ってapache(httpd)をインストールしましたが、CentOSなどRedHat系では、サービス登録がされないので起動の設定をする必要があります。

chef/cookbooks/main/recipes/default.rb に下記の追加を行います。

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

これで、サービス登録がされ、httpdが起動されます。

ところで、いちいちサーバーにログインしてファイルを編集するのは面倒ですし、複数のサーバーに同じ設定をしようとするとさらに大変です。そこで、rsyncを利用してファイルを同期させる事にしましょう。

まず、サーバーにsshdをインストールし、root でリモートログインできるようにしておきます。

sshでリモートログインできるようになったら、scpを使ってサーバー上のchef関連のファイルをローカルクライアントにコピーしましょう。ここではサーバーのIPアドレスを192.168.1.1と仮定します。

client$ scp root@192.168.1.1:/var/chef .

パスワードが要求されるので入力します。サーバー上のchefディレクトリがカレントディレクトリにコピーされます。今後はクライアント側のファイルを編集した後、下記の通りrsyncコマンドでサーバーに同期させます。

client$ rsync -r . root@192.168.1.1:/var/chef

こちらもパスワード入力が求められます。ファイル同期が終わったら、後は下記のコマンドでサーバー上でchef-soloを実行します。

client$ ssh root@192.168.1.1 "chef-solo -c /var/chef/solo.rb"

言い忘れましたが、上記はクライアントがLinuxまたはMac OS Xの場合です。Windowsの場合には下記の記事などを参考にすれば良いかと思います。(すいません。ためしてません)

Windowsユーザもrsyncでファイルをアップしよう

クラウドを使ってみた。第0回

新潟オープンソース協会の活動の一環で、クラウド環境を使ってみて、比較記事を書くことになりました。
次のクラウド環境を使ってみる予定です。
- Sakura VPS
- Google App Engine
- Amazon EC2
- ほかにあれば。

クラウドの定義というと、アメリカ国立標準技術研究所 (NIST)の次のものがよく引き合いに出されるようです。(WikiPedia から引用。)

クラウドコンピューティングとは、ネットワーク、サーバー、ストレージ、アプリケーション、サービスなどの構成可能なコンピューティングリソースの共用プールに対して便利かつオンデマンドにアクセスでき、最小の管理労力またはサービスプロバイダ間の相互動作よって迅速に提供され利用可能になるという、モデルのひとつである。このクラウドモデルは可用性を促進し、5つの基本特性と、3つのサービスモデルと、4つの配置モデルによって構成される。

 

私の中でクラウドの定義というと、(ほぼ)無限に近いコンピューターリソースを、必要に応じて調達できる環境、と思っています。そうすると、プライベートクラウドはちょっと(私の思っている)クラウドっぽくなかったり、Sakura VPS のような Virtual Private Server の環境は(私の思っている)クラウドの定義から外れているような気もするのですが、それはそれ。まずは使ってみてレポートしてみようと思います。

どこまで使ってみる、ですが、環境を整備して、アプリケーションを立ち上げるところまでやってみようと思っています。

まずは Sakura VPS を借りてもらったので、そこからやってみようと思います。

 

Rubyでサーバ設定を自動化! Chef Soloを試そう!第1回

前回の第0回でCentOS 6.2にRuby 1.9.3をソースコンパイルでインストールしました。今回はいよいよChefのインストールです。gemコマンド一発でインストールは完了です。

[root@localhost ~]# gem install chef ruby-shadow --no-ri --no-rdoc

ruby-shadowはlinuxのパスワードファイルの操作を行う場合に必要となるライブラリです。また、インストールしたマシンは開発用のマシンではありませんのでgemのリファレンスの生成を抑止するため、–no-ri –no-rdoc というスイッチをつけています。

せっかくChefをインストールしたので、早速試してみましょう。今回使用しているマシンにはApacheがインストールされていません。これをChefを使ってインストールしてみます。

Chefでは一連のサービスあるいは機能の設定に必要な操作の定義をcookbook(料理本)と呼びます。cookbookの中には複数のrecipe(レシピ)が含まれます。今回はサーバーを必要としないChef Soloを使うので、設定ファイルは設定をしようとするマシンのローカルディスクにある必要があります。まず、/var ディレクトリの下に、chef-soloの実行に必要な定義ファイルを収納するためのディレクトリを作成します。

[root@localhost ~]# mkdir /var/chef
[root@localhost ~]# cd /var/chef

さらに、cookbookとrecipeを保管するディレクトリ構造を用意します。今回はとりあえずmainというcookbookを定義する事にしましょう。

[root@localhost chef]# mkdir -p cookbooks/main/recipes

このrecipesディレクトリにdefault.rbと言うファイル名で最初のレシピを作成します。ファイルの内容は下記の通りです。

package "httpd"

この指定によりOSのパッケージマネージャーを使って指定した名称のパッケージがインストールされます。CentOSの場合にはyumですね。cookbookは複数のOSやディストリビューションに対応させる事もできます。ただ、Apacheのようにディストリビューションでパッケージ名が異なる場合には工夫が必要になりますが、それは後の機会に紹介します。

さて、レシピファイルを書いただけでは実行はできません。ローカル版のchef-soloの場合には、cookbookの場所を教えてあげる必要があります。ここでは/var/chefの直下にsolo.rbの名前で下記の内容のファイルを作成しました。

cookbook_path File.expand_path("../cookbooks", __FILE__)

ちなみにFile.expand_pathメソッドは、第1引数で与えられた相対パスを絶対パスに変換します。第2引数は基準となるディレクトリです。__FILE__はスクリプトファイル自体のパスを表します。

さて、それではchef-soloを実行してみましょう。設定ファイルを表す—cスイッチを使って先ほどのsolo.rbを指定します。

[root@localhost chef]# chef-solo -c solo.rb

実行すると下記のような表示がなされるはずです。

[root@localhost chef]# chef-solo -c solo.rb
[2012-07-21T09:36:47+09:00] INFO: *** Chef 10.12.0 ***
[2012-07-21T09:36:48+09:00] INFO: Run List is []
[2012-07-21T09:36:48+09:00] INFO: Run List expands to []
[2012-07-21T09:36:48+09:00] INFO: Starting Chef Run for localhost
[2012-07-21T09:36:48+09:00] INFO: Running start handlers
[2012-07-21T09:36:48+09:00] INFO: Start handlers complete.
[2012-07-21T09:36:48+09:00] INFO: Chef Run complete in 0.003487679 seconds
[2012-07-21T09:36:48+09:00] INFO: Running report handlers
[2012-07-21T09:36:48+09:00] INFO: Report handlers complete
[root@localhost chef]#

エラーにはなりませんが、何もインストールされた形跡がありませんね。実はchef-soloの実行にはRun Listとよばれる実行項目のリストに登録が必要なのです。Run Listの指定はjson形式のファイルを用いて行います。ここではnode.json(ちなみにnode.jsとは全く無関係です)という名で下記のファイルを作ります。

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

今度はこのファイルも-jスイッチで指定して実行してみます。

[root@localhost chef]# chef-solo -c solo.rb -j node.json
[2012-07-21T09:46:28+09:00] INFO: *** Chef 10.12.0 ***
[2012-07-21T09:46:29+09:00] INFO: Setting the run_list to ["recipe[main]"] from JSON
[2012-07-21T09:46:29+09:00] INFO: Run List is [recipe[main]]
[2012-07-21T09:46:29+09:00] INFO: Run List expands to [main]
[2012-07-21T09:46:29+09:00] INFO: Starting Chef Run for localhost
[2012-07-21T09:46:29+09:00] INFO: Running start handlers
[2012-07-21T09:46:29+09:00] INFO: Start handlers complete.
[2012-07-21T09:46:29+09:00] INFO: Processing package[httpd] action install (main::default line 9)
[2012-07-21T09:46:38+09:00] INFO: package[httpd] installing httpd-2.2.15-15.el6.centos.1 from base repository
[2012-07-21T09:46:53+09:00] INFO: package[httpd] installed version 2.2.15-15.el6.centos.1
[2012-07-21T09:46:53+09:00] INFO: Chef Run complete in 23.932614002 seconds
[2012-07-21T09:46:53+09:00] INFO: Running report handlers
[2012-07-21T09:46:53+09:00] INFO: Report handlers complete
[root@localhost chef]#

今度はちゃんとインストールされたようです。ちなみに同じコマンドをもう一度実行しても、2度インストールが走る事はありません。