はじめに
Laradockとは?
Laravelを用いたサーバーをDockerで立てるためだけに集中してプロジェクトで、必要なコンテナ群と環境をまとめられています。便利。
公式サイト https://laradock.io/
nginxやmysqlはもちろん、php-worker等のように必要そうなコンテナが入っており、それぞれのバージョンなども一つの管理ファイルで行えるような仕組みになっています。すごい。
なお、私はLaradockではなくHomestead + Vagrantで開発を継続する方針に決めました。
深い理由はないのですが、結局のところ環境設定も多く必要になりそうなので、それであれば、一つの仮想マシンで丁寧にいじろうかなと思ったためです。
準備
環境について
Macbook Pro
macOS Sierra (ver10.12.6)
必要な物をインストール
何かしらの方法でDockerをインストールしなければなりません。
私の場合はHomebrewを使ったので、その手順を記します。
Homebrewを導入する
公式サイトに記述されているインストールコマンドを打ちます。
公式サイト https://brew.sh/
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Dockerをインストール
Homebrew-caskを用いてインストールします。
brew cask install docker
インストールが完了したら、一度Dockerを起動してください。
ツールバーのDockerをクリックした際に下の画像のように、
●Docker Desktop is running
となるまで、表示される手順に従い進めてください。
ターミナルでdocker-compose
コマンドが使えればOKです。
Laradockを入手
Laradockのgitリポジトリからクローンします。
私はホームディレクトリ以下にProjects/Webというフォルダを作って、そこにデータを格納しています。
cd Projects/Web
git clone https://github.com/laradock/laradock.git laradock
ここまでで、必要な物は揃ったはずです。
メインパート
laradockの.envファイルを用意する
クローンされたlaradockフォルダの中にはenv-example
というファイルがあります。
laradockの環境設定を司るファイルなので、これをコピーして利用します
cd laradock
cp env-example .env
コピーしたファイルの頭にドット(.)がついていることに注意です。
workspaceにログインまでしてみる。
一旦起動して見ます。
docker-compose up -d nginx mysql workspace
... done
みたいなのがいっぱい出てくると思います。
ちゃんと起動しているか確認したいときは以下のコマンドを打ちましょう。ステータスが見られます。
docker-compose ps
起動確認ができたら、workspaceコンテナにbashでログインしてみます。
docker-compose exec --user=laradock workspace bash
下の感じに表示されればOKです。~は人によって違うと思います。多分。
laradock@~~~~: /var/www$
この/var/wwwは、デフォルトの.envの設定だとlaradockフォルダの一つ上の階層にマップされています。私の場合だと~/Projects/Webにあたります。
Laravelプロジェクトを作る。
/var/wwwで以下のコマンドを打ちます。プロジェクト名は一旦laravel-appとしています。
少し時間がかかると思うので休憩です。
composer create-project --prefer-dist laravel/laravel laravel-app
ここまでで、dockerで立ち上げた環境にlaravelのプロジェクトを用意するところまでできました。
nginxのルーティングを設定する。
上記までだと、http://localhost にアクセスしても404 not foundだと思います。
理由はnginxでのルーティングが正しく設定されていないためです。
設定のため、以下のコマンドで一旦コンテナを落とします。
まだworkspaceにログインしている場合は、exit
と打つか、Ctrl+D
でログアウトします。
docker-compose down
設定ファイルは、laradock/nginx/sitesにあります。
laravel用のサンプル設定があるので、コピーして使いましょう。
cd nginx/sites
mv default.conf default.conf.bak
cp laravel.conf.example default.conf
コピーしただけでは、ルーティングができていないので、以下のように編集します。12~16行目あたりにあります。
"Laravelプロジェクトを作る。"で作成した名前laravel-app
に変更します。
- root /var/www/laravel/public;
+ root /var/www/laravel-app/public;
ここまで設定できたら、一度コンテナをリビルドして、起動します。
--buildオプションをつけるだけで問題ないとはずです。
docker-compose up -d --build nginx mysql workspace
起動が完了したら
http://localhost
にアクセスして見てください。以下の画面が表示されれば、問題ありません。
php artisan migrateするまで
php artisan migrateするためには、workspaceコンテナからmysqlコンテナにアクセスしなければなりません。laradockはこの辺りを解決してくれているので、大きな変更は必要ありませんが、以下を設定する必要があります。
設定変更の前に、一旦dockerのコンテナを全て落としておきましょう。
docker-compose down
laravel-app/.envファイルの設定を変更
laravelのプロジェクトは.envファイルに設定が記載されているので、mysqlの接続先を変更する必要があります。laradockの.envではありません。注意してください。
デフォルトだと、DB設定は以下のようになっていると思います。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
以下のように変更します。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
DB_HOSTはlaradockが接続先を解決してくれるはずなので、mysqlだけで問題ないです。
また、この設定はlaradock/.envの設定に基づいているので、必要があれば各自変更してください。
laravelの環境設定はここまでで完了です。
laradockのmysqlの設定
ネイティブ認証プラグインを利用するので、以下の設定を行います。
設定ファイルはlaradock/mysql
にあるmy.cnf
です。
テキストエディタで開いて、一番下の行に
default_authentication_plugin=mysql_native_password
と追記します。
ここまでできたら、一度、mysqlコンテナをリビルドしておきましょう。
また、一部キャッシュの影響?でうまく設定が反映されない場合があるので、~/.laradock/data
を削除しておくことを推奨します。
私はここで詰まった経験があるので...
rm -rf ~/.laravel/data
docker-compose build mysql
ここまでで、mysqlの設定はできました。
php artisan migrateする
あとは各コンテナを起動してプロジェクトディレクトリでmigrateするだけです。
起動とログインをして、
docker-compose up -d nginx mysql workspace
docker-compose exec --user=laradock workspace bash
作成したプロジェクトディレクトリに移動し、migrateコマンドを実行。
cd laravel-app
php artisan migrate
これで完了です。
その他
今回データベース名などはlaradock準拠にしていますが、homesteadなどから移行した場合などは、laradockの設定を変えた方が都合が良い場合があると思います。
また、php-worker等を利用したい場合も、ある程度コンテナ間のコネクションはlaradockが吸収してくれますが、細かい設定は自分でする必要があると思うので、laradock/.envや、各コンテナの設定ファイルにはよく目を通しておいた方が良いと思います。