タダケンのEnjoy Tech

楽しみながらラクに成果を上げる仕組みを考える

Laravelの開発環境をLaradockを使って構築する方法

f:id:tadaken3:20180629232929p:plain こんにちは!
タダケン(@tadaken3)です。

今回は、PHPフレームワーク「Laravel」の開発環境の構築方法についてまとめました。本記事では、Dockerを用いたLaradockを使って開発環境を構築する方法をご紹介します。Laradockを使い、以下の構成の開発環境を作成していきましょう。

  • WEBサーバー:Nginx
  • DBサーバー:MySQL
  • DBクライアントツール:phpMyAdmin

LaradockはいくつかのDockerfileとcomposeの設定ファイルで構成されています。例えば、WEBサーバーをApacheに変更したり、DBサーバーをPostgreSQLに変更したりといったこともできます。

動作環境は「macOS High Sierra v10.13.4」です。

Laradockファイルの取得

まずMyProject(お好きな名前)を作成して、そこにLaradockを配置していきます。最終的には以下のような構成になります。

/MyProject
├── laradock
└── src ... (ここにLaravelが配置される)

まずはMyProjectディレクトリを作成し、Laradockを取得します。

$ mkdir MyProject
$ cd  MyProject
$ git clone https://github.com/LaraDock/laradock.git
$ cd laradock

では、laradockディレクトリに入って早速使ってみましょう。

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

最初にenv.sampleファイルをコピーして.envファイルを作成します。この.envファイルに環境構築時の設定情報を書き込んでいきます。

$ cp env-example .env

まずはDATAの保存する場所を変更します。標準の設定だとルートディレクトリの配下にファイルが永続化されていたようです。

今回は開発環境ということで、MyProject配下のlaradockディレクトリにファイルを保存するように変更します。

# .env
# Choose storage path on your machine. For all storage systems 

- DATA_PATH_HOST=~/.laradock/data
+ DATA_PATH_HOST=.laradock/data

続いて、MySQLの設定を変更します。標準の設定だとMySQLのバージョンが「latest」となっています。2018年4月19日にリリースされたMySQL 8.0が最新版となります。

ただ、今回は開発環境ということで、最新版のバージョン8.0ではなく、バージョン5.7.22に固定したいと思います。(MySQL8.0はまだリリースされたばかりで一部対応していないツールなどもあるためです)

また、MySQLコンテナが立ち上がる際に作成されるデータベースやユーザー、パスワードなども変更しておきます。

# .env
### MYSQL #################################################
MYSQL_VERSION=5.7.22 # versionを固定
MYSQL_DATABASE=homestead #データベース名を変更
MYSQL_USER=homestead #ユーザー名を変更
MYSQL_PASSWORD=hogehoge #パスワードを変更
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

Docker コンテナを起動する

.envファイルの編集が終わったら、nginx、mySQL、 phpMyAdminのDockerコンテナを立ち上げていきます。(初回はDockerイメージを取得するため時間がかかるかもしれません)

$ docker-compose up -d nginx mysql phpmyadmin

問題なく起動したら http://localhost へアクセスします。

まだ Nginx の 404 ページが表示されていますが、ここに” Laravel “がインストールされることになります。

f:id:tadaken3:20180629230557p:plain

http://localhost:8080にアクセスするとphpMyAdminツールの画面が表示されます。さきほど、.envで設定したユーザー名でログインできるか確認しておきましょう。

f:id:tadaken3:20180629230520p:plain

Workspaceコンテナへの接続

laravelでの開発を行うためにはどうしてもcomposerやnodeなどのツール類が必要になってきますが、これら必要なツールを一式用意してくれるコンテナイメージがworkspaceです。

workspaceコンテナはLaradockでコンテナを立ち上げた際に同時に起動されています。

docker-compose psでコンテナが立ち上がっているか確認します。

$ docker-compose ps
           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                  
laradock_nginx_1              nginx                           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_phpmyadmin_1         /run.sh supervisord -n          Up      0.0.0.0:8080->80/tcp, 9000/tcp          
laradock_workspace_1          /sbin/my_init                   Up      0.0.0.0:2222->22/tcp

もし起動していなければ、直接起動します。

$ docker-compose up -d workspace

Laravelのインストール

では、いよいよLaravelのインストールをおこなっていきます。Laravelのインストールをするためworkspaceコンテナに接続します。

$ docker-compose exec --user=laradock workspace bash

workspaceコンテナでは composer をはじめ、開発に必要な多くのコマンドが利用できる状態になっています。workspaceコンテナ内でcomposerを使いLaravelのプロジェクトを作成します。

/var/www# composer create-project laravel/laravel src

ちなみにデフォルトでは、workspaceの/var/wwwはプロジェクトルートにマウントされています。そのため、MyProjectの下にappディレクトリが作成され、その下にlaravelのファイルが保存されていきます。

MySQLの接続設定

では、workspaceコンテナで作業を進めていきます。MySQLへ接続できるようにしておきます。laravelのプロジェクトの配下に.env.sampleファイルをコピーして.envファイルを作成します。Laradockの.envファイルとは異なるのでご注意ください。

# cd src
# cp .env.example .env

DBで始まる部分を編集し、MySQLの接続設定を書き込んでいきます。先程、作成したデータベース名、ユーザー名などを入力します。

#.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=hogehoge

Laravel には、認証用にデフォルトでテーブル定義が用意されていますので、それを作成してみます。

/var/www/src# php artisan migrate
/var/www/src# php artisan key:generate

データベースへの接続が問題なければ、マイグレーション情報を格納する migrations テーブルをはじめ、いくつかのテーブルが作成されているのが確認できると思います。

設定が終わったら一度、workspaceコンテナから抜けましょう。

最後にLaradockの.envファイルを編集して、アプリケーションのPATHを変更します。APP_CODE_PATH_HOSTの部分を変更するとworkspaceのマウント箇所、nginxの参照先が変わります。

############################
# General Setup
############################

### Application Path
# Point to your application code, will be available at `/var/www`.

APP_CODE_PATH_HOST=../src/

変更が終わったら、nginxコンテナを再起動します。

$ docker-compose up -d nginx

では、ふたたび、http://localhost へアクセスします。 するとLaravelのサイトが表示されます。

f:id:tadaken3:20180629230429p:plain

これでLaradockを使ったLaravelの環境構築は終わりです。Laravel便利ですね。

最後に少しお願いです。

ここまで読んでいただきありがとうございます。

最後にあなたに少しお願いがあります。この記事が少しでも役に立った、気付きがあったという方は、ぜひこの記事をTwitterにシェアしていただきたいです。

はてなブックマークをしていただく形でも大丈夫です。コメント付きだと、もっと嬉しいです。

ぜひ、よろしくお願いいたします。