MacでVagrantとVirtualBoxを使って開発環境を作るメモです。

インストール

今回はCentOS7のBOXを使用したが、他のBOXは以下から探せる。

Vagrantの環境設定

$ cd your_project_directory
$ vagrant init

Vagrantfileを作成する。

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "forwarded_port", guest: 3000, host: 3000
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
  end
  config.vm.provision "shell", path: "provision.sh", privileged: false
end

Chef、PuppetやAnsibleなどのプロビジョニング・ツールとも連携できるが、とりまシェルスクリプトで。provision.shを作成する。

Railsを使うためRuby2.4.3とNode.js、PostgreSQL、Redisをインストール。

sudo yum -y update
 
## Developer Toolset 7
## https://www.softwarecollections.org/en/scls/rhscl/devtoolset-7/
sudo yum -y install centos-release-scl
sudo yum-config-manager --enable rhel-server-rhscl-7-rpms
sudo yum -y install devtoolset-7
 
## Another packages
sudo yum -y install git zlib-devel openssl-devel readline-devel libyaml-devel sqlite-devel libxml2-devel libxslt-devel libcurl-devel libffi-devel
 
## Ruby 2.4.3
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
~/.rbenv/bin/rbenv init
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
. ~/.bash_profile
rbenv install 2.4.3
rbenv global 2.4.3
rbenv rehash
gem install bundler
 
## Node.js
curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
sudo yum install -y nodejs
 
## PostgreSQL
sudo yum -y install postgresql-server postgresql-devel
sudo postgresql-setup initdb
sudo service postgresql start
sudo systemctl start postgresql.service
sudo systemctl enable postgresql.service
 
## Redis
sudo yum -y install epel-release
sudo yum install -y wget
sudo rpm -Uvh remi-release-7*.rpm
sudo yum --enablerepo=remi,remi-test,epel install -y redis
sudo systemctl start redis.service
sudo systemctl enable redis.service

provision.shを作成したら、コマンドラインからvagrantを起動する。

$ vagrant up

インストールが終わるまでしばし待ち、sshで接続する。

$ vagrant ssh

Vagrantのコマンド

リロード

$ vagrant reload

シャットダウン

$ vagrant halt

サスペンド

$ vagrant suspend

VMの削除

$ vagrant destroy

ホストOSとのファイル共有

デフォルトではVagrantfileのディレクトリがホストOSの/vargrantに同期される(ホスト→ゲストの一方通行)。ただしrsyncのため(90秒インターバル?)ホスト側でvagrant rsync-autoを起動しておく必要がある。

同期のタイプとしてSMB、NFS、VirtualBOX、rsyncがあるが、パフォーマンスや信頼性の点でrsyncが良さそう。

scpを使う

$ vagrant ssh-config > ssh.config
$ scp -F ssh.config vagrant@default:/var/lib/redmine/erd.pdf .

参考リンク