laravel
LaraDock

Laradock on macでLaravelの開発環境をサクッと整備

More than 1 year has passed since last update.


事前情報

ざっと、ネットで拾った以下のあたりに目を通して、とりあえず、手を動かしてみる。


事前準備


Dockerインストール

Docker for Macを入れたつもりでいたけれど、アプリケーションのディレクトリに入れただけで、一度も起動していなかった。

Orz

ので、アプリを起動して、必要なコマンドなどをインストール。

ダイアログに従って、ただただ進めるだけで良いため、詳細は割愛。


Laradocセットアップ


セットアップ時の留意点

全体の流れとしては、Laradockをgit cloneしてきて、必要な初期設定をして、composerでLaravelのプロジェクトを配置すれば、とりあえず、デモ画面までは、サクサクっと表示できる。

ポイントは、以下のあたり。


  • 初期設定に関しては、.envファイルを作成して編集が必要

  • ローカルマシンとのディレクトリ共有の指定方法

  • 各ミドルウェアのポートのバッティングに留意

  • nginxの設定と、名前解決

.envファイルの作成については、割愛しているページも多かったので、要注意!

Laradocのルートディレクトリにenv-exampleというファイルが転がっているので、それを複製し、.envファイルを作成する。

.envファイルには、各ミドルウェアの起動するポートや、ソース(アプリケーション)の配置箇所を設定する。

ソース(アプリケーション)の配置箇所は、最終的に、Dockerのインスタンスが参照するローカル側のディレクトリとなるため、そのあたりの設定の整合性をちゃんと取った上で設定する必要がある。

Docker側と、ローカルのディレクトリのマッピングは、.envファイルと同階層に配置されているdocker-compose.ymlに記載されている。

あと、nginxについては、.confファイルを追加して、/etc/hostsにlocalhostの127.0.0.1と適当な名前解決用の文字列を設定して、その文字列でアクセスできるようにしておく。

上記を踏まえ、実際に叩いたコマンドや設定した内容が以下。


Laradocのダウンロードと、各種設定

# 任意のディレクトリに移動して、Laradockを配置

git clone https://github.com/LaraDock/laradock.git
# 2017-07-14時点でmasterだと対応しているMySQLが8.0になっていて後続の作業がうまくいないないので、v5.5.1でタグを指定してcloneするのが良い
git clone --depth=1 -b v5.5.1 https://github.com/LaraDock/laradock.git

# 直下にDockerのファイル群が配置されているディレクトリが作成されるので、移動
cd laradock

# サンプルの.envファイルを複製
cp env-example .env

Laradockのディレクトリで、vi .envして以下のあたりを適当に編集


$LARADOCK_ROOT/.env

# ローカル側でソースorアプリを配置している場所

# .envが配置されている場所からの相対パスで指定できる
# docker-composer.ymlで、Docker側の/var/wwwとマッピングさせているので、そのあたりの整合性に注意して設定する
APPLICATION=../laravel

# 複数のLaradockを用途毎に使い分けているので、データファイルはそれぞれで設定
DATA_SAVE_PATH=.laradock/data

# 追記: Aug. 27, 2017
# 開発でデバッグをするために、Xdebugを有効化
WORKSPACE_INSTALL_XDEBUG=true
PHP_FPM_INSTALL_XDEBUG=true

# nginxが起動するポート
# ローカルのブラウザから参照する場合に、http://localhost:8080/のように指定するポートのこと
NGINX_HOST_HTTP_PORT=8080

# MySQLの設定
MYSQL_DATABASE=laradock
MYSQL_USER=laradock
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root


MySQLの設定は、Laravelのアプリを開発する時に必要になるので、設定内容は把握しておくべし。

他、必要に応じて、vi docker-composer.ymlも確認して必要に応じて編集する。

多くの場合、.envだけで対応できるはずだが、留意点としては、ローカル側とDockerコンテナ側のディレクトリのマッピング部分で、これは、次項のnginxのサイトの設定とも関係するので、内容は把握しておく。


$LARADOCK_ROOT/docker-composer.yml

applications:

image: tianon/true
volumes:
- ${APPLICATION}:/var/www/laravel

nginxの設定も追加でしておくと、後々の勝手がいいはず。


$LARADOCK_ROOT/nginx/sites/

# nginxの設定ファイルが配置されているディレクトリに移動

cd ./nginx/sites/

# サンプルの設定ファイルを複製
cp project-1.conf.example laravel.conf


上記で複製したサイトごとの設定ファイルを任意で編集。

vi laravel.conf


$LARADOCK_ROOT/nginx/sites/laravel.conf

server_name laravel.study;

root /var/www/laravel/public;

編集する箇所は、公開するディレクトリrootの設定と、接続する時の名前server_nameあたりで良い。そのほかは、PHPやLaravel用の設定が既に記述済みなので特に編集の必要なし。

追記: Aug. 27, 2017

もう一つが、デバッグ環境のXdebugの設定で、対象ファイルは2つ。


  • $LARADOCK_ROOT/php-fpm/xdebug.ini

  • $LARADOCK_ROOT/workspace/xdebug.ini


$LARADOCK_ROOT/*/xdebug.ini

xdebug.remote_autostart=1

xdebug.remote_enable=1
xdebug.remote_connect_back=0
xdebug.cli_color=1

Macの場合は、xdebug.iniに対する上記の編集に加えて以下も必要。


$LARADOCK_ROOT/*/xdebug.ini

xdebug.remote_host=docker.for.mac.localhost



ローカル側の設定

Laradocのnginxに記述したserver_nameで名前解決できるようにローカルのファイルを編集。

sudo vi /etc/hosts


/etc/hosts

127.0.0.1 laravel.study


laravel.studyでブラウザでアクセスするように記述したので、それで名前解決ができるように設定。


Dockerコンテナの起動とLaravelインストール

流れは以下のような感じ


  1. 初期設定用のworkspaceのDockerコンテナを起動して

  2. Dockerのコンテナに入り

  3. Laravelをインストール/プロジェクトを作成して

  4. workspaceのDockerコンテナを停止して

  5. nginxやMySQLのDockerコンテナを起動

  6. ブラウザでLaravelのデモ画面を表示する

# Laradockのルートディレクトに移動

cd laradock

# 初期設定用のworkspaceのDockerコンテナを起動
# 初回は、10〜15分くらいかかる
docker-compose up -d workspace

# 起動したコンテナ名を確認
docker-compose ps

# 初期では、workspaceとapplicationくらいしか出てこないはず
# ここに書くため、事後にキャプったため、初期のタイミングでは出てこないmysqlやnginxまで一覧い出力されている
Name Command State Ports
---------------------------------------------------------------------------------------
laradock_applications_1 /true Exit 0
laradock_mysql_1 docker-entrypoint.sh mysqld Exit 0
laradock_nginx_1 nginx Exit 0
laradock_php-fpm_1 docker-php-entrypoint php-fpm Exit 0
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp

# コンテナに入る
docker-compose exec workspace bash

# Laravelのプロジェクトを配置するディレクトリに移動
cd /var/www

# Laravelのプロジェクトを配置(Laravelをダウンロード)
composer create-project laravel/laravel laravel --prefer-dist

# コンテナから出る
exit

# コンテナを停止
docker-compose stop

# nginxとmysqlのコンテナを起動
docker-compose up -d nginx mysql

もし、初回のdocker-compose upをした後に、再度、設定をし直して、それを反映したい場合は、以下のどちらかで再構築する必要がある。

docker-compose build nginx mysql

起動と同時に再構築する場合は、以下のように指定する。

docker-compose up -d --build nginx mysql

ブラウザで以下にアクセスして、デモページが見られればOK

http://laravel.study:8080/