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