Vagrantでさくらインターネットもどきを作る

Vagrant を使って一気にさくらインターネットと同等のサーバをローカルに作ってしまおうと思い, 調べたことからVagrant設定のファイルまでを備忘録でまとめておきます.

経緯

最近ひょんなことから, さくらインターネットでwebページの管理を担当することに.

Rubycgiを書いていたためデバッグ環境が欲しいのですが, あいにく手元にwebサーバは無い.仮想マシンを用意することにしました.

せっかく用意するなら,チーム内全員で同じ環境を使いたいですよね. そんなこんなで,ちょうど気になっていたVagrantを使用してみました.

前提

めざす仮想マシン

最低限,htmlが表示できてRubycgiが動く程度までを再現します.

  • Apacheを動かす
  • ホスト側からlocalhost:8080でアクセスできるようにする
  • 仮想マシンとの共有フォルダを設定して,ファイル編集はホスト側からできるようにする
  • Rubyを使えるようにする
  • RubyのPATHを/usr/local/bin/rubyにする(さくらインターネットと同じ)
  • Apacheのルートディレクトリ以下すべてでcgiが実行できるように設定する

本当はsendmailなどの設定もしたいのですが,まずはここまで.

設定内容

設定内容はGithubで公開してます.

Vagrantfileは下記の通り.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "hashicorp/precise64"

  config.vm.network :forwarded_port, guest: 80, host: 8080
     
  config.vm.provision :shell, path: "bootstrap.sh"

end

各部分を書いた理由などは下記の通り.一番上の2行はおまじない.

  config.vm.box = "hashicorp/precise64"

とりあえずapacherubyが動けばいいので,Vagrantチュートリアルと同じhashicorpのubuntuを導入します. さくらはFreeBSDだけど,ちょっと面倒なので楽しちゃいます

  config.vm.network :forwarded_port, guest: 80, host: 8080

ゲスト側の80番ポートにホスト側からlocalhost:8080でアクセスできるよう設定しています. これでホスト側のブラウザからwebページの閲覧ができます.

  config.vm.provision :shell, path: "bootstrap.sh"

OS導入後,初期設定(プロビジョニングっていうらしい?)として,bootstrap.shを呼び出しています. この中でapacheの導入などなど行ってます.

bootstrap.shの中身は下記の通り.

#!/usr/bin/env bash

apt-get update
apt-get install git -y
apt-get install vim -y

apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant/sharedFolder /var/www
fi

apt-get install ruby1.8 -y
# Link for ruby binary as if it is in the sakura 
ln -s /usr/bin/ruby /usr/local/bin/ruby

# Enable CGI
sed -i -e "/..*Directory \/var\/www..*/a\ \t\tAddHandler cgi-script .cgi" /etc/apache2/sites-available/default
sed -i '/Directory \/var\/www/,/\/Directory/s/Options/Options ExecCGI/' /etc/apache2/sites-available/default
service apache2 restart

gitやvimを入れているあたりは本筋とは関係ないので省略.

apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant/sharedFolder /var/www
fi

ここでapacheを導入し,/var/wwwから共有フォルダへリンクを貼ります. このあたりはチュートリアルこの辺をもらってきました.

apt-get install ruby1.8 -y
# Link for ruby binary as if it is in the sakura 
ln -s /usr/bin/ruby /usr/local/bin/ruby

ここはさくらインターネットのバージョンに合わせてrubyを入れています. また,さくらインターネットではrubyのバイナリの場所がちょっと違うのでシンボリックリンクで対応.

# Enable CGI
sed -i -e "/..*Directory \/var\/www..*/a\ \t\tAddHandler cgi-script .cgi" /etc/apache2/sites-available/default
sed -i '/Directory \/var\/www/,/\/Directory/s/Options/Options ExecCGI/' /etc/apache2/sites-available/default
service apache2 restart

cgiを許可するために,apacheの設定を書き換えてます(無理やり).

apacheは2から設定ファイルがhttpd.conf以外にも大量にあるようで,cgiの実行許可などはsites-available/defaultの中に設定を書くようです. 詳しい書き方などは他のページを参照.

Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバApache2の設定メモ(CGI設定) - あかいつき,など

あとはこのファイル内の書き換え箇所をsedで探して,の中にAddhandler cgi-script .cgi とOptions ExecCGIを追加しています. 本当はhtaccessとかで個別に設定するべきなのかもしれないです..

あとはこれを実行すれば,localhost:8080でアクセスができるさくらサーバもどきの完成です.

sendmailの設定なんかもしてしまいたいなぁ