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


はじめに

こちらは TECOTEC Advent Calendar 2019 の13日目の記事です。
折り返しとなります。

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

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

やること

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

以上となります。

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

実演

Dockerのインストール

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

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

LaraDockのインストール

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

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

cloneします。

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

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

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

Laravelプロジェクトの作成

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

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

ターミナルで作業
$ 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プロジェクトを作成します。

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

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

LaraDockの設定変更

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

workspace内で作業
$ exit

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

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

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

.env
# APP_CODE_PATH_HOST=../
APP_CODE_PATH_HOST=../server/

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

.env
# DATA_PATH_HOST=~/.laradock/data
DATA_PATH_HOST=.laradock/data/

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

.env
# NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTP_PORT=8880

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

.env
# MYSQL_VERSION=latest
# MYSQL_DATABASE=default
# MYSQL_USER=default
MYSQL_VERSION=5.7
MYSQL_DATABASE=laradock
MYSQL_USER=laradock

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

.env
DB_HOST=mysql
REDIS_HOST=redis

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

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

Laravelの設定変更

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

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

.envを編集します。

workspace内で作業
$ vim .env

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

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

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

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

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

workspace内で作業
$ composer install

接続確認!

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

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

おまけ

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

認証機能の実装

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

workspace内で作業(ver5.xの場合)
$ php artisan make:auth
workspace内で作業(ver6.xの場合)
$ composer require laravel/ui
$ php artisan ui vue --auth

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

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

workspace内で作業
$ npm install && npm run dev

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

workspace内で作業
$ php artisan migrate

認証機能の完成です。


管理画面の実装

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

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

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

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

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


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

起動シェルを作ってみる

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ページ作るならあっという間です。

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

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