vagrant+VirtualBoxの環境構築(CentOS7,PHP,Python,MySQL)

参考：[vagrantの導入と構築](http://qiita.com/yoshis2/items/5462fcef6b349f688ae9)

# 環境

* windows7 64ビット
* VirtualBox4.3.12
* vagrant1.8.4

※VirtualBox5.0や4.3.38で実行するとvagrant upが以下のエラーで終わる。
[「vagrant up で rails-dev-box が起動しない」](http://qiita.com/leon-joel/items/3161d249452e1b092230)を参考にして4.3.12にしたところ動いた。

```
Command: ["startvm", "xxxx-xxxxxxxx-xxxxxxxx-a4b1", "--type", "headless"]

Stderr: VBoxManage.exe: error: The virtual machine 'rails-dev-box_default_1461997523333_77253' has terminated unexpected
ly during startup with exit code -1073741819 (0xc0000005).  More details may be available in 'C:\Users\xxx\VirtualBox
 VMs\rails-dev-box_default_1461997523333_77253\Logs\VBoxHardening.log'
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MachineWrap, interface IMachine
```

※vagrant1.8.5で、vagrant up時に「Authentication failure. Retrying...」が繰り返されるバグに遭遇。　2016/09/15追記

参考：http://ytooyama.hatenadiary.jp/entry/2016/07/23/213132

#Vagrant導入

##VirtualBox/Vagrantインストール

* VirtualBox4.3.12
https://www.virtualbox.org/wiki/Download_Old_Builds_4_3_pre24

* vagrant最新
https://www.vagrantup.com/downloads.html

##Box取得

####Box取得

```
//vagrant box add 任意のBox名 Box取得先
vagrant box add centos7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
```

####取得されているBoxを確認

```
vagrant box list
```

有志によって作られたBoxが掲載されているサイト。ここからBOXを取得する。
http://www.vagrantbox.es/

##仮想マシン初期化/起動

一つの仮想マシンにつき、ひとつのフォルダを割り当てる。
フォルダを作りそこへ移動して初期化や起動を行う。

```
mkdir Myvagrant
cd Myvagrant

//vagrant初期化
//vagrant init Box名
vagrant init centos7

//vagrant起動
vagrant up
```

###注意　PCの「仮想化支援機構(VT-x/AMD-V)を有効化」をしていないと動かない。
####1.事象
default: SSH auth method: private keyで止まる
####2.対応
BIOSで仮想化支援機構(VT-x/AMD-V)を有効化する。

①再起動して、F10（HP）やF2（その他）を押してBIOS画面へ
②Virtualization Technologyを有効化する。
（PCによって若干表記異なる）

「[仮想化支援機構(VT-x/AMD-V)を有効化できません Vagrant upでOS起動失敗した](http://futurismo.biz/archives/1647)」がまんま参考になる。

##仮想マシンへの接続

テラタームで127.0.0.1へ接続する。
ユーザ/パスワード vagrant/vagrant
ユーザ/パスワード root/vagrant

※特定のIPアドレスをプライベートアドレスとすることも可能。
フォルダ内のVagrantfileを開き以下をコメントアウトする。

```
config.vm.network :private_network, ip: "192.168.33.10"
```

変更を反映する。

```
vagrant reload
```

192.168.33.10でアクセスすることが可能。

## 共有フォルダの設定
ローカル上のinitしたフォルダは、仮想マシン上の/vagrantに該当する。
ローカルのフォルダ(ここでいえばMyVagrant)を仮想マシン上の/var/www/htmlに対応させる。
※Django使う場合は、ドキュメントルート使わないので必要ない。

```
rm -fr /var/www/html
ln -fs /vagrant /var/www/html
```

##vagrantコマンド一覧
vagrant -hもしくはvagrant box -hでヘルプ

####Boxのリスト表示
vagrant box list

####Boxの初期化
vagrant init

####仮想マシン立ち上げ
vagrant up

####仮想マシン現状確認
vagrant status

####仮想マシン一時停止
vagrant suspend

####suspendからの復帰
vagrant resume

####仮想マシン再起動
vagrant reload

####仮想マシンシャットダウン
vagrant halt

####Boxの追加
vagrant box add

####仮想マシンの消去
vagrant destroy

####Boxを削除する
vagrant box remove

#CentOS7サーバ構築
##言語の変更
取得してきたBoxがなぜかドイツ語なので英語へ変更。
CentOS7では/etc/locale.confに言語が定義されている。

```
vim /etc/locale.conf

LANG="en_US.UTF-8"
```

参考：[RHEL7 のシステムロケールを変更する](https://access.redhat.com/ja/node/1562183)

##ファイアフォール停止/自動起動停止
ローカルなので停止する。

CentOS7ではiptablesではなく、firewalldを使用する。
chkconfigではなくて、systemctlを使う。

```
//ファイアフォール停止
systemctl stop firewalld

//ファイアフォール自動起動停止
systemctl disable firewalld
```

参考：[CentOS７ ファイアウォール停止方法](http://www.server-memo.net/centos-settings/centos7/firewalld-stop.html#firewalld-2)

##各ミドルウェアのインストール

[【環境構築】LAMP環境構築のメモ](http://qiita.com/kazu56/items/e12d309097fa7e75ac6f)

###Apache

```
yum install httpd
```

/etc/httpd/conf/httpd.confを修正

```
ServerTokens Prod
ServerSignature Off
Options -Indexes FollowSymLinks
ServerName XXX:80 #XXXはホスト名を指定
AllowOverride All
DirectoryIndex index.html index.html.var index.php
```

```
systemctl start httpd.service
systemctl enable httpd.service
```

###PHP

```
yum install --enablerepo=remi,remi-php56 php php-devel php-mbstring php-mcrypt php-mysql
```

/etc/php.iniを修正

```
expose_php = Off
max_execution_time = 120
error_log = syslog
post_max_size = 20M
default_charset = "UTF-8"
upload_max_filesize = 20M
allow_url_fopen = Off
date.timezone = Asia/Tokyo
session.hash_function = 1
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output =  UTF-8
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none
```

###Python

```
yum install python
```


###MySQL5.6

```
yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum -y install mysql-community-server
```

/etc/my.cnfを修正する。

```
[mysqld]
character-set-server=utf8 #追加
default-storage-engine=InnoDB #追加
innodb_file_per_table #追加

[mysql]
default-character-set=utf8 #追加

[mysqldump]
default-character-set=utf8 #追加
```