Laradockで複数のLaravelプロジェクトを動かす

ローカル環境で、Laradockを使い複数のLaravelプロジェクトを動作させたい場合の設定メモです。
追記: 2018年4月 Laradockの最新版(おそらくv7.0.0)で試したメモとして更新しました。

Laravelとは

PHPのフレームワークの一つです。
Laravel

詳しくは下記のサイトなど。
Laravelのここがすごい

Laradockとは

Laradockは、Laravelをdocker環境で利用できるようにしたツールです。

ドキュメントがあるのですが、ちょっと情報が古くなっていて設定項目名が違っていたり、知りたい情報が無かったりしてわかりづらいため、メモに残すことにしました。
この記事は、LaradockドキュメントのGetting Started
「B) Setup for Multiple Projects」
という項目に沿った内容になっています。

環境

  • Mac High Sierra 10.13.4
  • Laradock 最新版(2018年4月18日時点 v.7.0.0

行うこと

  • ローカル環境において、下記2つのURLでLaravelのサンプルアプリケーションをそれぞれ動作させる
http://project1.test
http://project2.test
  • 下記のフォルダ構成になる。複数のプロジェクトを1つのLaradockで動くようにする
+ laradock
+ project1
+ project2

Laradockをダウンロード

Laradockを git clone する

git clone https://github.com/laradock/laradock.git

laradockディレクトリに入る
設定ファイルをコピーして作成

cd laradock
cp env-example .env

設定ファイルを編集

vi .env

下記のようになっていることを確認。なっていなかったら下記のように変更

APP_CODE_PATH_HOST=../
...
APP_CODE_PATH_CONTAINER=/var/www:cached

docker-compose.ymlですべてのvoluemesの設定が下記のようになっていることを確認。
voluemesは、[ホストのファイルシステム:workspaceのファイルシステム]の書式でマウントするフォルダを指定できる。
${APPLICATION}.envで指定した値。つまりここでは、..//var/www:cachedにマウントするという設定。

- ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}

(:cachedの意味は…不明)
デフォルトでは上記の設定になっているはずなので、あくまで確認です。

Laravelプロジェクトを作成

コンテナを起動する

docker-compose up -d nginx mysql workspace

php-fpmのコンテナは書かなくても一緒に起動する
(以前はworkspaceも書かなくても起動したし、ドキュメント上もそのように見えるが、実際にはworkspaceは明示しないと起動しなかった)

workspaceコンテナに入る

docker-compose exec workspace bash

/var/www配下で2つのプロジェクトを作成

cd /var/www
composer create-project laravel/laravel --prefer-dist project1
composer create-project laravel/laravel --prefer-dist project2

ちょっと時間がかかるので待つ

ディレクトリが作成されたら、一旦コンテナから出る

exit

各プロジェクトごとにnginx設定ファイルを作成

laradockディレクトリ直下で作業を行う

まずデフォルトの設定ファイルを念のため無効にする。
(ファイル名を変更。拡張子がconfのものが全て読み込まれるため)

mv laradock/nginx/sites/default.conf default.conf.bk

各プロジェクトごとのnginx設定ファイルを作成する
ファイル名は*.confになっていれば何でもよい

cp nginx/sites/app.conf.example nginx/sites/app1.conf
cp nginx/sites/app.conf.example nginx/sites/app2.conf

app1.confserver_nameroot を下記のように編集

server_name project1.test;
root /var/www/project1/public;

同じく app2.conf でも下記のように編集

server_name project2.test;
root /var/www/project2/public;

コンテナを再起動して設定を反映させる

docker-compose stop
docker-compose up -d mysql nginx workspace

hostsファイルの編集

http://project1.testといったURLで見るために、hostの設定を追加する

hostsファイルを開く

vi /etc/hosts

下記を追記する

127.0.0.1 project1.test
127.0.0.1 project2.test
...

確認

ブラウザで下記のアドレスを確認する

http://project1.test
http://project1.test

Laravelのデフォルトのサイトが表示されます。
以上です。

参考サイト

Windows10でlaradockを動かす

Windows10でDocker for Windowsをインストールし、LaradockでLaravel新規プロジェクトを動かすまでのメモ。

環境

  • Windows 10 Pro
  • Lenovo Thinkpad X1 Carbon

Windows for Dockerをインストール

Install Docker for Windows のページで[Get Docker for Windows (Stable)]からダウンロード
インストーラーのインストラクションに沿ってインストールを行う

Hyper-Vを起動

Windows for Dockerを動作させるためには、Hyper-Vが必要。
デフォルトの環境ではHyper-Vが起動していないため、インストール直後にdockerを起動起動しようとすると下記のようなエラーが表示される。

Hardware assisted virtualization and data execution protection must be enabled in the BIOS. See https://docs.docker.com/docker-for-windows/troubleshoot/#virtualization-must-be-enabled

下記のコマンドでHyper-Vを起動する

Start-Process powershell.exe -Verb runas
DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V

下記のメッセージが表示されて起動が完了

展開イメージのサービスと管理ツール
バージョン: 10.0.15063.0

イメージのバージョン: 10.0.15063.0

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。

しかし、Hyper-Vを起動を起動しても上記のエラーはまだ出現した。
こちらを参考に、BiosでVirtualizationを有効化。

自分の環境では、下記の手順でvirtualizationを有効化した。

  • システム再起動
  • Lenovoのロゴが表示されているときに[Enter]をクリック
  • [F1] > Security > Virtualization で[Enter]をクリックしてEnabledを選択
  • [F10]で保存

※ Hyper-VはWindows 10のPro版にのみデフォルトで付属

Laradockのセットアップ

LaradockでLaravelの新規プロジェクトを動かしてみる

laradockをセットアップ

power shellを開き、作業ディレクトリを準備
今回は、新規でlaravelプロジェクトを作成することを想定
下記のようなディレクトリ構造になる

作業ディレクトリを作成し、移動

cd C:\
mkdir workspace
cd workspace
mkdir dockerLaravel
cd dockerLaravel

Laradockをクローンし、laradockディレクトリに入る

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

設定ファイルをenv-exampleからコピーして作成

cp env-example .env

Laravel新規プロジェクトを作成

コンテナ群を起動。下記のコマンドで、php-fpmやworkspaceのコンテナも起動される

docker-compose up -d nginx mysql

workspaceコンテナに入る

docker-compose exec workspace bash

Composerを使い、Laravelプロジェクトを作成

cd /var/www
composer create-project --prefer-dist laravel/laravel testapp

または、既存プロジェクトが存在する場合はここで git clone する

DocumentRootの設定

次にDockumentRootを変更する。
下記ファイルを開く

laradock/nginx/sites/defautl.conf

下記のように編集する

## 変更前
root /var/www/public 
## 変更後
root /var/www/testapp/public

コンテナを再起動

docker-compose restart

ブラウザで下記アドレスにアクセスして確認する

http://localhost

コンテナを停止するときは下記コマンド

docker-compose stop

次回コンテナを起動したいときは、

docker-compose start

参考

以上

VCCWでphpのerror_logを表示する

WordPressのテーマ・プラグイン開発中は、PHPをいじったりしているとすぐページが真っ白になってしまいます。
PHPのエラーログを見れるようにしておくと便利です。
VCCWで見れるようにする方法のメモです。

php設定ファイルを探す

VCCWではphpenvを使っているため、phpの設定ファイルはphpenvの中にあります。
/etc/php.iniではないので注意。
そこで、まずはphp.iniの場所を調べます。
下記プラグインをWordPressでインストールしましょう。
WordPress phpinfo()
プラグインを有効にすると、[設定] > [WordPress phpinfo()]というメニューができるので、そこへ。
「Loaded Configuration File」の項目の値が、設定ファイルのパスです。
スクリーンショット 2016-02-05 15.52.26

私の環境はphp5.6.9なので、5.6.9のフォルダ配下にあるphp.iniが読み込まれています。

php設定ファイルにエラーログ出力の設定を記述する

設定ファイルを開きます。

$ sudo vi /usr/local/phpenv/versions/5.6.9/etc/php.ini

下記の記述を検索します。

;error_log = php_errors.log

これを下記のように変更します。

error_log = /var/log/php/php_errors.log

ファイルを保存します。
最後に変更反映のため、apacheを再起動。

$ sudo /etc/init.d/httpd restart

ログ出力フォルダを作成

フォルダを作るところに移動。

$ cd /var/log

フォルダを作ります。

$ sudo mkdir php

フォルダのユーザーとグループは、apacheの実行ユーザーと同じにします。
VCCWでは、apacheの実行ユーザは

User vagrant
Group vagrant

と設定してあります(/etc/httpd/conf/httpd.confに記載されている)
この情報は、先ほどのphpinfo()の画面でも確認できます。

下記コマンドで変更。

$ sudo chown vagrant:vagrant php

そしてパーミッションも変更します。

$ sudo chmod 644 php

これで、下記の権限になるので、ユーザーに書き込み権限が付与されます。

-rw-r--r--.

ログを出す

では実際にログを出してみましょう。
まずは何か、適当にエラーがが出るように動かしているテーマやプラグインでわざと不正な記述を書き込みます。
そして、ブラウザをリロードします。
ログが出力されているか確認します。

$ vi /var/log/php/php_errors.log

ログファイルができた後は、tailコマンドで常に最新ログを出しておくと便利ですね。

$ tail -f -n 100 /var/log/php/php_errors.log

まとめ

VCCWでは、phpの設定ファイルはphpenvのものを使っている点に注意が必要です。最初、/etc/php.iniを編集してログが出ず、頭をひねっていました。
また、ログを格納するフォルダのUser/Groupと権限も、間違っているとログを書き込むことができないので要注意です。

参考

error_logの出力先を設定する【PHP】【apache2】【debian】
Apache 実行ユーザーの設定

WordPressで投稿を表示するループの書き方・利用シーンまとめ

WordPressのループの仕様はCodexのループに書いてあるとおりですが、ループの利用シーンがいまいち分かりづらいです。
この記事では、Codexや他ブログ記事を参考にし、自分でも試した結果を踏まえてループの書き方と利用シーンについてまとめてみました。

“WordPressで投稿を表示するループの書き方・利用シーンまとめ” の続きを読む