Windows10 proにLaradockを入れてLaravelの環境を構築する方法
先日、入江開発室に入りました!
入江開発室はプログラマー、ノンプログラマーな方たちがワイワイとWEBサービスなどを開発しているコミュニティです。特に、プログラミング初学者向けのSlackのチャンネルもあり、あまり自信がなくてもエイや!で飛び込める環境が準備されています^^これは嬉しい!
ということで、ブートキャンプ的に短時間で初学者が開発を学ぶプロジェクトに身を投げてみることにしました。
プロジェクトが始まる前までに準備することがあります。プログラミング言語(PHP)の勉強、フレームワークLaravelの環境構築と基本的な事の勉強、そしてGithubの勉強です。
PHPは最近はあまり触っていませんでしたが、Progateかドットインストールあたりで後でまとめて復習しようと考え、まずはまったく触ったことのないLaravelをどうにかしようと考えました。入江開発室ではDockerで環境構築している方が多いようなので、自分もDockerでLaravelの環境構築を目標としました。さらに、開発室ではタダケンさんの記事が紹介されていたのでLaradockでいくっきゃないでしょう~!という感じなノリで長い旅路に出るのでした。
そいで、Windows、Docker、Laravelあたりでググってみたのですが、Docker for Windowsという公式のツールがあるのでそれを利用するのが良さそうだということが分かりました。
ところがですよ。このDocker for WindowsはWindows 10 proじゃないとダメだとさ。。。うちはproじゃなくてhomeなんだよな~。
そんで、しょうがないから、Windows10 homeでLaravelの環境構築できる方法を探しはじめ、 レガシーなツールで今は公式には推奨していないというDockerToolsというのを使うことにしました。これはVirtualBox上でDockerを動かすものらしいです。
DockerToolsをダウンロードしてインストールをしました。が、しかし、Dockerの以下のコマンドでエラーがでてうまくいきません。(コマンドとかは下の方に記載しているブログ記事などを参考にしています)
docker-compose up -d nginx mysql phpmyadmin
そういえばVirtualBoxは前に入れていたからこれが悪さしているのかなと思い、一度、VirtualBoxとDockerToolsをアンインストール。再度インストール。だけど、やっぱりエラー。
(中略:この間色々ググったり試したりしました)
それで、思いました。さっさとWindows10 proにしよう!と。
で、急きょwindows10をproにアップグレード。
proになったので、VirtualboxとDockerToolsは削除して代わりにDocker for Windowsをインストール。
あとは、Dockerのイメージ(nginx、mysql、phpmyadmin)作成してLaradockインストールして、Laravelプロジェクト入れてみて、ということをやるだけです。
ちなみに、このあたりの流れについては事前にググっておいたタダケンさんの記事とSatsukiさんの記事を参考にさせていただきました!有益な記事ありがとうございます!
以下、途中試行錯誤ありましたが、とりあえずうまく行った流れのみを記載します。再現性あるかなど検証しておりませんが、もしかしたら役立つこともあるかとの思いで残しておきます。
まずはじめに、Laradockなどを入れるフォルダをどこに置くかですが、パスの途中日本語が入らないようなDocument直下にアルファベットのみの名称「irie-project」でフォルダを作成しました。
次に、Laravelのプロジェクトを入れるフォルダをirie-projectの直下に作成しました。名称は「bcp」(ブートキャンププロジェクトの頭文字)としました。
ここでコマンドプロンプトを立ち上げirie-projectフォルダまで入り、そこで以下のコマンドを入力します。git入っていない方はいれる必要あるかもです。
git clone https://github.com/LaraDock/laradock.git laradock_bcp
最後の「laradock_bcp」がLaradockのデータが入るフォルダ(ディレクトリというかもしれませんがそのままフォルダでいきます)です。
上で紹介したSatsukiさんの記事に詳細を譲りますが、最後の名称を「laradock」から変更したほうが幸せになるかもとのことです。
さて次に、コマンドプロンプトで今作成されたlaradock_bcpフォルダに移動します。そこで、env.sampleファイルをコピーして.envファイルを作成します。コピーするコマンドは以下の通りです。
(追記:ファイルのコピー、名前変更、移動などのファイル操作に限ってはLinuxコマンドが使い慣れているためWindows Subsystem for LinuxをONにしてUbuntuでやっています。具体的には、コマンドプロンプトを2つ立ち上げ、うち1つで”bash”コマンドを叩きUbuntu用にしています。)
cp env-example .env
んで、.envファイルの中身で以下の部分だけとりあえず変更します。私は普段、Sublime Textを使っているのでいちいちエクスプローラーから.envファイルをクリックして開きました。
(追記:いちいちエクスプローラーから.envをクリックするのも面倒なので、UbuntuからSublime Textをコマンドで起動できるようにしました。気が向いたときに記事にしよっかな)
APP_CODE_PATH_HOST=../bcp
DATA_PATH_HOST=~/.laradock-bcp/data
ここで、APP_CODE_PATH_HOSTはLaradockのwebサーバー上で同期するフォルダです。後の手順でまた少し書き換えます。
DATA_PATH_HOSTはdockerのstorage等を保存するローカルPCのフォルダです。私の環境だと上記の設定で「C:\Users\(ユーザ名)\.laradock-bcp\data」を指定したことになります。
デフォルトでは~/.laradock/dataのようでうが、このままにしておくと別のプロジェクトを作成した時に同じ場所を参照していまいますので変更した方がよいとSatsukiさんの記事に書いてましたので「.laradock-bcp」としてます。
続けて、Mysqlの設定を変更します。ここはタダケンさんの記事を参考にしました。バージョンを5.7.22に固定しています。
なお、以下をコピペする際はコメント(#より後ろ)は削除するようにしてください。これ削除しないとエラーになります。少しハマりました(^^;
MYSQL_VERSION=5.7.22 # versionを固定
MYSQL_DATABASE=databasename #データベース名を変更
MYSQL_USER=username #ユーザー名を変更
MYSQL_PASSWORD=password #パスワードを変更
次にnginx、mySQL、 phpMyAdminのDockerコンテナを起動します。パソコンがヘボいせいか、起動に20~30分程度かかりました。起動するためのコマンドは以下の通りです。なお、コマンドはlaradock_bcpフォルダの中で実行しています。
docker-compose up -d nginx mysql phpmyadmin
イメージ構築中に3回ほどwindowsにログインしているアカウントのパスワード入力を聞かれます。「Cドライブ(dockerのデータが入るドライブ)をシェアしろ~」と言われます。ここで注意なんですが時間がかかるからと放置して席を外していると、シェアしろ~のウィンドウが消えてしまいます。一応通知エリアに表示は残っているのですが、そこをクリックしても先には進みませんでした。その時は再度上記のコマンドを実行する必要があります。2回目からはキャッシュがあるのかどうかわかりませんが、シェアしろ~のウィンドウが早く立ち上がるのでそこでパスワードを入力してOKでした。
起動が完了したらhttp://localhostにアクセスして「404 Not Found nginx」と表示されるのを確認します。キャプチャ忘れました。
次に、http://localhost:8080にアクセスしphpMyAdminツールの画面から.envで設定したユーザー名とパスワードでログインできるかチェックします。なお、サーバは「mysql」です。
次に、docker-compose psでworkspaceコンテナが立ち上がっているか確認します。
workspaceコンテナとは、、、説明できないためタダケンさんの記事から引用です(^^;
laravelでの開発を行うためにはどうしてもcomposerやnodeなどのツール類が必要になってきますが、これら必要なツールを一式用意してくれるコンテナイメージがworkspaceです。
次にLaravelプロジェクトの作成を行います。
Laravelのプロジェクトを作成するためworkspaceコンテナにアクセスします。コマンドはlaradock_bcpフォルダの中で実行しています。
docker-compose exec --user=laradock workspace bash
workspaceコンテナ内でcomposerを使いLaravelのプロジェクトを作成します。
/var/www$ composer create-project laravel/laravel src
ちなみに、workspaceの/var/wwwは先ほど作成した.envの「APP_CODE_PATH_HOST」にマウントされています。つまり今回の設定では「bcp」フォルダの中に「src」というフォルダが作成され、その中にlaravelのファイルがダウンロードされます。
続けて、MySQLの接続設定をしていきます。
laravelのプロジェクト(今回の例ではbcp直下のsrcフォルダを指す)の配下に.env.sampleファイルをコピーして.envファイルを作成します。workspaceコンテナの中では/var/www/srcに移動して、そこでcpコマンドで.envファイルをコピーすることになります。
cd src
cp .env.example .env
DBで始まる部分を編集し、MySQLの接続設定を書き込んでいきます。先程、作成したデータベース名、ユーザー名などを入力します。
※DB_HOSTもmysqlに変更することを忘れずに!!
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=databasename
DB_USERNAME=username
DB_PASSWORD=password
続いてタダケンさんの記事にあるように、Laravel にある認証用のデフォルトのテーブル定義があるということなので、それを作成してみます。
/var/www/src# php artisan migrate
/var/www/src# php artisan key:generate
データベースへの接続が問題なければ、マイグレーション情報を格納する いくつかのテーブルが作成されているのがphpmyadmin(http://localhost:8080)にログインすることで確認できます。
ここで一旦exitコマンドでworkspaceコンテナから抜けます。
最後にLaradock(今回の例ではlaradock_bcpフォルダを指す)の.envファイルを編集して、アプリケーションのPATHを変更します。APP_CODE_PATH_HOSTに指定したフォルダがworkspaceコンテナの/var/www/(つまりWEBサーバーで公開されるディレクトリ)にマウントされる。
# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../bcp/src/
変更が終わったら、nginxコンテナを再起動します。
docker-compose up -d nginx
もう一度、http://localhost へアクセスします。 するとLaravelのサイトが表示されます。
以上で完了です。
タダケンさん、Satsukiさんの記事を参考にLaravelの環境構築ができました!てか、後半はほとんどタダケンさんの記事みたいな(^^;
なにはともあれ、ありがとうございました!
次はLaravelをいじってみます。