Laravel
Vagrantを使った開発環境 Homestead
Vagrant仮想環境を使って開発をする場合はこちらを参照してください。
https://readouble.com/laravel/5.8/ja/homestead.html
Dockerを使った開発環境 Laradock
今回のドキュメントはDockerを使った開発環境の構築を行います。
https://laradock.io/
複数プロジェクトに対応した構成でインストールする
仕事として使い始める方、趣味の延長でウェブサービスを作りたい方など、開発マシン上に複数のプロジェクトを作ることがあります。
上記の場合、プロジェクト毎にミドルウェアのバージョンが指定される場合があり、他のプロジェクトに影響させたくない場合は仮想環境を個別に用意することになります。
ここで示す例は個別に仮想環境を用意する方法の手順を示します。
##構築例
プロジェクトfugaとプロジェクトmogeを共存させ、仮想環境はそれぞれ独自で動くものとする。
─ Laravel # ここの名前はお好きに。Laravelプロジェクトを入れる的な。
│
├── fuga
| ├── app
| ├── data
| └── laradock
│ ├── .env
│ └── docker-compose.yml
├── moge
| ├── app
| ├── data
| └── laradock
│ ├── .env
│ └── docker-compose.yml
注意点は複数プロジェクトでdockerコンテナがバッティングする
複数プロジェクトをdockerで立ち上げるとき、コンテナのバッティングが発生して作成に失敗するので、それを回避するためいくつかポイントがあります。
最初にプロジェクトfugaを作る
最初に作ったプロジェクトを、以降のプロジェクトの雛形にするため、注意深く作成しましょう。
まずプロジェクトをまとめるディレクトリfuga
を作成し、その中にlaradockをgit clone
します。
$ mkdir fuga;cd $_
$ git clone https://github.com/Laradock/laradock.git
この段階で以下の構成になります。
─ Laravel
│
├── fuga
| └── laradock
│ ├── env-example
│ └── docker-compose.yml
docker-compose実行
docker-compose.yml
に値を注入するため、env-example
をコピーして.env
を作り、fuga
プロジェクト用の設定を行います。
$ cp env-example .env
$ vi .env
書き換える場所は以下の部分で。 最初の2行はfugaプロジェクト内を指すように変更して、PORTはプロジェクトごとにバッティングしないように利用するミドルウェアのPORTを変更します。
APP_CODE_PATH_HOST=../app/
DATA_PATH_HOST=../data
COMPOSE_PROJECT_NAME=fugalaradock # ポイント! 一意にしてコンテナ名のバッティングを防ぐ!
NGINX_HOST_HTTP_PORT=8099
NGINX_HOST_HTTPS_PORT=4499
APACHE_HOST_HTTP_PORT=8099
APACHE_HOST_HTTPS_PORT=4499
WORKSPACE_SSH_PORT=2299
MYSQL_PORT=3399
コンテナ立ち上げの準備ができました。 さっそく立ち上げてみましょう!
一番最初に実行したときはかなりの時間がかかるので、気長に待ちましょう( ´ー`)y-~~
$ docker-compose up -d nginx mysql workspace
:
:
Creating fugalaradock_docker-in-docker_1 ... done
Creating fugalaradock_mysql_1 ... done
Creating fugalaradock_workspace_1 ... done
Creating fugalaradock_php-fpm_1 ... done
Creating fugalaradock_nginx_1 ... done
最後にエラーが出なかったら成功です。 ただしこの状態ではサーバ環境が揃っただけなので、http://localhost:8099
でアクセスしても何も表示されません。
この段階で以下の構成になります。
─ Laravel
│
├── fuga
| ├── app # .envのAPP_CODE_PATH_HOSTの設定により生成
# コンテナ内の /var/wwwの位置になる
| ├── data # .envのDATA_PATH_HOSTの設定により生成
| └── laradock
│ ├── .env
│ └── docker-compose.yml
Laravelプロジェクトの雛形を生成する
この状態で開発(&実行)環境はコンテナ内(ゲスト側)に生成されましたので、Laravelのプロジェクトを生成するためにコンテナ内へ入ります。
開発作業環境(workspace)
docker ps
でworkspaceがついたコンテナを探します。
$ docker ps
A*********** fugalaradock_nginx
B*********** fugalaradock_php-fpm
C*********** fugalaradock_workspace # <--- これ
D*********** fugalaradock_mysql
E*********** docker:dind
コンテナに入ります。
$ docker exec -it C*********** bash
root@C***********:/var/www# # プロンプトが出てくればOK
composerを使ってLaravelプロジェクトを作成します。
# composer create-project laravel/laravel . # <-- ホスト側のfuga/app内に作る
:
:
Package manifest generated successfully.
> @php artisan key:generate --ansi
Application key set successfully.
これでLaravelの雛形が/var/www/app内に生成されhttp://localhost:8099
で以下のページが表示されれば成功です。
別プロジェクト(moge)を作る
注意する部分まで。
$ mkdir moge;cd $_
$ git clone https://github.com/Laradock/laradock.git
$ cp env-example .env
$ vi .env
.env
の設定を他のプロジェクトと重ならないように変更しておきます。
APP_CODE_PATH_HOST=../app/
DATA_PATH_HOST=../data
COMPOSE_PROJECT_NAME=mogelaradock # ポイント! 一意にしてコンテナ名のバッティングを防ぐ!
NGINX_HOST_HTTP_PORT=8090
NGINX_HOST_HTTPS_PORT=4490
APACHE_HOST_HTTP_PORT=8090
APACHE_HOST_HTTPS_PORT=4490
WORKSPACE_SSH_PORT=2290
MYSQL_PORT=3390
あとはプロジェクトの雛形を生成して終わり!
$ docker ps
$ docker exec -it {containerID} bash
root@{containerID}:/var/www#
# composer create-project laravel:laravel .