kinalog

自称フロントエンドエンジニアが何か喚いています。

Vagrantメモ

ドットインストール見ながら導入してみたのでまとめ。
どうも黒い画面系のコマンドを覚えてないのでその辺も補足しつつ。

Vagrant入門 (全13回) - プログラミングならドットインストール

Vagrantって?

仮想マシンを構築するツールだよ。

使うための準備

1. VirtualBoxをインストール(VMWareとかでも良い)

Oracle VM VirtualBox

2. Vagrantをインストール

Vagrant

仮想マシンを立ち上げる

1. Box(仮想マシンのテンプレート)を取得

$ vagrant box add 名前(自由につけられる) URL

ってやると指定した名前でURLからBoxをダウンロードしてくる。
ダウンロードしてきたBoxは
./.vagrant.d/boxes
に格納される。

2. 仮想マシンを初期化する

1) 仮想マシンごとにmkdir
2) mkdirしたフォルダに移動
3) initする
$ vagrant init Box名

って叩くと、指定したBoxを使って初期化する。

初期化に成功すると、フォルダの中にVagrantfileっていう名前のRubyで書かれた設定ファイルが生成される。

3. 仮想マシンを起動する

下のコマンドを叩くと起動。

$ vagrant up

これ以降はCentOSを使っているよ!

仮想マシンの操作

現在の仮想マシンの状態を表示
$ vagrant status
仮想マシンをスリープ状態にする
$ vagrant suspend
仮想マシンをスリープ状態から復帰させる
$ vagrant resume
仮想マシンを終了する
$ vagrant halt
仮想マシンを起動する
$ vagrant up
仮想マシンを再起動
$ vagrant reload
仮想マシンを削除する
$ vagrant destroy

※destroyしてもVagrantfile自体は残っているので、そのままupすれば普通に起動する。(ただしinit後の状態?)

SSH接続する

SSH接続するには、仮想マシンををupした状態で

$ vagrant ssh

コマンドをたたく。

Webページを表示してみる

1. Webサーバーをインストール
$ sudo yum -y install httpd

これでhttpdがインストールできる。

httpdとは:http://e-words.jp/w/httpd.html

yumは、パッケージをインストールするときにパッケージ間の依存関係を調べてインストールを行ってくれるコマンド。
yumコマンドについて yum - Linux初心者の基礎知識

-yオプションをつけると、実行時に確認を行わなくなる。

2. Webサーバーを起動
$ sudo service httpd start

※serviceは、サービスの起動や再起動・停止などを行うコマンド。

3. Webサーバーの設定をする

仮想マシン起動時にhttpd自動起動

$ sudo chkconfig httpd on

※chkconfigは、システム起動時に起動するサービスの一覧を表示したり、起動するサービスの登録・削除などなどを行う。

chkconfig サービス名 on

自動起動し、

chkconfig サービス名 off

自動起動をオフにする。


・ファイヤーウォールを切る
開発中は邪魔だったりするからね。

$ sudo service iptables stop

自動起動もオフにしておく

$ sudo chkconfig iptables off

iptablesUNIX系のファイヤーウォールを管理してるサービスなのかな?

4.HTMLファイルを作る

CentOSの場合、Webページは
/var/www/html
以下に置く。

viとかでHTMLを作ったあと一回接続を切る。

$ exit

5. Vagrantfileをいじる

viとかでVagrantfileを開いて、PrivateNetworkとか書かれているあたりのコメントを外してやる。
その後reload。

6. ブラウザで見る

Vagrantfileに書かれてたIPアドレスをブラウザで表示させると、さっき作ったHTMLファイルが表示される。

共有フォルダを使う

いちいちSSH接続してHTMLなんかを編集するのはダルい・・・
Mac上でやりたい・・・

そんなときのためにvagrantには共有フォルダが存在している。

Mac上で作った仮想マシンのフォルダは、SSH接続したときの
/vagrant
とリンクしている。

例えばSSH接続後に

$ cd /vagrant

で移動したあと

$ touch test

で空のファイルを作ると
Mac上の仮想マシンフォルダにも空の「test」というファイルが作られている。


だから、例えばWebルートフォルダ(/var/www/html)と/vagrantフォルダをつなげてやれば、わざわざSSHで接続しなくても中身がいじれるようになる。

どうやるの?

SSH接続時に下記のコマンドを叩いて、シンボリックリンクを作成する。

$ sudo ln -fs /vagrant /var/www/html


これで/vagrantフォルダ(=仮想マシンのフォルダ)に入れたものが/var/www/htmlフォルダに入ることになり、直接触れる用になる。

Provisioning

Provisioningとは?

vagrant upをしたあとに、自動で実行されるもの。

例えば、あんまり実用的ではないけど
Vagrantfile内に

config.vm.provision :shell, :inline => "echo hello world"

という一行を書き加えると、up時に「hello world」とシェル内に表示される。

別ファイルを読み込ませる

config.vm.provision :shell, :path => "読み込ませたいファイル名"

とすると、別ファイルが読み込める。

自分でBoxを作る

自分で設定した環境をそのままBoxにしたい場合は

$ vagrant package

でOK。

システムに追加したい場合は

$ vagrant box add my_box package.box

っていう感じ。いつものBoxインストールと同じ。

プラグイン

インストールは

$ vagrant plugin install プラグイン名

※MavericksだとNokogiriというプラグインのインストールエラーが出るので、下記を叩いてからインストールをしないと無理かも。(「システム環境にインストールされているNokogiriを使う」という設定)
NOKOGIRI_USE_SYSTEM_LIBRARIES=1