🐕

Laradockで構築するLaravel Webアプリ開発環境

2020/12/08に公開

要望

  • Laravel Web アプリの開発環境を簡単に構築できるようしたい
  • MySQL、Redis 等のミドルウェアとの連携を、ローカル開発環境で気兼ねなく試したい
  • けど、DockerFile(docker-compose.yml)をゴリゴリ書きたくない
  • 無論、マシンをあまり汚したくない。

必要なもの

  • Docker Desktop
  • Git

構成

  • Laravel : 6.x
  • PHP : 7.4 系
  • リバースプロキシ:nginx
  • DB:MySQL 5.7.x
  • DB 管理ツール : phpMyAdmin

ディレクトリ構成

my_project  ←プロジェクトルート(任意の名前を設定)
├── laradock  ←Laradockディレクトリ
└── myapp     ←Laravelアプリケーション(任意の名前を設定)

構築手順

1. プロジェクトルートディレクトリ作成

mkdir my_project

2. プロジェクトルートディレクトリ直下に、Laradock をクローン

cd project_root
git clone https://github.com/Laradock/laradock.git

以下のように出力されたら、Laradock のクローン完了。

Cloning into 'laradock'...
remote: Enumerating objects: 11160, done.
remote: Total 11160 (delta 0), reused 0 (delta 0), pack-reused 11160
Receiving objects: 100% (11160/11160), 9.95 MiB | 2.11 MiB/s, done.
Resolving deltas: 100% (6043/6043), done.

プロジェクトルートディレクトリ直下が以下のような構成になっている事を確認。

my_project
  └── laradock

3. .env ファイル作成

Laradock の設定(インストールするライブラリ、ミドルウェア、PHP のバージョン等)は、
.env ファイルにて行います。
すでにテンプレートが用意されているので。テンプレートをコピーして編集します。

cd laradock
cp env-example .env

4. .env ファイル編集

テキストエディタで.env ファイルを開き、以下のように編集します。

  • データ保存先ディレクトリ
laradock/.env
DATA_PATH_HOST=./data
  • Docker コンテナ名のプレフィックス
laradock/.env
COMPOSE_PROJECT_NAME=laradock_my_project

注:my_project は任意のプロジェクト名

  • PHP のバージョン
laradock/.env
PHP_VERSION=7.4
  • インストールするライブラリの設定

npm build 時のエラー回避のため、以下のように設定

laradock/.env
WORKSPACE_INSTALL_PYTHON=true
...
WORKSPACE_INSTALL_LIBPNG=true

XDEBUG が必要であれば、以下のように設定

laradock/.env
WORKSPACE_INSTALL_XDEBUG=true
...
PHP_FPM_INSTALL_XDEBUG=true
  • MySQL のバージョン
laradock/.env
MYSQL_VERSION=5.7

5. Docker コンテナのビルド、起動

laradock ディレクトリ直下で以下のコマンドを実行し、
コンテナのビルド〜起動まで実行します。
初回は少々時間かかります。(大体 15 分くらい)

docker-compose up -d nginx mysql phpmyadmin

以下のように出力されれば、コンテナの生成は成功です。

...
Creating laradock_my_project_docker-in-docker_1 ... done
Creating laradock_my_project_mysql_1            ... done
Creating laradock_my_project_workspace_1        ... done
Creating laradock_my_project_phpmyadmin_1       ... done
Creating laradock_my_project_php-fpm_1          ... done
Creating laradock_my_project_nginx_1            ... done

以下のコマンドで、コンテナの起動状況を確認します。

docker ps

CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                                                                                                            NAMES
9303ce3b4c0f        laradock_my_project_nginx        "/docker-entrypoint.…"   7 minutes ago       Up 7 minutes        0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp                                                                                   laradock_my_project_nginx_1
c20a4a64837b        laradock_my_project_php-fpm      "docker-php-entrypoi…"   7 minutes ago       Up 7 minutes        9000/tcp                                                                                                                         laradock_my_project_php-fpm_1
2a821cf1e1ea        laradock_my_project_phpmyadmin   "/docker-entrypoint.…"   7 minutes ago       Up 7 minutes        0.0.0.0:8081->80/tcp                                                                                                             laradock_my_project_phpmyadmin_1
f8942f344aef        laradock_my_project_workspace    "/sbin/my_init"          7 minutes ago       Up 7 minutes        0.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:4200->4200/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp   laradock_my_project_workspace_1
7bd9a312b284        laradock_my_project_mysql        "docker-entrypoint.s…"   7 minutes ago       Up 7 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp                                                                                                laradock_my_project_mysql_1
9cb3b4278162        docker:19.03-dind                "dockerd-entrypoint.…"   7 minutes ago       Up 7 minutes        2375-2376/tcp                                                                                                                    laradock_my_project_docker-in-docker_1

生成したコンテナが全てリストアップされていれば、コンテナの起動成功です。

6. Laravel プロジェクトの作成

laradock ディレクトリ直下で、以下のコマンドを実行して WorkSpace コンテナにログインします。

docker-compose exec --user=laradock workspace bash
laradock@f8942f344aef:/var/www$

プロンプトが表示されれば、ログイン完了です。

次に、以下のコマンドを実行して、Laravel プロジェクトを作成します。
しばらくかかります。(5 分くらい)

composer create-project laravel/laravel myapp --prefer-dist "6.*"

以下のように出力されれば、Laravel プロジェクトの作成は完了です。

...
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
65 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan key:generate --ansi
Application key set successfully.

プロジェクトルートディレクトリ配下が、
以下のような構成になっている事を確認します。

my_project
├── laradock
└── myapp

7. Laradock の設定修正

Laradock の.env ファイルを以下のように修正します。

laradock/.env
APP_CODE_PATH_HOST=../myapp

この修正を反映するため、Docker コンテナを一旦停止し、再度起動します。

docker-compose stop
topping laradock_my_project_nginx_1            ... done
Stopping laradock_my_project_php-fpm_1          ... done
Stopping laradock_my_project_phpmyadmin_1       ... done
Stopping laradock_my_project_workspace_1        ... done
Stopping laradock_my_project_mysql_1            ... done
Stopping laradock_my_project_docker-in-docker_1 ... done

docker-compose up -d nginx mysql phpmyadmin

最後に、ブラウザから http://localhost にアクセスし、
以下のように表示されれば開発環境構築完了です。

Laravel画面

お疲れさまでした。

Discussion