Laradock環境構築
今回、Mac + Docker + Gitを使って
Laravelの開発環境を作っていきます。
この手の構築は、二番煎じ、三番煎じなので他の方が投稿しているものをお借りしつつ+αの知識をお届けできたらなと思い、投稿に至りました。
そもそも、DockerとGitを知らない方へ。。。
Docker Wiki 参照
Docker(ドッカー)は、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである。
はにゃ?
Docker Wiki 参照
Git(ギット)は、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。Linuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発され、それ以降ほかの多くのプロジェクトで採用されている。Linuxカーネルのような巨大プロジェクトにも対応できるように、動作速度に重点が置かれている。
いまいちピンときませんよね…
ざっくり、簡単に説明すると、
【Git】は、チーム開発において開発環境のバージョン管理をしてくれたり、リポジトリ単位で全世界にソースコードを公開することができ、いろんな方から修正点などの意見をもらえることができます。(分散型バージョン管理システム)
【Docker】は、アプリ開発環境を仮想化してDockerが提供する環境をDocker Fileで指定し、ビルドすることで簡単に開発環境を作ることができる。(実環境を汚すことなく構築ができる)
とまぁ、こんな感じでしょうか...
Macで環境構築事始め
Macでは、Gitが標準で入っているので割愛をさせていただいて、
Dockerは、こちらの公式ページよりインストールを行っていきます。
Dockerのインストールはこちら(Mac版)
インストールが終えたら、Terminalを開いて、
docker -v
で、バージョンが表示されることを確認してください。
上記が完了したら、次にこちらのコマンドをTerminalで入力してください。
git --version
Macには標準でgitがインストールされているのでバージョンが表示されるかと思います。(windowsの方、いつか検証してnoteに掲載したいと思っております。)
Laradockのダウンロード
mkdir laradockApp && cd laradockApp
#今回は適当に名前をつけますので変えたい方はお好きに変えてください。
git clone https://github.com/LaraDock/laradock.git
#現在のディレクトリにLaradockをクローンしております。
ディレクトリを作ってからLaradockを入れた方が今後Laravelを入れるときに楽になります。
設定ファイルの作成
.env.exampleをコピーします。
cd laradock
#先程のディレクトリから移動します。
cp .env.example .env
#環境ファイルをいじるときはバックアップを取るようにしましょう。
コンテナを初期化する
ここはおまじないとして覚えておきましょう。
docker-compose up -d nginx mysql workspace phpmyadmin
#今回は上記の4つを構築していきます。
PostgresやRedisを使いたい場合は調べればでるかと思います。
※ダウンロードには、かなり時間がかかります(数十分ぐらい)
「docker-compose up -d」でもいいとは思うのですが、
確か、エラーが出る?みたいな記事を見たことがあります。
分かる方は教えていただけると助かります...
終わったら、
docker ps
で立ち上がっているか確認しましょう。
Laravelプロジェクトの作成(少しめんどくさいです。)
まず下のコマンドで、workspaceに入ります。
docker-compose exec workspace bash
#こちらも覚えておくと便利だと思います。
workspace内で Laravelプロジェクトを作成します。
(名前はお好きに書いてください。)
composer create-project laravel/laravel laravel-sample --prefer-dist "5.5.*"
# --prefer-distと入力することで zip化してインストールするため時間短縮に繋がります。
exit
# 一旦、workspaceを抜けます。
最後の5.5.*のところを8や7と変えてあげるとバージョンを変更できます。
私の購入した本が5.5系を使っているためこのバージョンでの構築にします。
.envファイルの編集
「.env」は、 Laradockのファイル内とLaravelプロジェクトの両方にあるため間違えないようにしましょう。
まず、Laradock内の「.env」を編集します。
# Laradock内のディレクトリにいることを確認してから
vim .env
# vimの使い方は、
# 矢印キーで移動、 「i」で記述できるようになります。
# 完了したら、「escキー」で記述モードを解除します。
# 「:wq!」で保存、「:q!」で破棄となります。
# esc + :set number enterで横に行数が出ます。
1. 8行目、APP_CODE_PATH_HOST=../ 先程の Laravelのプロジェクト名
を記述。
2. 361行目、MySQLの MYSQL_VERSION=5.7に変更する
Latestよりも5.7の安定バージョンを使った方がいいとのことなので...
コンテナ再起動
docker-compose stop
# .envファイルを触った場合は、一旦停止してから起動することを忘れないようにしましょう。
停止したことを確認したら、
docker-compose up -d nginx mysql workspace phpmyadmin
無事に構築ができたか確認。
http://localhost/
# 下の画面が出るかと思います。
エラーを吐く場合、エラー番号とLaradockで解決手段が出るかと思われます。(他力本願)
さらに、開発環境の整備をしていく。
(面倒なら飛ばしてください。)
今のままでは、開発を進めていくときに不都合がたくさんある。
docker-compose exec mysql bash
# mysqlを操作できるbashに入ります。
※まだmysqlを操作できるわけではありませんので注意を
MySQLをそおうさしたい場合は、上記コマンド後に
mysql -u root -p
# パスワードは、root
# ユーザを作成するときは root ユーザで作りましょう。
こちらで、ログインができたと思います。
DB、User、Passwordを作っていきます。
デフォルトのDB, User, Passがあるのですが、セキュリティ面を考えると変えたい。(自分の好きな名前に変えたい。)
なので、新しく作っていきます。
CREATE DATABASE sampleDB;
# セミコロンを忘れないようにしましょう!
# 作られているか確認したいときは、SHOW DATABASES;
アプリ環境内でデータベース操作ができるユーザの作成。
完全に好みにはなりますが、作っておいて損はないし作り方だけでも知っているといいかなと思います。
create user 'sampleUser'@'localhost' identified by '8字以上で文字数字記号';
# 確か、パスワードが弱いと弾かれた気がします。
こんな感じでユーザが作れます。
実際に作られているか確認したい場合は、
SELECT user, host FROM mysql.user;
ユーザに権限を与える
今のままでは、CREATE TABLE やSELECT文の実行はできません。
そのため、権限を与えていきます。
GRANT ALL ON *.* TO 'さっきのユーザ名'@'localhost';
# あまり良くないですが、ALLでほぼ、rootユーザに近い権限を持ちます。
# 今回は個人開発になるため適当に割り当てていますが、適切な権限付与を心掛けましょう。
確かこのコマンドで行けたはずです。
最後に、「identified by 'パスワード'」があるとエラーが出ていた気がする。
それでは、権限付与できるか確認しましょう。
SHOW GRANTS FOR 'ユーザ名'@'localhost';
# exit でMySQLを抜けます
# もう一度、exit でさらにMySQLのbashを抜けます。
※DB名とユーザ名、パスは忘れないようにどこかにメモしておきましょう。
最後にLaravelアプリがDBに
アクセスできるように.envファイルを編集
Laravelプロジェクト内の.envファイルを編集していく。
cd ../Laravelアプリ名
# 先程作ったLaravelアプリのディレクトリに移動します。
vim .env
8行目から13行目にかけて下記の記述があると思います。
先程作った、DB名、USER名、Passwordを入力
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=① DB名
DB_USERNAME=② User名
DB_PASSWORD=③ Password
vimでもエディタなどからも書いていいと思います。
これで、migration をするときもエラーを吐かずスムーズに開発することができると思います。
最後に、停止と起動をすれば終わりになります。
何か、質問や訂正等があればコメントまでお願いします。
次回は、簡単にTodoアプリを作りながらLaravelの機能を説明できればと思います。