vagrantのローカル環境作る（centos7,nginx,mariadb,php7)

## virtualboxとvagrantインストール
Windows10に下記をインストールした

- virtualbox 5.1.14
- vagrant 1.9.7

## ホストマシンのhostsにドメイン追加しておく
hostsファイル（windows10で場所は下記）に追記する
C:\Windows\System32\drivers\etc\hosts
`192.168.33.10  hoge.com`を追記する
※Vagrantfile内でのIPアドレス指定や、あとで出てくるnginx内のドメイン名をこれに合わせる



## centos7インストール
参考：http://motomichi-works.hatenablog.com/entry/2017/07/29/010025

以下vagrantにインストールする。
コマンドはGit Bash上で実行。

vagrantにboxを追加する
`vagrant box add centos/7`を実行

下記のように質問されるので3でエンター

```
1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop
```
windows上にvagrant用の新しいディレクトリ作成して、そこで
`vagrant init centos/7`を実行

実行したディレクトリにVagrantfileができた。

---

（このまま`vagrant up`してみたらrsyncエラーが出たのと、
ipアドレス（とホストネーム）を指定したかったが、やってなかったのでVagrantfileに追記した）
Vagrantfileの`Vagrant.configure("2")...`以下に下記を追加した

```
Vagrant.configure("2") do |config|
～～
	config.vm.network "private_network", ip: "192.168.33.10"
	config.vm.hostname = 'hoge.com'
	config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
```
（rsyncエラー参考：http://qiita.com/tenmyo/items/c2bb714117c98ae979de ）
※通常のsyncフォルダができるのかは試してません。

これで`vagrant up`実行。
vagrantが立ち上がった。

## Nginxインストール
参考：https://academy.gmocloud.com/advance/20160721/3203

ここから先は`vagrant ssh`して、
`su`実行、パスワード`vagrant`入力してroot権限でコマンド実行していく。

yum でrpmパッケージをインストール
`yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm`

nginxをインストール
`yum install --enablerepo=nginx nginx`

nginxのdefault.confをコピーして新しいものを作り、最低限いじる。
`cp /etc/nginx/conf.d/default.conf  /etc/nginx/conf.d/hoge.conf`
.confファイルは読み込まれるので、default.confは名前を変えて読み込まれないようにしてみた。
`mv /etc/nginx/conf.d/default.conf  /etc/nginx/conf.d/default.conf_buckup`

hoge.confの中身をまるっと変更
（自分の指定したディレクトリを表示したい。あと最終的にphp使いたいのでそれも書く）
参考：http://qiita.com/you0328/items/cdc92e3fde2dc3bc1d51
参考ページのものにログの出力記述を追加した。

```
server {
  listen 80;
  server_name hoge.com;
  root /var/www;
  index index.php index.html index.htm;
  
  access_log /var/log/nginx/hoge_access.log;
  error_log /var/log/nginx/hoge_error.log;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    include fastcgi_params;
  }
}
```

nginxを起動
`systemctl start nginx`

ここでnginxを起動して指定したドメイン（hoge.com）にアクセスしても403エラー Forbiddenになった・・
調べたところSELinuxの設定を変えればよいかもしれないとのこと。
参考：
http://qiita.com/kieaiaarh/items/3455040597ee34c8c49e
http://blog.higty.xyz/archives/231/

現在のSELinuxを確認
`getenforce`
Enforcing と表示されて、これは有効の意味。
無効にする。

参考：http://rfs.jp/server/security/selinux01.html

configを編集
`vi /etc/selinux/config`

config内：enforcingをコメントアウトしてpermissiveにする。

```
#SELINUX=enforcing
SELINUX=permissive
```
※vagrant再起動で適用された。
※一時的な変更にしたい場合はconfig変更せずに下記コマンドを実行するだけ。
`setenforce 0`

vagrant再起動して`getenforce`で確認
Permissiveになった。

Nginxを再起動
`systemctl reload nginx`

忘れてたけど、vagrant起動時、常にNginx起動させる設定にしておく
`systemctl enable nginx`

nginxのconfigのrootに指定したディレクトリにテスト用index.htmlを置いて
hoge.comにアクセスするとページが表示された。



## PHP7インストール
参考：http://qiita.com/yanagikouta/items/6c2b0cbd02876e61c71c
phpenvでバージョン管理する方法で行う。

ここからは通常ユーザー（vagrant sshしたときのユーザー）で行う。
(※一度rootで実行してみて、参考ページとインストール先が違っていてうまくいかなかったので、通常ユーザーで再トライした。）

このあと使うのでGitインストール
`sudo yum install git`

phpenv本体インストール
`curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash`

php-buildをphpenvのプラグインフォルダ内にクローン
`git clone git://github.com/php-build/php-build.git ~/.phpenv/plugins/php-build`

.bash_profileの設定
`vi ~/.bash_profile`

.bash_profileに下記を追記

```
PATH=$PATH:$HOME/.phpenv/bin
eval "$(phpenv init -)"
```

.bash_profileをリロード
`source ~/.bash_profile`

ここまでで、`phpenv -v`で確認したらバージョンを確認できた。
※rbenvと表示されたけど、とりあえず無視。

phpインストールに必要な物をインストール

```
sudo yum -y install gcc libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel readline-devel libxslt-devel autoconf automake patch
sudo yum --enablerepo=epel -y install libmcrypt-devel libtidy-devel
```

参考ページのre2cのインストールでエラーが出てしまったので、
re2cをいれるため（と、ほかエラーが出たため）下記もインストール

```
yum -y --enablerepo=epel install libXpm-devel freetype-devel re2c libicu-devel gcc-c++
```

このあとphpenvからphp7インストール（`phpenv install 7.0.0`実行）してエラーが出たので追加インストールする

エラー内容はこれ

```
configure: error: Please reinstall the BZip2 distribution
```

下記を参考にbzip2-develを追加インストール
参考：http://qiita.com/daikiojm/items/0c89656eb934ae279bf0
`yum install bzip2-devel`

phpenvでphpバージョン指定してインストール
`phpenv install 7.0.0`

これでphpenv installの完了までいけた。※かなり時間がかかった。

参考ページに沿って続きを進めていく
参考：http://qiita.com/yanagikouta/items/6c2b0cbd02876e61c71c

phpenvの更新とバージョン確認

```
phpenv rehash
phpenv versions
```

利用するphpのバージョンを設定
`phpenv global 7.0.0`

phpのバージョンを確認
`php -v`
phpのバージョンが確認できた。


参考ページに沿ってphp-fpmまわりを実行していく。
php-fpmの設定ファイルを作成

```
cd ~/.phpenv/versions/7.0.0/etc
cp php-fpm.conf.default php-fpm.conf
```

php-fpm.confの編集
`vi php-fpm.conf`
編集内容は下記
- `pid = /var/run/php-fpm.pid`を追記、
- events.mechanism = epollのコメントを外す

この時点では/var/run/php-fpm.pidがないけど、
php-fpmが起動された際に/var/run/php-fpm.pidを作ってくれるらしい。 

次、confファイルを作成

```
cd ~/.phpenv/versions/7.0.0/etc/php-fpm.d
cp www.conf.default www.conf
```

　www.confの編集
`vi www.conf`

- user = nobodyとgroup = nobodyをコメントアウトし、その真下に以下を追加

```
user = nginx
group = nginx
```

- listen = 127.0.0.1:9000をコメントアウトし、その真下に以下を追加

```
listen = /var/run/php-fpm.sock
listen.owner = nginx
listen.group = nginx
```

php-fpmの起動と自動起動登録
php-fpm起動用スクリプトをソースディレクトリ内から複製して作成

```
sudo cp /tmp/php-build/source/7.0.0/sapi/fpm/php-fpm.service.in /etc/systemd/system/php-fpm.service
```

php-fpm.service編集
`sudo vi /etc/systemd/system/php-fpm.service`
[Service]内（Service下）の項目を全て消し下記に置き換える

```
Type=simple
PIDFile=/var/run/php-fpm.pid
ExecStart=/home/vagrant/.phpenv/versions/7.0.0/sbin/php-fpm --nodaemonize --fpm-config /home/vagrant/.phpenv/versions/7.0.0/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
```

php-fpm 起動
`sudo systemctl start php-fpm`

自動起動設定
`sudo systemctl enable php-fpm`

最後にnginxを再起動
`sudo nginx -s reload`

--- 

ここまでで、index.php（<?php phpinfo();とだけ記述）をnginxのconfのrootディレクトリに配置したらページが表示された。


## MariaDB インストール
一部参考：http://normalblog.net/system/mariadb-install-settings/

以下すべてrootユーザーで実行しました。

MariaDB インストール
`yum install mariadb mariadb-server`

インストール確認
`rpm -qa | grep maria`

MariaDB 起動
 `systemctl start mariadb`

初期設定
 `mysql_secure_installation `
 ※実行したら質問してくる。よくわからなかったので全部noと答えてみた。

confファイルにUTF8記述を追加する
`vi /etc/my.cnf.d/server.cnf`

[mysqld]下に1行追加

```
[mysqld]
character-set-server=utf8
```

MariaDB再起動
`systemctl restart mariadb`

MariaDBが自動で起動するように
`systemctl enable mariadb`

### MariaDBにログインしてDB作る
ログイン
`mysql -u root`
※パスワードを入力する場合は`mysql -u root -p`

※以下メモとったときのままなので大文字と小文字が乱れてますが、どちらでも実行はできるみたいです。

DB作る
`CREATE DATABASE hoge;`

DB確認する
`show databases;`

ユーザー作る
hogeにはさきほど作ったDB名、
user_nameには任意のユーザー名、
passwordには好きなパスワードを入力
```
GRANT ALL PRIVILEGES ON hoge.* TO "user_name"@"localhost" IDENTIFIED BY "password";
```

ユーザー一覧確認
`select Host, User, Password from mysql.user;`

\qでログアウト

---

以上です。