Rails環境構築(1) Vagrantで仮想マシン構築
Vagrantで仮想サーバー構築してみたのでメモ。構築するだけなら、楽。大してコマンドも要らない。
インストール
まずはGemでインストールしてみたけど、バージョン古いっぽくてダメだった。なので、ふつうにウェブからダウンロードしてインストールします。URLは以下。ついでに「GET STARTED」からいろいろ読んどくといいと思う。公式のRead meに勝るものはないです。
インストールしたらバージョン確認。
$ vagrant -v
boxの追加
まずはboxと呼ばれる仮想マシンイメージをvagrantに追加する。
$ vagrant box add hoge url
hogeは適当なイメージ名、urlはウェブで公開されているboxのurl。イメージはココに大量にあるので、任意のサーバーのURLをコピってくればOK。ほとんどがLinux、ちょこっとだけBSD。
vagrantの初期化
$ mkdir vagrant
$ cd vagrant
$ vagrant init hoge
vagrant initでカレントディレクトリをvagrant用に初期化する。なのでmkdirは好きなとこに好きなフォルダ作ればよい。そこに仮想マシンの設定ファイルが作られるので。vagrant initの引数にはさっきvagrant box addで追加した仮想マシンイメージの名前を渡してやる。渡さないとデフォルト値で設定ファイルが作られてしまう。これで最初ハマった。ちなみにどうハマるかというと、vagrant upしたときにこんなエラーが出る。
There are errors in the configuration of this machine. Please fix
the following errors and try again:
vm:
* The box 'base' could not be found.
「base」という名前のboxがないというエラー。どうもデフォルトでbaseという名前が使われるらしいのだが、さっきbox addした名前と異なるので、そんなboxはないから立ち上げられませんよということ。もしこの状態になってしまった場合の対処としては、vagrantfileのconfig.vm.boxの値を該当の仮想マシンイメージ名に替えてやれば上がるようになる。
話が飛んでしまったが、Vagrantfileはvagrant initしたディレクトリの中に出力されている。で、仮想マシンを上げる前にちょっとコイツの編集が必要。
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network :private_network, ip: "192.168.xx.xx"
上のconfig〜行のコメントアウトを外してやって、IPを適当に設定する。が、自分の環境だとこれだけでは仮想マシンを起動した時にエラーが出てしまって、さらにprivate_networkをpublic_networkに替えてやらなくてはならなかった。ググってるとこの手順やってる人ほとんどいないんだけど、何が原因だろう。
仮想マシンの起動
で、ここまでやっていよいよVM起動。
$ vagrant up
てっきりVirtual boxがGUIでも上がってくるのかと思ったが、仮想マシン上がりましたよ―というメッセージが表示されるだけでGUI上は何の変化もない。なのでOSが上がってるのかわかりにくいんだけど、SSHで入ると実際入れるのでどうも上がっているらしい(ちなみにGUIでVirtual box上げてももちろん起動状態はわかる。あとvagrant statusコマンドでもわかる)。
$ vagrant ssh
bashのsshコマンド発行しなくても、vagrantの独自コマンドで入れる。楽。ちなみに入るときのユーザーは勝手にvagrantというユーザーが作られているんだとか。あとはもう好きにやっちゃってーというところ。他に使いそうなコマンドは以下の表あたりか。
コマンド | 意味 |
---|---|
vagrant halt | 仮想マシンの停止 |
vagrant destroy | 仮想マシンの削除 |
vagrant box list | 仮想マシンイメージリストの表示 |
vagrant status | 仮想マシンの状態確認 |
vagrantが真価を発揮するのって多分chef-soloと組み合わせたときなので、今の段階だと「わざわざマウス使わずともターミナル上で仮想マシン上げられて便利〜」ぐらいの感想しか正直ないです。もっと勉強しよ。