LaradockでLaravelアプリの開発環境を構築する際に、何度かのつまづきがありましたが、色々な参考サイトの情報をつなぎ合わせ、何とか解決に至りました。その備忘録です。
(特にphpmyadminからmysqlへの接続でコケたことが記事化の要因でした)
リスペクトな記事
この記事を作成するにあたり、参考にした記事です。
前提条件
下記がインストールされている
-
docker
-
docker-compose
-
git
GitからLaradockをクローン
1)任意のディレクトリを作成(例:project) && 作成したディレクトリへ移動
$ mkdir project && cd project
2)上記ディレクトリへLaradockをGitクローン
$ git clone https://github.com/LaraDock/laradock.git
3)laradockへ移動 && .envファイルの作成
$ cd laradock && cp env-example .env
(補足)Gitクローンで上記ディレクトリproject内にlaradockディレクトリが生成されます。
.envは後に触りますので、所在を確認しておいてください。
project /
┗laradock /
┗.env
(補足:はじめてLaradockを入れる場合は、この補足を無視してOK)
もし既にLaradockを導入している場合は(これから2つ目以上のLaradockを導入しようとしている場合は)、この時点でlaradock/.envのCOMPOSE_PROJECT_NAME(コンテナ名)を編集した方がいいかもしれません。詳しくはコチラ
workspaceコンテナの起動とlaravelプロジェクトの作成
4)laradockディレクトリでworkspaceコンテナの起動
〜〜少し時間がかかります〜〜
$ docker-compose up -d workspace
5)workspaceコンテナが起動したら、コンテナへ入る
(11/7追記)※--user=laradockを忘れないように注意
もしDo not run Composer as root/super user!のアラートが出たらコチラ
$ docker-compose exec --user=laradock workspace bash
6)workspaceコンテナ内でlaravelプロジェクトを作成
(プロジェクト名は任意。例:sampleapp)
$ composer create-project laravel/laravel sampleapp
〜〜少し時間がかかります〜〜
7)終わったら、コンテナから出る
$ exit
8)一旦、コンテナを停止
$ docker-compose stop
この時点でprojectディレクトリ内にsampleappディレクトリが生成されています。また、laradockとsampleappに、それぞれ.envファイルがあるので所在を確認。
project /
┣laradock /
┃ ┗.env
┗sampleapp /
┗.env
.envファイルの変更
laradockの.envファイルの変更
9)laradockディレクトリにある.envファイル内の一部を変更します。
まずは、ホストパス APP_CODE_PATH_HOST を../から../sampleappへ変更。
# APP_CODE_PATH_HOST=../
# my change ↓↓↓
APP_CODE_PATH_HOST=../sampleapp
10)データベースなどの保存先 DATA_PATH_HOST を~/.laradock/dataから.laradock/dataへ変更(デフォルトではホームディレクトリ上に保存されるが、それをプロジェクトディレクトリのlaradock下へ変更)
# DATA_PATH_HOST=~/.laradock/data
# my change ↓↓↓
DATA_PATH_HOST=.laradock/data
11)重要!次にmysqlのバージョンMYSQL_VERSIONを5.7に下げます。
(latestのままだと、2019年10月時点では8.0がインストールされ、不都合があるらしい)
(バージョンを下げたことで、うまく行かない場合はコチラ)
# MYSQL_VERSION=latest
# my change ↓↓↓
MYSQL_VERSION=5.7
.envファイルを保存して閉じてください。
sampleappの.envファイルの変更
※ココから変更するのはsampleappディレクトリの方の.envファイルですので注意!(.envファイルはlaradockディレクトリとsampleappディレクトリの両方に存在して、ややこしいですがご注意ください)
12)アプリケーションの名前 APP_NAME を任意のものに変更(例:SampleApp)
# APP_NAME=Laravel
# my change ↓↓↓
APP_NAME=SampleApp
13)laradockの.envにあるmysqlの情報を参照しながら、
sampleappの.envにあるmysqlの情報を変更します。
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
# my change ↓↓↓
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
.envファイルを保存して閉じてください。
コンテナの立ち上げ → ブラウザでの確認
14)laradockディレクトリから各コンテナを立ち上げます。
$ docker-compose up -d workspace nginx mysql phpmyadmin
〜〜多少、時間がかかります〜〜
15)コンテナの立ち上がりを確認(とくにmysqlもちゃんと立ち上がっているか)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a501918bd6d5 laradock_nginx "/bin/bash /opt/star…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1
b3f1661bc327 laradock_php-fpm "docker-php-entrypoi…" About a minute ago Up About a minute 9000/tcp laradock_php-fpm_1
9b59af74dc9c laradock_phpmyadmin "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp laradock_phpmyadmin_1
106b6d2851c0 laradock_workspace "/sbin/my_init" About a minute ago Up About a minute 0.0.0.0:2222->22/tcp laradock_workspace_1
b50a3cc6b88a laradock_mysql "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_mysql_1
d6e837f0f469 docker:dind "dockerd-entrypoint.…" About a minute ago Up About a minute 2375-2376/tcp laradock_docker-in-docker_1
16)では、ブラウザからhttp://localhost/へアクセスを確認
sampleappディレクトリをいじってみる
試しにsampleappディレクトリをいじって、表示が変更できるかを確認。
Laravelをヤッホーに変えて見ます。
17)sampleapp/resources/views/welcome.blade.phpをエディタで開き編集
<div class="title m-b-md">
Laravel
</div>
↓↓↓
<div class="title m-b-md">
ヤッホー
</div>
18)保存して、ブラウザをリフレッシュして、変更を確認
データベースmysqlへphpmyadminでアクセス
19)ブラウザでhttp://localhost:8080/へアクセス
20)ログインできるかを確認
ログイン情報は上記で設定した内容を参照
DB_HOST=mysql
DB_USERNAME=default
DB_PASSWORD=secret
工程は以上です。
うまくいかなかった場合
一度、すべてのコンテナ、イメージ、ボリューム、ネットワークを削除して、やり直すことを提案します。
しかし、この方法で削除すると、本当に全部が消えるので、他のプロジェクトに関わるコンテナやイメージがある場合は、個々に削除してください。
全てのコンテナの停止
$ docker stop $(docker ps -q)
コンテナの一括削除
$ docker system prune
イメージ一括削除
$ docker rmi `docker images -q`
$ docker rmi `docker images -f "dangling=true" -q`
ボリュームの一括削除
$ docker volume prune
ネットワークの一括削除
$ docker network prune
別のプロジェクト(別のコンテナ名)で立ち上げる場合
どうぞ、こちらもご覧ください。
補足
(番外編)sampleappの所有者の変更
(11/7追記)
※下記に記載しているアラートの解決方法がわかりました。
※上記工程(5)で `workspace`コンテナへ入るときに、`--user=laradock`を付けていないと、下記のアラートが表示されます。ちゃんとつけていたら「所有者の変更」はしなくて良いです。この補足事項は無視してOKです。
私の場合、laravelプロジェクトを作成した際に下記が表示された
Do not run Composer as root/super user! See https://getcomposer.org/root for details
そして、生成されたディレクトリsampleappは所有者がrootになっており、私が書き込みできなくなっていました。(この後にsampleapp内の.envファイルを変更しますが、書き込みができず進めませんでした)
$ ls -l
drwxr-xr-x 69 user user 4096 10月 13 08:29 laradock
drwxr-xr-x 12 root root 4096 10月 13 08:32 sampleapp
そこで、sampleappの所有者の変更をしました(所有者をrootからuserへ変更)。
$ sudo chown -R user sampleapp
[sudo] user のパスワード:
所有者を変更したことで、以降は問題なく進めることができました。
$ ls -l
drwxr-xr-x 69 user user 4096 10月 13 08:29 laradock
drwxr-xr-x 12 user root 4096 10月 13 08:32 sampleapp
(番外編)~/.laradock/data/mysqlの削除
(11/7追記)
※データベースなどの保存先 `DATA_PATH_HOST` を`~/.laradock/data`から`.laradock/data`へ変更している場合は、この補足事項は無視してOKです。
上記でmysqlのバージョンを下げましたが、これにともない、ホームディレクトリ下にある.laradock/data/mysqlを削除した方が良いらしい。
$ sudo rm -rf ~/.laradock/data/mysql




