仮想マシン(Centos) + docker + laravelの開発環境構築

# 背景
macでもwindowsでも同じ環境でdockerを使ってLaravelの
開発ができる環境を作りたかったのでトライ。疲れた。。。

##Vagrantのインストール
[ここからインストール](https://www.vagrantup.com/)

##Virtualboxのインストール
[ここからインストール](https://www.virtualbox.org/)

##CentOS7のboxを追加
```
# vagrant box add [vagrantのbox名] [boxのURL]
# boxのURLはhttp://www.vagrantbox.es/を参照
# 時間がかかるのでお茶でも飲みながら待ちます
$ vagrant box add https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

# ↓色々でてきて、最終的にこんなのが出ていればOK
# box: Successfully added box 'centos7' (v0) for 'virtualbox'!
```

## 追加したboxで仮想環境構築
```
# vagrantを使うためのディレクトリを作成
# 作成する場所はどこでもOK↓下では~/VM/に作成
$ mkdir ~/VM # ホームディレクトリにVMフォルダを作成
$ mkdir ~/VM/centos7 # 上で作ったVMフォルダの中にcentos7ディレクトリを作成
$ cd ~/VM/centos7 # 上で作ったディレクトリに移動

# vagrant init [vagrant box addで追加したvagrantのbox名]
$ vagrant init centos7 # Vagrantfileを生成
```

## Vagrantfile修正
```
vi Vagrantfile

- # config.vm.network "private_network", ip: "192.168.33.10"
+ config.vm.network "private_network", ip: "192.168.33.10"

- # config.vm.synced_folder "../data", "/vagrant_data"
+ config.vm.synced_folder "./sample", "/home/vagrant/sample"
```

## 仮想マシンと同期するディレクトリ作成
```
$ mkdir ~/VM/centos7/sample
```

## 仮想マシン起動
```
$ vagrant up # 仮想マシン起動
$ vagrant ssh # 仮想マシンにログイン
```

### terminalの左側が↓こうなってればOK
[vagrant@localhost ~]$
windowsの方はデフォルトではsshが使用できないので、
teratermをインストール + vagrant-teratermのプラグインをインストールすると簡単だと思います。
- [teratermのインストール](https://ttssh2.osdn.jp/)
- vagrant-teratermプラグインのインストール
`$ vagrant plugin install vagrant-teraterm`

上の作業ができたら、`vagrant ssh`の代わりに`vagrant teraterm`をコマンドプロンプトで実行
teratermが起動して、画面の左側が`[vagrant@localhost ~]$`になってればOK


# dockerの環境構築
ここから基本的に仮想マシンでの作業

## リポジトリの追加
```
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

## dockerのインストール
```
$ sudo yum install docker-ce-18.03.1.ce-1.el7.centos # バージョンを指定してインストール
$ sudo systemctl start docker # dockerを起動
$ sudo systemctl enable docker # 仮想マシン起動時にdockerも自動起動
```

## docker-composeのインストール
```
$ sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

# sudo しなくてもdocker使えるように現在のユーザーをdockerグループに入れる
$ sudo usermod -aG docker $USER
```

## 設定を反映させる
```
$ exit　# 仮想マシンからログアウト
$ vagrant reload # 仮想マシンを再起動
$ vagrant ssh # 仮想マシンにログイン
```

## Laradocの導入
```
# まずはgitが必要
$ sudo yum install git # バージョンが古いけど気にしない
```

## dockerイメージ(laradoc)の取得
```
$ git clone https://github.com/LaraDock/laradock.git
$ cd laradock
$ cp env-example .env
$ docker-compose up -d nginx mysql # めっちゃ時間かかる
```

## コンテナへログイン
```
docker exec -it laradock_workspace_1 /bin/bash
```

## Laravelのインストール
```
$ composer create-project --prefer-dist laravel/laravel sample "5.5.*"
$ exit # コンテナからログアウト
```

## nginxの設定変更(2箇所)
```
$ vi /home/vagrant/laradock/nginx/sites/default.conf

- server_name localhost;
+ server_name 192.168.33.10; # Vagrantfileに設定したIP

- root /var/www/public;
+ root /var/www/sample/public;
```

## 設定を反映させる
```
$ docker-compose stop
$ exit # 仮想マシンからログアウト
$ chmod -R 777 ~/VM/centos7/sample/storage/
$ vagrant reload
```

## dockerを起動
```
$ vagrant ssh
$ cd laradock
$ docker-compose up -d nginx
```

## 192.168.33.10にアクセスしてLaravelが表示されればOK!!
<img width="1440" alt="スクリーンショット 2018-08-21 14.28.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/142925/52b08f45-ff0a-231c-6432-4031e5ef96c3.png">

あとは自分のパソコンの/VM/centos7/sample/の中をいじって開発を進めましょう!!