Edited at

fedora27上のvagrantで開発サーバを立てる

More than 1 year has passed since last update.


背景

共有の開発サーバがない環境にやってきたので、自身のPCに開発環境を用意せねばならない状況になった。

Dockerは試したことがあるが、VMというよりはプロセスを管理する感じで、本当にそれが本番サーバで動くのか不安だったこと、dockerのコマンドを覚えきれなかった。ので途中で使うのをやめた。

VMなvagrantを試してみたいと思う。


vagrantとは

VMを管理してくれるツール。virtualboxやhyper-v, VMware fusionと組み合わせて利用する。

virtualboxのインスタンスの設定ファイルを共有して、みんなで共有できるぞ。って感じみたい。

Dockerに比べて仮想化な分重い。


環境


  • ホストマシン


    • fedora27

    • CPU: Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz

    • MEM: 16172360 kB

    • DISK: /dev/mapper/root 230G 18G 212G 8% /




インストールするもの

VirtualBoxかVMwareか選択できるが、VirtualBoxを使う。(もともと入れてあった)


VirtualBox


ダウンロード

https://www.virtualbox.org/

ダウンロードページからLinux distributions からrpmとExtension Packをダウンロード。

image.png

image.png


インストール

DLしたrpmをインストール(Downloadsディレクトリはカタカナかも。)

$ sudo dnf install ~/Downloads/VirtualBox-5.2-5.2.2_119230_fedora26-1.x86_64.rpm

一度起動確認して、Extention Packを入れる。

$ virtualbox /home/murata/Downloads/Oracle_VM_VirtualBox_Extension_Pack-5.2.2-119230.vbox-extpack

同意の画面が出るのでそのまま入れればおk(extention packの場所はフルパスでないと見つけられないエラーが出るかもしれないので注意)

image.png


  • kernel-develが入っていなかったら$ sudo dnf install kernel-develからのsudo /sbin/vboxconfigだ!

  • BIOS(UEFI)でsecure bootがONになっているとコケることがあるらしいぞ。

終わり。(kernelに変更が入るのでPCの再起動を忘れるな!)


Vagrant


ダウンロード

https://www.vagrantup.com/

からcentos用のrpmをDL(fedora用がないので。)

image.png


インストール

そのままDLしたものをインストール

$ sudo dnf install ~/Downloads/vagrant_2.0.1_x86_64.rpm


設定

基本的にvagrantのセットアップ方法をやっていけばおk

https://www.vagrantup.com/intro/getting-started/index.html

rubyを利用するので、入れていない人はdnf install rubyをしておく。rbenvを使っている人はglobalをsystemにしておきましょう。

流れとしては

1. 適当にディレクトリ作って mkdir xxx

2. 適当なbox(OSイメージ)を拾いvagrant box add hashicorp/precise64

2. 初期化して vagrant init hashicorp/precise64

3. 立ち上げる vagrant up

この時点でVirtualBoxに項目ができている。

image.png


SSHで入ろう

vagrant ssh

で入れる。


特定のディレクトリをマウントしよう

デフォルトでVM内の/vagrantがマウントされているぞ。

追加などしたければプロジェクトディレクトリのVagrantfileの↓を変更しよう。

  # Share an additional folder to the guest VM. The first argument is

# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"

config.vm.synced_folder "~/workspace", "/home/vagrant/project"


amazon Linuxを使ってみよう

https://qiita.com/iwai/items/0b3ef59ab3eb87dd4646

ここに書いてあった。


まとめ

DockerやVagrantを使うものよいが、AWSに開発インスタンスをおいたほうが環境依存が少なくなるし、セットアップの手間も減るので、1円もお金を使いたくないでござる!系の人以外はAWSでサーバを構築して、プロジェクトディレクトリを分けて複数人で使うほうがよくないか?

本番がAWSならばもっとそうだ。

ファイルのsyncが辛い? いやいや、お使いのツールに変更ファイルだけrsyncしてくれる機能あるでしょ?

もしくは ionotifywaitとrsyncを組み合わせて特定のディレクトリ配下に変更があったらrsyncぶっこむってできますよ。

DockerやVagrantになぜここまでニーズがあるか未だにわからん。


vagrant コマンド

よく使うコマンドをまとめ。


vagrant global-status

各インスタンスの状態が見れる。

$ vagrant global-status            

id name provider state directory
-------------------------------------------------------------------------
c1333e5 default virtualbox running /home/murata/vagrant_getting_started


vagrant halt [id]

シャットダウン

$ vagrant halt c1333e5

==> default: Attempting graceful shutdown of VM...


$ vagrant up [id]

起動

$ vagrant up c1333e5   

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key


$ vagrant reload [id]

対象の設定ファイル (Vagrantfile) を編集したあとに読み込ませる。マウントポイントやポートフォワードを変更したときに行うことが多い。


$ vagrant package [id] --output [filename]

作ったイメージをファイルにしておくのに使う。filenameは~/workspace/xxxx.boxって感じ。設定ファイル(Vagrantfile)はコピーされないのでご注意。


vagrant box系


$ vagrant box list

登録されているインスタンスのリストを表示。

╰─$ vagrant box list                

hashicorp/precise64 (virtualbox, 1.1.0)
xxxxxxx (virtualbox, 0)
mvbcoding/awslinux (virtualbox, 2017.03.0.20170401)


$ vagrant box add [box名]

vagrantにイメージを登録する。

box名はpackage でローカルにあるファイルの場合はそれを指定。

ネット上のものであればurlを。(https://app.vagrantup.com/boxes/search)