
【Laravel】Laradockで複数プロジェクトを動かす手順
Laradock1つで複数のプロジェクトを動かしていきたいと思います。
Laradockの複数プロジェクトにおけるディレクトリ構成
下記のようなディレクトリ構成にしたいと思います。DBは共通のユーザーでログインして、複数作るイメージです。(your-dev-folderは普段開発で使うフォルダの場所です。)
(your-dev-directory)/laradock (your-dev-directory)/project1/app (your-dev-directory)/project1/public (your-dev-directory)/project/(省略...) (your-dev-directory)/project1/app (your-dev-directory)/project1/public (your-dev-directory)/project1/(省略...)
Laradockをクローン
まずはlaradockをクローンしてきましょう。どこでも良いですが一例としてぼくはホームフォルダ(/Users/[ユーザー名])にdevフォルダを作っています。
/Users/{ユーザー名}/dev
ここにLaradockをクローンしてきます。
git clone https://github.com/Laradock/laradock.git laradock
Laradockの.env設定
クローンできたら、laradockフォルダに移動して、env-exampleというLaradockの環境設定例のファイルを.envとしてコピーします。
cd laradock cp env-example .env
コピーした.envの内容を編集しましょう。デフォルトではmysqlがlatestとなっていますが、最新版に設定するとエラーが出たりするので5.7を指定します。
他の設定は適宜変更してください。
編集ファイル: laradock/.env
### MYSQL ################################################# MYSQL_VERSION=5.7
Laradockでnginxの複数サイト設定
project1.localやproject2.localでアクセスした時に、それぞれのプロジェクトが表示されるように設定を行います。
laradock/nginx/sites/laravel.conf.example
に設定例があるのでこれをコピーして書き換えていきます。
Project1とproject2という2つのサイトを動かす前提で話を進めます。
作業ディレクトリ: laradock/nginx/sites
cd nginx/sites cp laravel.conf.example project1.conf cp laravel.conf.example project2.conf
larave.conf.exampleではlaravelというフォルダで動かすようにかかえれているので、そのlaravel部分をproject1という風に書き換えます。
またproject1.testだとchromeで動かなかったりするのでproject1.localとしています。
server_name project1.local root /var/www/project1/public; ...(省略) error_log /var/log/nginx/prject1_error.log; access_log /var/log/nginx/prject1_access.log;
project2.confを同様に行いましょう。
hostsの設定を行う
Nginxでdocker上のサイト設定は行いましたが、これだけではローカルPC上で http://project1.local/
にアクセスしてもなにも表示されません。
hostsの最下部に下記のように追記しましょう。
編集ファイル: /private/etc/hosts
127.0.0.1 project1.local ::1 project1.local 127.0.0.1 project2.local ::1 project2.local
LaradockのMYSQLでDBを複数用意する
createdb.sql.example
というファイルをcreatedb.sql
としてコピーして、DBを作成するsqlを書きます。
作業ディレクトリ: laradock/mysql/docker-entrypoint-initdb.d/
cd mysql/docker-entrypoint-initdb.d/ cp createdb.sql.example createdb.sql
CREATE DATABASE …
と書いてある部分2行をFLUSH PRIVILEGES ;
の上部にコピペして挿入します。ここでは、project1という名前でdatabaseを作成します。
編集ファイル: laradock/mysql/docker-entrypoint-initdb.d/createdb.sql
CREATE DATABASE IF NOT EXISTS `project1` COLLATE 'utf8_general_ci' ; GRANT ALL ON `project1`.* TO 'default'@'%' ; CREATE DATABASE IF NOT EXISTS `project2` COLLATE 'utf8_general_ci' ; GRANT ALL ON `project2`.* TO 'default'@'%' ; FLUSH PRIVILEGES ;
(先頭の#はコメントになるので外すのを忘れないようにしてください)
次に実際にDBを作成します。laradockフォルダへ移動して下記を実行します。(#はコメント行です。)
作業ディレクトリ: laradock
# dockerでmysqlを立ち上げる docker-compose up -d mysql # rootユーザーでsqlを実行 # 「Enter password:」と表示されるので、rootと入力 mysql -u root -p < /docker-entrypoint-initdb.d/createdb.sql # DBが作成されたか確認しましょう。 # project1、project2があればok mysql -u root -p show databases;
作業が終わったらmysqlとbashからexitコマンドで抜け出します。
LaradockのworkspaceでLaravelインストール
こちらは標準のLaravelの設定を行うときと同様です。Laradockではworkspaceと呼ばれる場所に予め必要なものがまるっと入っているのでそのworkspace内で作業をします。
以降workspace内と言えば docker-compose exec --user=laradock workspace bash
を行っている状態ということです。
# workspaceを立ち上げ、laradockユーザーでworkspaceに入る docker-compose up -d workspace docker-compose exec --user=laradock workspace bash
ここでls
コマンドを行うとローカルでlaradockを置いているフォルダの中身が/var/www/に配置されている事がわかります。
ここにproject1、project2という名前でLaravelをインストールしましょう。project1のみで説明します。
Laravelインストール
workspace内でlaravelをインストール
composer create-project --prefer-dist laravel/laravel project1
Laravelの.env編集
.envをlaradockで作成したDBの接続情報と合うように編集します。ローカルPC上で普通にエディタで編集すればokです。
DB_HOST、DB_DATABASE、DB_USERNAMEを書き換えます。
編集ファイル: project1/.env
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=project1 DB_USERNAME=default DB_PASSWORD=secret
workspace内でLaravelのmigrationを行う
workspace内でproject1ディレクトリに移動しmigrationを行います。
作業ディレクトリ(workspace内): /var/www/project1
cd project1 php artisan migrate
以上でproject1のインストールが完了です。同様にproject2も行いましょう。
ブラウザで表示されるかを確認
設定は以上です。workspaceから抜け出し、ローカルPC上でlaradockを起動して確認してみましょう。
docker-compose up -d nginx mysql
ブラウザでhttp://project1.local/
にアクセスして初期画面が表示されればokです!
もし表示されない場合やnginxのサイト設定を間違っていた場合は一度docker-composeで停止してから再度たちあげましょう。
docker-compose stop docker-compose up -d nginx mysql
以上です!laradockで素敵なLaravel開発ライフをお過ごしくださいませ〜
追記
もう一つパターンがあったので書いていきます
Laradockをプロジェクトの数だけ作る場合の手順
ドキュメントにもありますが下記のような構成です。
+ project-a + laradock-a(Laradockのフォルダ) + project-b + laradock-b(Laradockのフォルダ)
ポイントはプロジェクトごとにユニークなフォルダの名前をつけることで、このフォルダ名を基にコンテナが作られるとあるのですが… 動かなかったのでlaradock/.envのCOMPOSE_PROJECT_NAME
をユニークにすることで対応しましょう。
編集ファイル: laradock-a/.env
COMPOSE_PROJECT_NAME=laradock_project-a
(It’s important to rename the laradock folders to unique name in each project, if you want to run laradock per project).
By default the containers that will be created have the current directory name as suffix (e.g. laradock_workspace_1).
また、デフォルトではデータベースを保存する場所が~/.laradock/data
となっており、共通のものが使われてしまうため下記のように変更します。
DATA_PATH_HOST=.laradock-a/data
これでプロジェクトごとにコンテナを作ることが可能となります。他の流れは一緒になりますので省略させていただきます。