Laradockを使ってLaravel環境を構築した

# はじめに
今更感満載ですが、 流行りの `Laravel` を `Laradock` を用いて立ててみました。
Qiitaだけでも漁るといっぱい記事が出てくる内容にはなりますが、ご了承くださいm(＿ ＿)m

# Laradockとは？
[こちら](http://laradock.io/) になります。
dockerでLaravelを動かすために開発されたプロジェクトです。
様々なPHPのバージョン、DB、ミドルウェアをチョイスすることが出来るようです。

# 前提
下記モジュールがインストールされていること。
それぞれ参考記事を確認いただければ、サクッとインストール可能です。

* Docker  
　参考記事：　[DockerをMacにインストールする](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81) 
* git  
　参考記事：　[購入直後のMacでGitコマンドを使えるようになるまで
](https://qiita.com/furusin_oriver/items/974a7b7fb8c56ad88d6e) 

# Laradockのインストール
## プロジェクト用ディレクトリ作成
まずは下記コマンドで、プロジェクト用のディレクトリを作成します。

```zsh
% mkdir ~/workspace/laravel_sample
% cd ~/workspace/laravel_sample
```

## githubからのclone
下記コマンドで、githubから `Laradock` をダウンロードします。

```zsh
% git clone https://github.com/Laradock/laradock.git
Cloning into 'laradock'...
remote: Enumerating objects: 10007, done.
remote: Total 10007 (delta 0), reused 0 (delta 0), pack-reused 10007
Receiving objects: 100% (10007/10007), 8.99 MiB | 3.30 MiB/s, done.
Resolving deltas: 100% (5432/5432), done.
```

# .envファイルの修正
クローンした `Laradock` ディレクトリ内にある、 `env-example` をコピーして 設定定義用の `.env` を作成します。

```zsh
% cd laradock
% cp env-example .env
% ls -l .env
-rw-r--r--  1 member group  27511  1 20 17:35 .env
```

その後、 `.env` ファイルに、下記を追加します。

```zsh
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
```

# dockerコンテナの実行
これでコンテナを起動する設定が完了したため、任意のコンテナを実行します。
今回の例では `nginx` `mysql` `redis` を実行しています。
サポートされているミドルウェアについては、 [公式ページ](http://laradock.io/) をご確認ください。

```zsh
docker-compose up -d nginx mysql redis workspace
```

# dockerコンテナの起動確認
下記コマンドでコンテナが起動していることを確認します。

```zsh
% docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
359efff2066b        laradock_nginx       "/bin/bash /opt/star…"   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
e920c68c0061        laradock_php-fpm     "docker-php-entrypoi…"   2 minutes ago       Up 2 minutes        9000/tcp                                   laradock_php-fpm_1
192ebe58ccea        laradock_workspace   "/sbin/my_init"          2 minutes ago       Up 2 minutes        0.0.0.0:2222->22/tcp                       laradock_workspace_1
84fbc83b3730        docker:dind          "dockerd-entrypoint.…"   2 minutes ago       Up 2 minutes        2375-2376/tcp                              laradock_docker-in-docker_1
28c432f44127        laradock_mysql       "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp          laradock_mysql_1
1722ae0554b7        laradock_redis       "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:6379->6379/tcp                     laradock_redis_1
```

このまま `http://localhost` にアクセスすると、nginxの404ページが表示されると思います。

# Laravelプロジェクトの作成
まずは下記コマンドを実行し、 `laradock_workspace` のイメージから作られたコンテナの中に入ります。

```zsh
docker exec -it laradock_workspace_1 bash
root@192ebe58ccea:/var/www#
```
## プロジェクト作成
下記コマンドで `Laravel` プロジェクトを実際に作成します。

```zsh
composer create-project laravel/laravel laravel_sample
```

## 権限変更
webサーバーから書き込みを許可するために、権限を変更する必要があるため、
下記コマンドを `storage ` `bootstrap/cache` に対して実行します。

```zsh
cd laravel_sample
chmod 766 storage
chmod 766 bootstrap/cache
```

## nginxのドキュメントルートの設定
このままだと `nginx` が別のディレクトリを参照しているため、
laradockディレクトリ内の `default.conf` を修正して、ドキュメントルートを設定します。

```zsh
vim /var/www/laradock/nginx/sites/default.conf
```

13行目あたりにある、 `root` の部分を、 
`laravel` プロジェクトの `public` ディレクトリに修正します。

```zsh
 12     server_name localhost;
 13     root /var/www/laravel_sample/public; # この部分を修正。laravel_sampleはプロジェクト名。
 14     index index.php index.html index.htm;
```

ここまで全て完了したら、dockerコンテナから出ます。

```zsh
root@192ebe58ccea:/var/www# exit
exit
```

## 設定の反映
設定を反映するために、下記コマンドを実行し、コンテナの再起動を行います。
(コンテナIDは `laradock_nginx` のものを指定します。)

```zsh
docker  restart 359efff2066b
```

# 起動確認
ブラウザから `http://localhost` にアクセスし、下記画面が表示されることを確認します。
<img width="800" alt="スクリーンショット 2020-01-20 18.31.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66330/3ee98f78-25a8-aeeb-0fc4-8e1c84ee897e.png">

これでLaravelが立ち上がりました！簡単！

# まとめ
`Laradock` を使用すると、 `Laravel` の開発環境、
また必要な各種モジュールを簡単にインストールすることができます。

今回の記事では触れませんでしたが、
ホストの `Laravel` プロジェクトと `Docker` 内の `Laravel` プロジェクトをマウントすることで、
ホスト側を修正すると `Laravel` プロジェクトに即時反映する環境を作ることができます。
下記ページが参考になるかと。。
[【Docker】Dockerでホストのディレクトリをマウントする
](https://qiita.com/Yarimizu14/items/52f4859027165a805630)

`Docker` 便利なので、どんどん使って慣れていきたいですね！
読んで頂きありがとうございました！

# 共に働くWebエンジニアを募集しています!
不動産SHOPナカジツでは自社サービスを作っていく仲間を募集しています。
詳しくは[Wantedly](https://www.wantedly.com/projects/134741)からお問い合わせください。
お待ちしております！