Docker環境でLaravelを構築するまで、わずか15分。

# はじめに

冬月「15分ぶりだね」
ゲンドウ「ああ、間違いない、”Laradock”だ」

Laradockを使えば、わずか15分でローカル環境にLaravel環境を構築できます！

# Laradockとは

Docker環境でLaravel環境を簡単に構築できるDockerイメージです。
Laradockのプロジェクトは大きくなり、SymfonyやWordpress環境までも構築出来るようになりました。

公式サイト → http://laradock.io

機能としては、Nginx, Apacheなどのwebサーバー、PHPの各バージョン、Mysql, PostgreSQL等の各データベースを自由に選択できます。

今回はNginx、PHP-FPMが動く環境を作り、Laravelを立ち上げるまでを記載します。

# 手順

まず、前提としてdockerをインストールしていること、`docker-compose`コマンドが実行できるようになっていることが必要です。私の環境はWindowsですが、Windowsの場合はインストーラーからインストールできました！:file_folder:

この後の大まかな流れは以下の通りです。

1. 適当なディレクトリを作成する
2. 作成したディレクトリ直下でLaradockをクローンする
3. Laradockのセットアップする
4. workspaceにログインし、Laravelをセットアップする
5. ブラウザで動作確認する

順を追って見てみましょう！

## 1.適当なディレクトリを作成する

今回はprojectsというディレクトリ名で作成。

## 2.作成したディレクトリ直下でLaradockをクローンする

projectsフォルダ内でLaradockをgithubからcloneします。

```bash
git clone https://github.com/laradock/laradock.git
```

## 3.Laradockをセットアップする

Laradockをクローンしたら、Laravel環境を構築するまでの下準備をします。下記の手順を踏んでセットアップしていきます。

※Laravelを実行するには最低限、以下の環境が必要です。こちらも今回の手順で構築していきます。

- nginx（webサーバー。Apacheでも良いが、今回はLaradockの公式マニュアルに沿いました）
- php-fpm（PHPを実行する環境。いわゆるfastCGI）

### .envの作成
projects直下のlaradockディレクトリ内のenv-exampleファイルを .env （※先頭にドットが入っているのに注意）にリネームもしくはコピー＆リネームする。

```bash
cp env-example .env
```

### dockerコンテナの立ち上げ

laradockディレクトリ内で次のコマンドを叩く:hammer:

```bash
docker-compose up -d nginx
```

なんとこれでnginxとphp-fpmが構築されたローカルサーバーが立ち上がります！（仕事が早い！）
上記コマンドは、初回実行時にはnginxをセットアップすること、起動することの両方の役割で使われます。
なので、初回実行時は少し時間がかかると思われますので、コーヒーでもいれて待ちましょう。:coffee:

### コンテナが立ち上がっているかを確認する

laradockディレクトリ直下で下記のコマンドを叩く:hammer:

```bash
docker-compose ps
```

![07a.jpg](https://qiita-image-store.s3.amazonaws.com/0/106765/d1912cd2-c8b5-d818-4571-7243b4a935ca.jpeg)
（nginx, php-fpm, workspaceがUpになっているのを確認する）

## 4.workspaceにログインし、Laravelをセットアップする

nginxをセットアップすると、自動的にLinuxコンテナ（`cat /etc/lsb-release`で確認するとUbuntuが入っているのが確認できる）もセットアップされる。これをworkspaceと呼ぶ。
まずは以下のコマンドを叩き、workspaceにログインする。

```bash
docker-compose exec workspace bash
```

![07b.jpg](https://qiita-image-store.s3.amazonaws.com/0/106765/50612ea1-4cb4-2952-e255-eed1d6d227ab.jpeg)

workspaceにログインすると、最初の状態では/var/wwwにいる。この場所は、Windows側のprojectsフォルダ直下と同様の場所を表している。（laradockディレクトリ直下ではない！:open_mouth:）

![03.jpg](https://qiita-image-store.s3.amazonaws.com/0/106765/354e1e46-8b3b-47bc-b182-643f46ffd4ef.jpeg)
（workspaceの/var/www = windowsのprojectsディレクトリ直下、と考えておｋ！）

**お待たせしました。:musical_note:**

Laravelのインストール時に使っている「Composer」は、すでに最初から入ってます！
/var/www直下で以下のコマンドを叩く:hammer:

```bash
composer create-project laravel/laravel app01
```
ちょっと時間がかかるかもですが、コーヒーでもいれて待ちましょう（二杯目）:coffee: :coffee:
※上記のプロジェクトディレクトリ名となるapp01の名前は任意で！（プロジェクトディレクトリ名は後ほど使います）
あと、rootで実行するなと怒られるかもですが、今回はEnter押してスルーとします:kissing_smiling_eyes:

![08_02.jpg](https://qiita-image-store.s3.amazonaws.com/0/106765/a6defa97-440f-f8be-20ff-37dabcf48a0c.jpeg)
（こんな感じで完了していればおｋ…かな？）

現時点でディレクトリ構成は以下のようになっているかと思います。
親：projects
子1：laradock … Dockerコンテナ
子2：app1 … Laravel本体

## 5.ブラウザで動作確認する

http://localhost で確認できます…が！

![10.jpg](https://qiita-image-store.s3.amazonaws.com/0/106765/552c8ea7-34bd-91cb-7a63-014079f3188b.jpeg)
（白い画面が出てきました:innocent:）

ひとつ、忘れ物をしました:sweat_drops:ここで、nginx（webサーバー）の設定をします。設定ファイルを編集するため、一度、dockerコンテナを停止します。**Windows側のlaradockディレクトリ直下**で以下のコマンドを叩く:hammer:

```bash
docker-compose stop
```
これでdockerコンテナが全てストップします。

### nginxの設定ファイルを編集する

Windows側で設定ファイルを編集します。projects/laradock/nginx/sitesの中のdefault.confをdefault.conf.bak等の名前にコピー＆リネームします。
そして、同じディレクトリにあるlaravel.conf.exampleの中のテキストをコピーし、default.confにペーストします。

```bash
cd projects/laradock/nginx/sites
cp default.conf default.conf.bak
cp laravel.conf.example default.conf
```

次に、default.confの中の7行目あたりの`root /var/www/laravel/public`を`root /var/www/app01/public`に変更し、保存:floppy_disk:

### 再度、dockerコンテナを立ち上げる

laradockディレクトリ内で以下を叩く:hammer:

```bash
docker-compose up -d nginx
```

コンテナが立ち上がったら、ブラウザでhttp://localhostへアクセスします:dolphin:

![08_03_.png](https://qiita-image-store.s3.amazonaws.com/0/106765/96df6f1b-dfb9-40a6-c197-ba54160c3660.png)
（私が望んでいた白い画面だ！:snowman:）

おめでとうございます。これで、わずか15分でLaravel環境が立ち上がりました！

# 最後に
ローカル環境で構築することのメリットは、何と言っても本番環境に近い状態で、好きなだけ実験し、そして失敗できるという点です！(´ε｀ )

Laradockには様々な機能が搭載されているので、是非公式ドキュメントを見てみてくださいﾉｼ
http://laradock.io/introduction/

……冒頭の冬月とゲンドウのセリフは何だったんだって？うーん……ノリで書いてしまいました…:turtle: