LaraDockを使って10分でLaravel+Nginx+MySql+Redisのローカル環境を構築してみる。

# はじめに

こちらは [TECOTEC Advent Calendar 2019](https://qiita.com/advent-calendar/2019/tecotec) の13日目の記事です。
折り返しとなります。

Qiitaの記事や他所のブログでも散々書かれていることかと思いますが、復習がてらLaraDockを使ってLaravelのローカル環境を構築してみようと思います。
目指せ10分でローカル環境構築！

※当方macで作業しているため、macでの手順になります。Windowsの方は適時Windows版に読み換えてお試しください。

# やること

- Dockerのインストール
- LaraDockのインストール
- Laravelプロジェクトの作成
- LaraDockの設定変更
- Laravelの設定変更

以上となります。

ではさっそくやってみましょう。

# 実演

### Dockerのインストール

以下のサイトよりDocker for Macをダウンロードします。

<https://docs.docker.com/docker-for-mac/install/>

ダウンロードにはdocker hubへの登録が必要なので案内に従って登録してください。
`Docker.dmg`をダウンロードできたら起動してインストールします。
インストール後は`docker.app`を起動しておいてください。

### LaraDockのインストール
GitHubからLaraDockのファイルを取得します。
ターミナルを起動して作業ディレクトリへ移動してください。

```text:ターミナルで作業
$ cd ~/work
```

cloneします。

```text:ターミナルで作業
$ git clone https://github.com/LaraDock/laradock.git
```

取得できました。`laradock`ディレクトリが作成されています。
ワークスペースのコンテナを起動するために`.env`ファイルを作ります。

```text:ターミナルで作業
$ cd laradock
$ cp env-example .env
```

### Laravelプロジェクトの作成

※開発が進んでいる場合はこの作業はスキップしてください。
※チーム等で管理しているGitからソースを取得してください。

ワークスペースのコンテナを起動してログインします。

```text:ターミナルで作業
$ pwd
~/work/laradock
$ docker-compose up -d workspace
~~~省略
Creating laradock_workspace_1        ... done

$ docker-compose exec --user=laradock workspace bash
laradock@0c7610d35e08:/var/www$ 
```

ログイン完了です。
Laravelプロジェクトを作成します。

```text:workspace内で作業
$ composer create-project laravel/laravel server
```

`server`プロジェクトが作成されました。

### LaraDockの設定変更

ワークスペースからログアウトします。

```text:workspace内で作業
$ exit
```

`vim`で`.env`ファイルを開きます。（エディタならなんでもいいです）

```text:ターミナルで作業
$ pwd
~/work/laradock
$ vim .env
```

プロジェクトのパスを変更します。
元の記述をコメントアウトして追記するか、直接編集してください。

```text:.env
# APP_CODE_PATH_HOST=../
APP_CODE_PATH_HOST=../server/
```

MySqlのデータを永続化させないために作業ディレクトリへ変更します。
※プロジェクトごとにデータを管理する想定です。共通で問題ない場合はこの作業はスキップしてください。。

```text:.env
# DATA_PATH_HOST=~/.laradock/data
DATA_PATH_HOST=.laradock/data/
```

ポートを変更します。
※こちらは任意です。必要なければこの作業はスキップしてください。

```text:.env
# NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTP_PORT=8880
```

MySqlのバージョンと接続情報を変更します。
最新の8.xは色々あれなので5.7を指定します。
※最新で問題ない場合はこの作業はスキップしてください。

```text:.env
# MYSQL_VERSION=latest
# MYSQL_DATABASE=default
# MYSQL_USER=default
MYSQL_VERSION=5.7
MYSQL_DATABASE=laradock
MYSQL_USER=laradock
```

MySqlとRedisのホスト名を設定しておきます。
ファイル内の一番下に追記してください。

```text:.env
DB_HOST=mysql
REDIS_HOST=redis
```

設定を反映させるためコンテナを再起動します。
一緒にNginx・MySql・Redisを起動します。

```text:ターミナルで作業
$ pwd
~/work/laradock
$ docker-compose stop
$ docker-compose up -d workspace nginx mysql redis
```

### Laravelの設定変更

ワークスペースのコンテナにログインして作業します。

```text:ターミナルで作業
$ pwd
~/work/laradock
$ docker-compose exec --user=laradock workspace bash
laradock@0c7610d35e08:/var/www$ 
```

`.env`を編集します。

```text:workspace内で作業
$ vim .env
```

DBとRedis接続設定を書き換えます。

```text:.env
DB_HOST=mysql
DB_DATABASE=laradock
DB_USERNAME=laradock
DB_PASSWORD=secret
~~
REDIS_HOST=redis
```

パーミッションを変更します。

```text:workspace内で作業
$ chmod -R a+w storage
$ chmod -R a+w bootstrap/cache
```

依存ライブラリをインストールします。

```text:workspace内で作業
$ composer install
```

### 接続確認！

<http://localhost:8880/> にアクセスします。

![スクリーンショット 2019-12-13 11.41.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220835/42263068-9cd9-4927-645f-48564baaeca3.png)

Laravelのトップページが表示されれば完了です。
非常に簡単にLaravelの環境が構築できました。
ホストやDBの情報などは適時自分の使いやすいように変更してください。
NginxやMySqlの細かい設定はまた別の機会にかければ書きたいと思いいます。
というかそのままでローカルで使う分には全く問題ないのであまりいじったことがないです。


# おまけ
Laravelには便利な機能が沢山あります。

### 認証機能の実装

以下のコマンドを実行するだけで登録・ログイン・パスワードリセットなどが使用できるようになります。

```text:workspace内で作業（ver5.xの場合）
$ php artisan make:auth
```

```text:workspace内で作業（ver6.xの場合）
$ composer require laravel/ui
$ php artisan ui vue --auth
```

Laravelのバージョンで若干コマンドが異なるので注意が必要です。

表示を整えるためにnpm installとnpmを実行してcssとjsをコンパイルします。

```text:workspace内で作業
$ npm install && npm run dev
```

マイグレーションを実行します。

```text:workspace内で作業
$ php artisan migrate
```

認証機能の完成です。
![スクリーンショット 2019-12-13 11.44.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220835/629dcd71-8189-ccca-3066-ca7bb95e117e.png)
![スクリーンショット 2019-12-13 11.46.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220835/f0f39cd9-216d-575c-1df9-9520d80fad21.png)
![スクリーンショット 2019-12-13 11.46.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220835/1c53ab8c-6f29-6c5f-0d88-8c2f43f164c6.png)


### 管理画面の実装

ついでに管理画面も作ってみます。

```text:workspace内で作業
$ composer require encore/laravel-admin
```

以下のコマンドを実行します。

```text:workspace内で作業
$ php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
$ php artisan admin:install
```

<http://localhost:8880/admin/> にアクセスします。
初期のIDパスワードは、`ID:admin``パスワード:admin`となっています。

![スクリーンショット 2019-12-13 11.49.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220835/953e083b-0edf-b909-06bf-861b59b2a57d.png)
![スクリーンショット 2019-12-13 11.51.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220835/5b025cdd-5e8c-8bea-a144-c051786fc613.png)


そのままで使えることは少ないですが、上記で認証機能と管理画面が作れてしまいます。


### 起動シェルを作ってみる

PC起動後など起動コマンドが長かったりするのでシェルを作っておくと捗ります。

#### 起動
```up.sh
#!/bin/bash
cd ./laradock; docker-compose up -d workspace nginx mysql redis
```

#### ワークスペースへログイン
```exec_workspace.sh
#!/bin/bash
cd ./laradock; docker-compose exec --user=laradock workspace bash
```

#### 停止
```down.sh
#!/bin/bash
cd ./laradock; docker-compose down
```

# まとめ

LaraDockはローカル環境構築が非常に簡単です。
PHPでのメインフレームワークはしばらくLaravelが多くなりそうなので、LaraDockは扱えるようにしておくと色々便利そうです。
簡単なwebページ作るならあっという間です。

今後も色々試して使いこなしていきたいと思います。

よいエンジニアライフを！