Vagrant + VirtualBox で Rails開発環境構築

# 事前にインストール
※環境
windows10 64bit
(前記事 <a href="https://qiita.com/ShoutaWATANABE/items/2167c6886f6e63501069">msys2 + MinGW64 でWindows10にターミナル環境構築</a> にもとづいてターミナル環境構築済み)
Vagrant 1.9.7
VM VirtualBox 5.1.26


# Vagrant
## Box作成

```shell
$ vagrant box add (name) (url)
```
※ ex) CentOS6.8を導入する場合

```sh
$ vagrant box add ◯◯(任意ですが私はapp名にすることが多い) https://atlas.hashicorp.com/kaorimatz/boxes/centos-6.8-x86_64/versions/20160703.0.0/providers/virtualbox.box
```

Box確認

```sh
$ vagrant box list
```

設定

```sh
$ cd Documents
$ mkdir (Boxの名前)
$ cd (Boxの名前)
$ vagrant init (name)
```
## Vagrantfile

```Vagrantfile
config.vm.provider :virtualbox do |vb|
# # Don’t boot with headless mode
# vb.gui = true
#
# # Customize the amount of memory on the VM:
vb.memory = "2048"
end

# config.vm.hostname = "ledger.com” #← IP以外で設定したい場合
config.vm.network "private_network", ip: "192.168.33.10" #← 他の番号も可

# config.vm.synced_folder "../data", "/vagrant_data"
# ↓ コメントアウトを外して下記に変更
config.vm.synced_folder".", "/◯◯", create: "true", mount_options: ['dmode=755','fmode=644']
```

## 仮想マシン起動

```sh
$ vagrant up
```

## 仮想マシンにアクセス
```sh
$ vagrant ssh
```

※文字化けしている時
localPC ↓
/etc/ssh/ssh_config　の　SendEnv LANG LC_*行をコメントアウト
ssh を exit で落として vagrant reload

# インストール

## curl・git・rubyなど

```sh
$ sudo yum --exclude=systemtap* groupinstall 'Development Tools' && sudo yum install curl git m4 ruby texinfo bzip2-devel curl-devel expat-devel ncurses-devel zlib-devel openssl-devel irb
```
## brew

```sh
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"
$ echo 'export PATH="$HOME/.linuxbrew/bin:$PATH"' >> ~/.bash_profile
$ echo 'export MANPATH="$HOME/.linuxbrew/share/man:$MANPATH"' >> ~/.bash_profile
$ echo 'export INFOPATH="$HOME/.linuxbrew/share/info:$INFOPATH"' >> ~/.bash_profile
$ echo 'export LD_LIBRARY_PATH="$HOME/.linuxbrew/lib:$LD_LIBRARY_PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
$ gcc -dumpversion
$ ln -s `which gcc` `brew --prefix`/bin/gcc-4.4
$ ln -s `which cpp` `brew --prefix`/bin/cpp-4.4
$ ln -s `which g++` `brew --prefix`/bin/g++-4.4
$ brew -v
```

## tree(ディレクトリのファイル・ディレクトリ構造を表示できる)

```sh
$ sudo yum install tree
```

## xclip（コンソール画面からクリップボードにコピーできる）

```sh
$ sudo yum install xclip
```
## gem(ruby言語用パッケージ管理用ツール)

```sh
$ sudo yum install rubygems
```
## git(言わずと知れたファイルのバージョン管理用ツール)

```sh
$ sudo yum install git
```
## vim(プラグイン入れて最強のエディタに)

```sh
$ sudo yum install vim
$ mkdir -p ~/.vim/bundle
$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
$ sh installer.sh ~/.vim/bundle
$ cd ~/.vim
$ git clone https://github.com/Shougo/dein.vim.git ~/.vim/dein/repos/github.com/Shougo/dein.vim

(colorscheme)
$ mkdir colors
$ git clone https://github.com/tomasr/molokai
$ mv molokai/colors/molokai.vim ~/.vim/colors/

(gitでdotfiles管理している場合)
$ cd ~
$ git clone https://●●@bitbucket.org/●●/dotfiles.git
$ rm -f .vimrc
$ cp ~/dotfiles/_vimrc ~/.vimrc

$ vim (確認)
```

## rbenv (rubyのバージョン管理用ツール)

```sh
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ rbenv --version
```

## Ruby 2.x (今回は2.2.3)

```sh
$ sudo yum install gcc make openssl-devel readline-devel
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install -l
$ rbenv install 2.2.3
$ rbenv global 2.2.3
$ ruby -v
```

## Rails

```sh
$ gem install rails
```

## httpd(webサーバ)

```sh
$ sudo yum -y install httpd
$ apachectl -v
```

サーバーが起動したらwebサーバーを起動するように

```sh
$ sudo chkconfig httpd on
$ sudo vim /etc/httpd/conf/httpd.conf
```
```/etc/httpd/conf/httpd.conf
# ポート番号の確認
ServerTokens Prod #44行目

Listen 80　#136行目

#　ServerName を有効にする　#285行目
UseCanonicalName On

<Directory />　#305行目
    Options FollowSymLinks
    AllowOverride None
    EnableMMAP Off 　#追加
    EnableSendfile Off　#追加
</Directory>

# サーバーの名前の情報(ホスト名)を設定する
ServerName www.example.com:80

#
ServerSignature Off　#538行目
```

起動確認

```sh
$ sudo service httpd restart
```

## Passenger(Railsアプリを実行するためのApacheモジュール)

```sh
$ gem install passenger
$ rbenv rehash
$ passenger-install-apache2-module
```

※エラーが出た場合は足りないものをインストール

```sh
$ sudo yum install curl-devel httpd-devel apr-devel apr-util-devel
```

再度以下を叩く

```sh
$ passenger-install-apache2-module
$ passenger-install-apache2-module --snippet
```

上のコマンドで表示されたスニペットを貼り付け

```sh
$ sudo vim /etc/httpd/conf/httpd.conf
```

```/etc/httpd/conf/httpd.conf
LoadModule passenger_module /Users/●●/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.1.2/buildout/apache2/mod_passenger.so
  <IfModule mod_passenger.c>
  PassengerRoot /Users/●●/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.1.2
  PassengerDefaultRuby /Users/●●/.rbenv/versions/2.2.3/bin/ruby
  </IfModule>

<VirtualHost *>
  ServerName 192.168.33.11
  DocumentRoot /◯◯/◯◯_app/public
  RailsEnv development
  #RailsEnv production
  PassengerEnabled on
</VirtualHost>
```

## iptableを止める

```sh
$ sudo service iptables stop
$ sudo chkconfig iptables off
```

## SELinuxも止める

```sh
$ sudo vim /etc/sysconfig/selinux
```

```/etc/sysconfig/selinux
SELINUX=disabled
```

## MySQL

```sh
$ sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
$ sudo yum install mysql-community-client mysql-community-common mysql-community-devel mysql-community-libs mysql-community-libs-compat mysql-community-release mysql-connector-python mysql-utilities mysql-community-server
```

確認

```sh
$ sudo yum list installed | grep mysql
$ mysql --version
$ mysqld --version
```

サーバーを起動したら自動的に MySQL Server が起動するように設定

```sh
$ sudo chkconfig mysqld on
```

起動確認

```sh
$ sudo service mysqld start
$ sudo service mysqld stop
$ sudo service mysqld restart
```

root でログイン

```sh
$ mysql -uroot
```

ユーザー作成

```mysql
mysql> create user 'ledger'@'localhost' identified by 'runner';
```

ユーザーの権限を確認

```mysql
mysql> show grants for '◯◯'@'localhost';
```

ユーザーに権限付与

```mysql
mysql> grant all privileges on *.* to '◯◯'@'localhost';
```

権限の反映

```mysql
mysql> flush privileges;
```

データベースを選択

```mysql
mysql> use mysql;
```

登録されているユーザーとホストを確認

```mysql
mysql> select user,host from mysql.user;
```
Ctrl + C で抜ける。

指定のユーザーでログイン

```sh
$ mysql -u ledger -p
```
Enterを押す

```sh
password: 
```
パスワードを入れる。
※ちなみに、

```sh
$ mysql -uledger -p****(パスワード) 
```

で最初からパスワード入れてすっ飛ばすことも可能

データベース作成

```mysql
mysql> create database ◯◯_production;
mysql> create database ◯◯_development;
```
文字コードのデフォルトを utf8 に設定

```mysql
mysql> ALTER DATABASE `◯◯_production` default character set utf8;
mysql> ALTER DATABASE `◯◯_development` default character set utf8
```
mysqlの設定変更

```sh
$ sudo vim /etc/my.cnf
```

```/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server=utf8

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8
```

# Railsによるアプリ作成 

```sh
$ cd /◯◯
$ rails new ◯◯_app
```

```Gemfile
#gem 'sqlite3'
#上記コメントアウトし下記を追記
gem 'mysql2'
gem 'therubyracer', platforms: :ruby
```


```config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  timeout: 5000
  username: ◯◯
  password: ****
  host: localhost

development:
  <<: *default
  database: ◯◯_development

#test:
#  <<: *default
#  database: db/test.sqlite3

production:
  <<: *default
  database: ◯◯_production
```

```sh
$ cd ◯◯_app
$ bundle install 
$ rake db:migrate RAILS_ENV=development
$ sudo service httpd restart
$ passenger-config restart-app
```

ブラウザでアドレス打って確認。

# その他

## 仮想環境内でzshを使う場合
zshがインストールされているかを確認

```sh
$ zsh --version
```
yumでzshをインストール

```sh
$ sudo yum -y install zsh
```
使用可能なshellの確認

```sh
$ cat /etc/shells
```
ログイン・シェルに設定

```sh
$ chsh -s /bin/zsh
```
設定ファイルを編集

```sh
$ cd ~
$ vim .zshenv(何も記入しないまま保存)
$ vim .zshrc
```

.zshrcはまた後日ご紹介の予定。

```sh
$ zsh
$ source ~/.zshrc
```
rbenvのパスを通す

```sh
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshenv
$ echo 'eval "$(rbenv init -)"' >> ~/.zshenv
$ source ~/.zshenv
```
動作確認(バージョンが確認できればOK)

```sh
$ rbenv -v
```