本文へジャンプします。

CapistranoとChefでサーバー管理を自動化~インスタンス作成から15分で実戦投入~

こんにちは。株式会社ドリーム・アーツの石田です。

さて、みなさんはLinuxサーバーの管理をどのように実施していますか。

普通はsshでログインしてシェルからコマンドをつかってパッケージをインストールしたり、設定ファイルを編集したりしていると思います。

サーバーの台数が少ないうちはこれでも十分なんですが、Web系のサービスなどを運用していると結構サーバーの台数が増えてきてしまい、手作業でやっていると面倒だし作業ミスは発生させるしロクなことがありません。

また、ニフティクラウドだとサーバーインスタンスはせっかく5分でできるのに、OSの設定やミドルウェアのセットアップ、アプリのインストールを手作業でやってたら今ほしいサーバーが間に合わないのです。

そこで登場するのはこうしたサーバーのインフラ管理をまとめて自動で実行するツールです。

弊社で開発・運用している「Shopらん」では、ニフティクラウド上に作成した各サーバーのインスタンスを管理するために、CapistranoとChefというツールを利用しています。

Capistrano (https://github.com/capistrano/capistrano/wiki)は並行sshととでもいいましょうか。複数のサーバーに並行でssh接続を行い定義したとおりのタスクを実行してくれるツールです。

Chef (http://wiki.opscode.com/display/chef/Home)は、サーバーの構成管理を自動化するツールです。各サーバーにどのようなパッケージをインストールしてどう設定すべきかといった情報を一元管理し、新しいサーバーを立ち上げるときのインストール作業(プロビジョニングといいます)や、すべてのサーバーの設定を一括で変更したいような場合に威力を発揮します。

Chefの使い方的な話題は、以前に株式会社エクストーンの仲山さんが記事にしているので「できる!ソーシャルアプリ(2) 「開発環境の充実はとっても嬉しいなって」の記事を参照してください。

今回は、サーバーの運用管理をお気軽に実行するために、ニフティクラウド上のサーバーに、CapistranoとChefをセットアップしてみます。

実は、Capistranoのセットアップは簡単なんですが、Chefをサーバーとしてセットアップするのは、RubyやらRubyGemsやらJavaやらCouchDBやらSolrやら諸々インストールする必要がありかなり面倒です。

そこでまずCapistranoをインストールして、Chefのインストール作業自体をCapistranoタスクにしてそれを自動実行するという手順でセットアップしてみたいと思います。

弊社ではまりにはまったCentOSへのChefサーバーのインストールがワンタッチでできますよ。

■Capistranoのセットアップ

まずは、管理サーバーになるサーバーのインスタンスを作成します。

ニフティクラウドのコントロールパネルより「CentOS 5.3 64bit Plain」のインスタンスを作成してください。Chefまで動かす場合miniではきついのでSmallで作るとよいでしょう。また今後このサーバーは各サーバーからアクセスされるので固定グローバルIPを指定しておきます。

ここまで5分。

CapistranoはRuby製のアプリですので、インストールはRubyGemsで行います。CentOS 5.3ですとそのままではGemsが使えないのでrpm.aegisco.comのリポジトリを使って一気にインストールします。

サーバーが起動したら、sshでコンソールにログインして以下のスクリプトをsetup-capistrano.shなどの名前で保存し実行します。

#!/bin/sh
export LC_ALL=C
# first get epel, elff
( rpm -e epel-release ;  rpm -e elff-release ) 2> /dev/null ;
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm &&
rpm -Uvh http://download.elff.bravenet.com/5/i386/elff-release-5-3.noarch.rpm &&
rpm -Uvh http://rpm.aegisco.com/aegisco/rhel/aegisco-rhel.rpm &&
# install packages
yum install 
        screen byobu 
ruby.x86_64 
ruby-shadow.x86_64 
ruby-ri.x86_64 
ruby-rdoc.x86_64 
gcc.x86_64 
gcc-c++.x86_64 
make 
ruby-devel.x86_64 
gecode.x86_64 
gecode-devel.x86_64 
rubygems 
-y &&
gem install capistrano &&
echo 'all done.'

ハイ。セットアップ完了しました。
ここまでで10分。

■Chefサーバーのセットアップ

さて、ChefのインストールはCapistranoを使って行います。
Capistranoがsshで自サーバーに接続してリモートセットアップを行うというわけです。
まず、ChefサーバーをFQDNの名前でアクセスするため、/etc/hosts に自分自身のグローバルIPアドレスを追加します。

aaa.bbb.ccc.ddd       chef.your-domain

次に、Capistranoではパスフレーズの入力なしに管理対象のサーバーにアクセスできなくてはいけないので、自サーバーへのへのログイン秘密鍵を使って自分自身である chef.your-domain にログインできるようにします。
コントロールパネルでサーバーインスタンスを作成するときに指定したSSHキーのPEMファイルのパスフレーズを外して、/root/.ssh/identity として保存してください。
SSHキーのファイル名が nifty.pem とすると、以下のようになります。

# openssl rsa -in nifty.pem > /root/.ssh/identity
Enter pass phrase for nifty.pem: ※パスフレーズを入力します。
writing RSA key
# chmod 400 /root/.ssh/identity

ここまでで、ssh chef.your-domain と入力すると自分自身にログインできるようになっているはずです。
これでCapistranoを実行する準備が整いました。
さて、いよいよChefサーバーをインストールします。
ニフティクラウドのCentOS 5.3 64bitサーバーに、Chefサーバーをインストールするためのタスクは、https://support.shoprun.jp/nifty_blog/prov-chef-serv.tgzとして用意しました。
ダウンロードしたファイルを展開したら config.rb を開いてサーバーのFQDNを編集します。

wget https://support.shoprun.jp/nifty_blog/prov-chef-serv.tgz
tar zxvf prov-chef-serv.tgz
cd prov-chef-serv
vi config.rb
CHEF_SERVER_FQDN = "chef.your-domain"

これで準備が整いました。
では、capコマンドでcapfileに書かれたタスクを実行してみましょう。

cap provision

しばらく時間がかかりますが、これでChefサーバーのインストールは完了です。

安全のため、iptablesの設定は変えていませんので、Chefクライアントにあわせて適宜ポートを開けてください。

最後に、Chefのリポジトリを初期化して完了です。

knife configure -i

トータルで30分以内ぐらいでしょうか。

今回はcapistranoを使って自サーバーにインストールしましたが、sshが通ればリモートのサーバーでも同じようにインストールできます。またChef以外のアプリもこの方法でインストールすることができます。

そして、同様にChefクライアントChefサーバーができてしまえば、あとは「できる!ソーシャルアプリ(2) 「開発環境の充実はとっても嬉しいなって」と同様にサーバーの設定を管理することができます。

大量のサーバーを抱えているサーバー管理者の皆さん、ニフティクラウドAPIでサーバーインスタンスを作成し、CapistranoでChefクライアントをセットアップして、Chefで設定を流し込むと、なんと15分でサーバーを実戦投入できるようになります。ぜひお試しください。

では。

ニフティクラウド 導入相談窓口
ニフティクラウド 無料セミナー

閉じる

閉じる

クラウドブログ編集部

クラウドブログ編集部

ニフティクラウド ユーザーブログ編集部のアカウントです。 編集部からのお知らせや、レギュラーライター以外のゲストによる寄稿記事を掲載していきます。

浜中 慶

浜中 慶

1980年、神奈川県生まれ。2003年ニフティ入社。 ポータルサイト開発を中心に、音楽配信サービス、CGMサービスなど様々なプロジェクトに企画/デザイン/システム担当として参加。現在は@niftyのポータルサービス向けコンテンツ管理システムの企画/開発/運用を担当。

吉田 雄哉

吉田 雄哉

株式会社co-meetingの創業メンバー。「取締役&External- facing Technologist」と名乗り新しいIT技術を広く伝える活動とWebアプリケーション開発を行う毎日。パッケージベンダーでのSaaS立上げ・製造業の情報システム部門で企画やPM・受託開発と従事してきたため、ベンダーサイドとユーザサイド の両方の視点を持ち合わせる。

石田 健亮

石田 健亮

株式会社ドリーム・アーツで小売事業者向けSaaS「Shopらん」を企画、開発。メインの仕事はプログラマーだがサーバー管理や営業もこなすユーティリティプレイヤー。最近好きな事はパフォーマンスチューニング。特に並列化プログラミングがマイブーム。キライなことはデータセンターでの作業。騒音と乾燥が弱点。ニフティクラウドでデータセンターに行く必要が無くなったことが本当の利点だ と思っている。

五月女 雄一

五月女 雄一

ニフティでは「インフラを守る簡単な様で奥が深いお仕事」をしています。 夢はインフラの気持ちが読めるエンジニアになること。

わたなべ かずひろ

わたなべ かずひろ

専門学校卒業後、ソフトウェア開発会社で電力系統制御システムの開発に従事。その後、CD-ROM等マルチメディア系PCソフトの開発を経て、1998年フリーランスに。 2000年8月に株式会社イーツーの設立に参画。携帯を含む様々なWeb系のシステム開発に携わる。現在はiPhone/Androidアプリなどの開発も手がけている。

市角

市角

ニフティクラウドのコントロールパネル設計・開発をメインに、たまにインフラの運用やお手伝いもやっていたりします。コントロールパネルや新機能の活用方法、アイデアなどを中心に書いていく予定です。

仲山 昌宏

仲山 昌宏

歌って踊れるインフラエンジニア兼、PHPもRubyもJavaも書くPerl使い。 物理サーバの運用に飽きて、フルラックに格安サーバ詰めて自宅プライベートクラウドを構築中。 今年は個人的には分散処理を攻めていきます。

猪飼 賢広

猪飼 賢広

1984年、愛知県名古屋市生まれ。大学は福島県にある某大学。2008年ニフティに入社。 開発系部署に配属後、主に各種テーマサイト開発のシステム面調整、開発進行管理役などとして参加。 現在もPC・ガラケーサイトの開発まわりを担当。インフラまわりを触る案件にも携わっており、日々修行中。 好きな芸人はなかやまきんに君とレイザーラモンRG。

久江 裕之

久江 裕之

ニフティクラウドのインフラ運用、OS提供の仕事をしています。 新しいOSやイメージが出る時にこのブログでご紹介いたします。入社5年目。一流のインフラエンジニアを目指して日々勉強中。

竹内 豪

竹内 豪

ニフティクラウド エンジニア

山口

山口

ニフティクラウドの基盤設計、新サービス/アライアンス/インフラ企画、その他雑用全般を担当しています。 クラウドに欲しい機能や、こんなふうに使ってほしいという想いが共有できれば良いですね。

芳中 隆幸

芳中 隆幸

ニフティクラウドの開発、運用を担当しています。

酒井 浩平

酒井 浩平

ニフティクラウドの中にいます。 ネットワークまわりの運用・開発や自動化などに取り組んでいます。 すべてのエンジニアを幸せにすることを目指しています。

higebu

higebu

ニフティクラウド IaaSのエンジニアです。 ネットワーク、DRサービス with VMware vCloud® Air™ Technology辺りの担当をしています。

武田

武田

ニフティクラウドの開発・運用を担当しています。 各種機能の内容についてなどで執筆させていただく予定です。

森藤 大地

森藤 大地

データに関する仕事が好きです。

宮原徹

宮原徹

日本仮想化技術株式会社 代表取締役社長兼CEO。仮想化技術に関するコンサルタントとして長年活動しており、特にベンチマークテストによる性能評価を得意としている。

荒谷翔

荒谷翔

株式会社はてなでMackerelのセールスデベロッパーとして勤務しています

東條 望

東條 望

2014年にニフティへ中途入社。 入社後から現在まで、ニフティクラウドのサービス企画・開発を担当しています。 各サービスの紹介を執筆させていただく予定です。