このブログは、レンタルサーバーのヘテムルさんで運用してます。
ヘテムルさんは、ブログやサイトを運営するのに快適です。

特に静的サイトの表示が速いのですが、共用サーバーの宿命なのか、データベースを利用したサイト(WordPressなど)になると、表示速度の変動が激しいのです。

そんなこんなで、さくらインターネットのVPS(仮想専用サーバー)に移行してみました。

なんでHerokuWindows AzureAmazon EC2などにしないのか?

あー、あー、聞こえない。

せっかくなので、Chefを使ってやってみよう

pic-chef-logo

Chefとは、

私の頭の中で、仮想化がモヤっとしているから、Docker、Vagrant、Chefと一緒にまとめてみる。

にも書きましたが、

複数台のサーバーを同じ環境にできるソフトウェアです。
もちろん、一台でも有効です。

サーバーの環境を整える場合、普通は、サーバーにログインして、コマンドを実行してアプリケーションをインストールしたり、初期設定を変えたりします。

最初から設定したい場合、仮想環境であれば、初期化するのは簡単ですが、自分で変えた設定は、同じ手順でやり直さなくてはいけません

何度も繰り返すのは、大変です。

そこでChefを利用して、整えたい環境をrecipeとして作成しておくと、手順を覚える必要がなく、何度でもrecipe通りにサーバーを構築することができます。

なんて便利なんでしょう!
それをやってみたいと思います。

まずは、構成を考える

私は、Chef以前に、インフラ初心者ですから、サーバーには何を入れたら良いのか、分かりません。

まずは、何を入れるか考えてみたいと思います。

構成を洗い出す

途方に暮れているわけにもいかないので、検索してみます。

さくら公式のサポート情報によると、まずは、セキュリティの設定やらないといけないようです。

さくらのサポート情報 – セキュリティの設定

下記のサイトですと、その他にWebサーバーデータベースのことが書かれていました。

初心者でもわかる!さくらVPS – Sakura VPS マニュアル

tukumemo.comは、WordPressですので、WebサーバーPHPMySQLは必須ですね。
あとは、メール機能も入れたいですね。

今回、メールの設定をしてしまいましたが、特にこだわりがなければ、セキュリティのことを考えると、外部のサービスを使う方が良いと思います。

さくらのメールボックス
ムームーメール

構成を決めました

こんな感じに決まりました。
これを目標に頑張っていきたいと思います。

  • rootパスワードの変更
  • SSH接続の設定変更
  • sudoの設定
  • 一般ユーザーの追加
  • システムのアップデート
  • iptablesの設定
  • WEBサーバーの設定
  • WEBページの設定
  • マルチドメインの設定
  • PHPの設定
  • MySQLの設定
  • Postfix/Dovecot/Postfix Adminの設定

Chefをするためには、こいつらがないと始まらない

以前、Vagrantの記事(WindowsでVagrantを動かした話。)を書きましたが、

  • VirtualBox
  • Vagrant
  • Cygwin

これらがないと始まりません。
インストールをしましょう。
その後も入れるものが、いっぱいありますので、休憩しながら進めましょう。

VirtualBoxとVagrantのインストールは問題ないと思います。
VirtualBoxに環境変数を通すのを忘れないでください。

Cygwinに関しては、下記のサイトが参考になります。
(勝手にお礼言ってしまいます。DQNEOさん、ありがとうございます!)

64bit版Cygwinをインストールしてapt-cygするまで

すでにCygwinをインストール済みでも、後でapt-cygというツールが必要となりますので、apt-cygを必ず入れましょう。

入れ忘れたパッケージがあっても、setup-x86_64.exeを起動すると、再度インストールできるので、気軽にやりましょう。

ChefはRubyで動いているので、rbenvを入れます

次はRubyを入れます。

既にインストールしている人もいるかもしれませんが、Cygwinのために入れていないのであれば、rbenvを入れます。
rbenvとは、Rubyの複数のバージョンを切り替えたり管理したりするツールです。

インストールするRubyのバージョンは、現在の安定版2.1.2が良いです。

$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

$ exec $SHELL -l

$ rbenv install 2.1.2
$ rbenv global 2.1.2
$ rbenv rehash

$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-cygwin]

こちらのサイトが参考になります。

[Cygwin]rbenvとruby-buildで最新のrubyを入れる
sstephenson/rbenv
sstephenson/ruby-build

RubyGemsをアップデートしよう

RubyGemsとは、色々なパッケージを管理・インストールするためのツールです。
Cygwinで言えば、先ほどのapt-cygであったり、Node.jsで言えばnpmのようなものです。

RubyGemsは、Rubyと一緒にインストールされます。
しかし、古いバージョンの可能性があるので、アップデートする必要があります。

$ gem install rubygems-update
$ update_rubygems
$ gem -v
2.4.1

Chef/knife-soloをインストールしよう

それでは、Chefをインストールしましょう。
公式サイトからでは、Cygwinにインストールする方法が分かりませんでしたが、RubyGemsからもインストールが可能ですので、そちらで行います。

$ gem install chef
$ chef-solo -v
Chef: 11.12.8

knife-soloを入れよう

knife-soloは、ChefのknifeコマンドChef solo用に便利にするプラグインです。
これもインストールしましょう。

$ gem install knife-solo
$ gem list | grep knife-solo
knife-solo (0.4.2)

その後、knifeの初期設定をします。
特に何か設定する必要はなく、エンターキーを押していけば問題ないです。

$ knife configure

Berkshelfをインストールしよう

Berkshelfとは、ChefのCookbookとその依存関係を管理するツールです。
Cookbookとは、recipeがまとまったものです。
下記のサイトにあるように、すでに便利なCookbookがいくつもあります。
(以降サードパーティCookbookと呼びます)

Chef Supermarket

中には、他のCookbookに依存したものがありますが、Berkshelfを使うと、依存したものを自動で入れてくれます。

今回、いくつか利用していますので、Berkshelfも入れたいのですが、簡単にインストールできないのです!

Berkshelfがインストールできなくて、私の心は折れかけました…。
しかし、下記の参考サイト通り行うと、スムーズに進むことができました。

[決定版]Cygwin(64bit)でBerkshelf v3をインストールする方法

ちなみに、RubyGemsパッケージの依存を管理するものとして、Bundlerというものがあります。

本来であれば、ChefKnife SoloBundlerで管理した方が良いのですが、Cygwinでは、Berkshelfを自動でインストールできないので、Bundlerを使いませんでした。

下準備完了

入れるものが多かったですが、ここまで上手くいきましたでしょうか。
Cygwinを使えば、WindowsでもMacとあまり変わらない手順で、環境が作れるはずですが、Cygwinのクセが精神的にやられますね。

長くなったので、続きは次回

ちなみにこの本を読んで、今回の記事に挑戦しました。
事前に勉強してから読みましたが、かなり良かったです。