VagrantでLAMP環境構築 + Cakephp3.6

#目的と理由
- XAMPPを使用するのではなく、Vagrantを使って環境構築したい。
- Linux,MySQL,cakephp3のインストールが面倒くさいから一気に整えてしまいたい。
- Cakephp3でDBでユーザー作成・権限付与、Cakephp3との接続の方法が知りたい。

実際にVagrantのインストールから
DB設計に移行したところまでを記載します。
こちらの記事がちょっとした環境構築の手順書になれば幸いです。

#目次
1)VirtualBox,Vagrantのインストール
2)Vagrantfileの作成・修正
3)MySQL,Apache,PHPインストールの下準備
4)Vagrant upとその後の確認事項
5)Cakephp3のインストール
6)Apacheのconfigファイルの編集
7)MySQLのユーザーの作成と権限付与
8)Cakephp3とMySQLの接続
9)まとめ

#構築手順
####1)VirtualBox,Vagrantのインストール
どちらもOSにあったものをダウンロードする
※私の場合はWindows10 64bit

VirtualBoxのダウンロードとインストール
https://www.virtualbox.org/wiki/Downloads
Vagrantのダウンロードとインストール
https://www.vagrantup.com/downloads.html

####2)Vagrantfileの作成・修正
- Vagrant fileの作成

```
# Vagrantfileを置きたいディレクトリの作成
mkdir vagrant

# srcを置きたいディレクトリの作成
mkdir src

# Vagrantfileの作成(Vagrant init)
cd vagrant

# 新しくディレクトリの作成をしたい場合はmkdir
vagrant init "bento/centos-7.4"
```
※vagrantディレクトリとsrcディレクトリは同じ階層で作成する
bentoはchef社が提供しているvagrant用のbox
こちらがbentoの一覧↓
https://app.vagrantup.com/bento

- Vagrantfileの修正

```
# コメントアウト(#)を削除
config.vm.network "private_network", ip: "192.168.33.10"

# パーミッションの設定
# config.vm.synced_folderの記述を修正してコメントアウト(#)を削除
config.vm.synced_folder "../src", "/vagrant", mount_options:['dmode=777','fmode=777']

# config.vm.provisionの記述を修正
config.vm.provision "shell", :path => "provision.sh"
```
※パーミッション設定しないと、Cakephp3がうまくインストールされなかったので注意
dmode:ディレクトリ、fmode:ファイルのパーミッション設定
dmode,fmodeについて詳しく書かれている記事↓
https://teratail.com/questions/29027
config.vm.networkについて詳しく書かれている記事↓
https://qiita.com/ringo0321/items/aec4c543cce63e60a529

####3)MySQL,Apache,PHPインストールの下準備
- provision.shの作成

```
# ディレクトリ内の確認
ls

# Vagrantfileがある階層でprovision.shの作成
touch provision.sh
```

※provision.shを使用しないでも、
vagrant up後にそれぞれインストールすることもできるが、
provision.shに書けばvagrant up時に勝手にインストールなどやってくれるので便利

- インストールなどの下準備

以下をすべてコピーして、作成したprovision.shにペースト↓

```
# Apache,unzip,gitのインストール
yum -y install httpd unzip git

# MySQLのインストール
yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum -y install mysql-community-server

# PHPのインストール
yum -y install epel-release
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum -y install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-intl php-mysql php-xml

# ApacheがVagrant up時に起動する設定
systemctl enable httpd.service
systemctl start httpd.service

# MySQLがVagrant up時に起動する設定
systemctl enable mysqld.service
systemctl start mysqld.service

# Vagrantの共有フォルダにパスを設定
rm -rf /var/www/html
ln -fs /vagrant /var/www/html
```

※共有フォルダのパス設定をすることによって、
Vagrant内の/var/www/htmlから下の階層をエクスプローラー（Mac:Finder）で確認できる
パッケージ管理ツール(rpm,yum,dnf)について↓
https://uxmilk.jp/9715
yumについての記事↓
http://www.atmarkit.co.jp/ait/articles/1608/29/news019.html
systemctlについての記事↓
https://qiita.com/sinsengumi/items/24d726ec6c761fc75cc9
rmコマンドの記事↓
https://wa3.i-3-i.info/word11170.html
lnコマンドの記事↓
https://wa3.i-3-i.info/word11183.html

####4)Vagrant upとその後の確認事項
- Vagrantの起動

```
# Vagrantfileがあるディレクトリまで移動
cd vagrant

# Vagrantfileがあるか確認
ls

# Vagrantを起動
vagrant up
```

※終わるまでに時間がかかるので、エラーがでなければ待つのみ

- vagrant up後の確認

```
# Vagrant内にログイン
vagrant ssh

# Apacheバージョン確認
httpd -version

# MySQLバージョン確認
mysql --version

#PHPバージョン確認
php -v
```

※それぞれバージョンが確認できたら環境構築は完了
sshについての記事↓
https://wa3.i-3-i.info/word11722.html

####5)Cakephp3のインストール

- composer.phar,Cakephp3のインストール

```
# 共有フォルダに移動
cd /var/www/html

# composer.pharのインストール
curl -s https://getcomposer.org/installer | php

# Cakephp3のインストール
php composer.phar create-project --prefer-dist cakephp/app cms
```
※Cakephp3インストールの"cms"はディレクトリ名
※より詳しい内容はこちら(Cakephp book)↓
https://book.cakephp.org/3.0/ja/quickstart.html
composerについての記事↓
https://qiita.com/yando/items/7711be5116e5392c7c96

####6)Apacheのconfigファイルの編集
- httpd.confの修正

```
# Apacheのconfigファイルを参照
sudo vi /etc/httpd/conf/httpd.conf

# AllowOverride NoneをAllに変更
<Directory "/var/www/html">
    ...
    AllowOverride All
</Directory>

# Apcheの再起動
sudo systemctl restart httpd
```

※この作業をしないとCSSが反映されないので注意

####7)MySQLのユーザーの作成と権限付与
- MySQLでユーザーの作成

```
# rootでMySQLにログイン
mysql -u root

# ユーザーの作成
create user {username}@localhost identified by {password};
```

※パスワードが必要なければ、identifiedからは記述しない

- 作成したユーザーの確認

```
# DB'mysql'に移動
use mysql

# ユーザーの確認
select * from user\G;
```

- 権限の付与

```
# 全DBの全権限を作成したユーザーに付与
grant all on *.* to {username}@localhost identified by {password};
```

※権限付与に制限を設けたい場合はgrant all on *を変更する必要あり
※パスワードが必要なければ、identifiedからは記述しない

- ログインの確認

```
# 一度MySQLから出る
exit

# 作成したユーザーでMySQLにログイン
mysql -u {username} -p
```

※パスワードをなしにした場合はEnterでログインが可能

- DBの作成

```
# DBの作成
create database {DBname} character set utf8mb4;

# DBを確認
show databases;
```

※DB作成のCHARACTER SET utf8mb4は適宜変更

####8)Cakephp3とMySQLの接続
- Cakephpのapp.phpの編集

```
# cms > config > app.phpを参照
# username,password,databaseを修正
'Datasources' => [
        'default' => [

            ...            

            'username' => '{username}',                  <--修正
            'password' => '{password}',                  <--修正
            'database' => '{DBname}',                    <--修正

            ...

```

※"cms"は作成したディレクトリ名
※パスワードをなしにした場合は''にする

- ローカルサーバーにアクセス

```
# 作成したCakephpのディレクトリにアクセス
http://192.168.33.10/cms
```

※"cms"は作成したディレクトリ名

![alt](https://camo.qiitausercontent.com/d1bf28dc600f1acb86d48999799a40bef3772eae/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3231373433392f39663131343234652d653435312d613936622d656438352d3939386331316162313737652e706e67)

※DataBaseの欄のマークが緑になっていたら、接続成功

- Vagrant環境の停止

```
# Vagrant環境を停止する
vagrant halt
```

####9)まとめ
この構築をすることで、XAMPPに頼らず環境構築することができます。
次回からのvagrant upはさほど時間がかからずに起動します。
お疲れ様でした！