サクッとLaradock,爆速環境構築

#初めに
環境構築は勉強も仕事に置いても最初にしてかなり重要な一環で有ります,今回はLaradockでPHP環境構築の方法を分かりやすく紹介していきます
![alt](https://blog.infinitydirect.com/wp-content/uploads/2018/10/laradock.png)
##事前準備
　**Docker**と**git**だけを準備しておいてください

#####Docker ダウロードリンク

- Mac -- https://hub.docker.com/editions/community/docker-ce-desktop-mac
- Windows -- https://hub.docker.com/editions/community/docker-ce-desktop-windows
- linux(ubuntu) -- https://docs.docker.com/install/linux/docker-ce/ubuntu/
- linux(centos) -- https://docs.docker.com/install/linux/docker-ce/centos/
 
`Windowshomeはdockerに対応してない為仮想マシン作ってからdockerをダウロードして下さい`
ダウロード終了後`docker --version`を使って確認してみましょう

```
 ~ $ docker --version
Docker version 18.09.2, build 6247962
```
version確認出来たらオーケーです

#####Docker Composer
コンテナを管理するのツール,linuxユーザーはDockerをインストール後,別途に入れる必要があります
ダウロードリンクhttps://docs.docker.com/compose/install/
`docker-compose --version`でバージョン確認

```
~ $ docker-compose --version
docker-compose version 1.23.2, build 1110ad01
```

##Laradockインストール
公式ドキュメントURL https://laradock.io/getting-started/#installation

使用方法はAとB二つありまして
<img width="873" alt="スクリーンショット 2019-04-03 22.46.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/320164/c1b968ac-1dbb-dd51-071e-3a6d4a184cf6.png">
ここでは`Setup for Multiple Projects`を選びましょう、一つの環境が複数プロジェクトに対応しやすくなります

プロジェクト置きたいディレクトリに`code`というファイルを作ってください,そしてファイル内に入って
`git clone https://github.com/laradock/laradock.git`を実行してください
終了後は

```
~/[プロジェクト置きたいディレクトリ]/code/laradock
```
の様なディレクトリ構成になってるはずです
**Laradock**のダウロードは完了です

##セッティング
laradockフォルダに入って

```
cp env-example .env
```
を実行してください、env-exampleファイルの内容をコピーして.envとして保存

#####nginxセッティング
```
~/code/laradock/nginx/sites
```
に入ってください,四つのファイルが確認できます

```
app.conf.example   default.conf	 symfony.conf.example   laravel.conf.example
```
`cp laravel.conf.example [後で作るプロジェクト名].conf`
を実行してください,私はblogというプロジェクトを**後で**作る予定なので、
cp laravel.conf.example blog.conf を実行します

 実行後,`[後で作るプロジェクト名].conf`ファイルを編集します

```[後で作るプロジェクト名].conf
server {
.
.
.
    server_name 後で作るプロジェクト名.test;
    root /var/www/後で作るプロジェクト名/public;
.
.
.
    error_log /var/log/nginx/後で作るプロジェクト名_error.log;
    access_log /var/log/nginx/後で作るプロジェクト名_access.log;
}
```
修正後保存してからmysqlの設定見ていきます
#####Mysqlセッティング
下記のディレクトリ内で`.env`ファイルを開いでください

```
~/[プロジェクト置きたいディレクトリ]/code/laradock
```

```[.env]
MYSQL_VERSION=latest
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

```
上記のはデフォルト設定になってます,mysqlv8.0が起動されますが、`5.7`の時は`mysql_native_password`認証使用してましたが`8.0`では`caching_sha2_password`に変わってます,いつも使用してるMysqlClientがdbに繋がらない可能性があるので、もう一ヶ所の設定を追加します

```
laradock/mysql/my.cnf
```
`my.cnf`ファイルを開き
空いてる所に`default_authentication_plugin=mysql_native_password`を追加してください
つまり認証形式をいつもの`mysql_native_password`へ指定

####UP
セティング終わりましたので,コンテナ立ち上げていきます,laradockディレクトリ内で

```
 docker-compose up -d nginx mysql redis
```
を実行して下さい、 初回では数分かかると思います
終了後`docker-composer ps`を実行してください

```
           Name                          Command                State                       Name                          Command               State                       Ports                     
---------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp                                      
laradock_mysql_1              docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp, 33060/tcp             
laradock_nginx_1              /bin/bash /opt/startup.sh        Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp      
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up      9000/tcp                                                      
laradock_redis_1              docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp                        
laradock_workspace_1          /sbin/my_init                    Up      0.0.0.0:2222->22/tcp 
```
`hosts`に内容追加


```[ディレクトリ]
mac
/etc/hosts

windows
C:\Windows\System32\drivers\etc\hosts
```
`127.0.0.1 blog.test`を空いてる所に追加して下さい

####laravelインストール
`docker-compose exec workspace bash`を実行して下さい, コンテナに入ってからディレクトリ内には`laradock`だけが存在してるはずです

`composer create-project --prefer-dist laravel/laravel blog`実行してlaravelをインストールして下さい`blog`の所はnginxセッティング時入力したプロジェクトに入れ替えてください

インストール終了後`blog.test`にアクセス出来たら成功です
<img width="1417" alt="スクリーンショット 2019-04-04 10.40.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/320164/26775aee-9125-220a-281a-e1167c5bd44f.png">
最後にlaravelの.envを修正して完了です

```:.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=default
DB_PASSWORD=secret

REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
```

####mysql補足
laradockはphpmyadminコンテナ用意してありますので
`docker-compose up -d phpmyadmin`で起動できます,起動後http://localhost:8080でアクセス 出来ます
<img width="508" alt="スクリーンショット 2019-04-04 10.52.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/320164/ff70fd1d-8fa3-aa2f-62eb-237038720d56.png">
ユーザ名とパスワードrootでログイン出来ます

laravelの.env内にblogというdbに接続すようの設定してますので,blog データベース作ります,出来たら
defaultユーザーにblogデータベースの操作権限を与えます,下記のクエリを実行

```
GRANT ALL ON `package`.* TO 'default'@'%'
```

また phpmyadminを使用せずデータベース作って、権限付与の方法もあります
公式ドキュメント https://laradock.io/documentation/#create-multiple-databases-mysql


```
cp mysql/docker-entrypoint-initdb.d/createdb.sql.example createdb.sql
```
laradockディレクトリを実行し,createdb.sqlを編集

``` :createdb.sql
.
.
.
CREATE DATABASE IF NOT EXISTS `blog` COLLATE 'utf8mb4_unicode_ci' ;
GRANT ALL ON `blog`.* TO 'default'@'%' ;

FLUSH PRIVILEGES ;
```

phpmyadminで作ったデータを削除し,mysqlコンテナrestart

```
rm -rf ~/.laradock/data/*
docker-compose restart mysql
```
これでmysqlコンテナupされる時,createdb.sqlが自動で実行されてdb作られて、権限付与も完成します

restartしたくなかったら

```
docker-compose exec mysql bash
$ mysql -u root -p < /docker-entrypoint-initdb.d/createdb.sql
```

以上で出来上がりです、docker環境試してみたい方は是非laradock使ってみてください