Laradockでlaravel起動まで
概略
ubuntu環境でのlaradocインストール。 変なところでハマったので手順見直してここにドキュメント化しておく。
参考資料
事前準備
dockerとgitが必要なのでそれぞれインストールする
apt list docker-ce docker-compose git docker-ce/zesty,now 17.12.0~ce-0~ubuntu amd64 [インストール済み] docker-compose/bionic,bionic,now 1.17.1-2 all [インストール済み] git/bionic-updates,bionic-security,now 1:2.17.1-1ubuntu0.4 amd64 [インストール済み]
無ければapt install docker-ce docker-compose git
でインストール。
➜ laradock docker version Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:10:45 2017 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:09:19 2017 OS/Arch: linux/amd64 Experimental: false ➜ laradock docker-compose version docker-compose version 1.17.1, build unknown docker-py version: 2.5.1 CPython version: 2.7.15rc1 OpenSSL version: OpenSSL 1.1.0g 2 Nov 2017 ➜ laradock git version git version 2.17.1 ➜ laradock
laradockのインストール開始
今回は最初からやるのでDon’t have a PHP project yet:の項に従う。 ただし、laradockそのものがこの手順で始められるってだけで、肝心のlaravel導入あたりで急に手順が雑になる
laradock本体のgit clone
手順どおり。プロジェクトをクローンしたいディレクトリで以下。
git clone https://github.com/laradock/laradock.git
注記のように構成は以下のようになる。
+ 作業ディレクトリ + laradock(cloneした本体) + project-z(作業用のワーキングディレクトリ。任意の名前)
webサーバの設定編集
サンプルのコピー
laradockのディレクトリに移動してenv-sample
をコピーする
cd laradock cp env-example .env
.envの編集
最初の行にあるAPP_CODE_PATH_HOST
を作業ディレクトリに変更する。
サンプルどおりのproject-zのまま実施...っと思ったんだけど、必ず変えろ
とあるのでbooklifeというディレクトとする。
.envはdocker-compose.ymlと一緒に置いておけば環境変数の役割を果たすファイル。 ${hogehoge}で.envを参照してセットしてくれる。
#元ネタ APP_CODE_PATH_HOST=../ APP_CODE_PATH_HOST=../booklife/
laradock 起動
Usageのセクション。.envのコピーは終わってるのでdocker-compose
から再開。
OSによってdocker-compose.yml
の編集必要かも……とあるが、linuxについて言及されてないので気にしないでOK。
ここで作成されるコンテナはワークスペース+suffix。複数プロジェクトで使うことを想定したものとなっている。自分でユニークな名前をつけたいならCOMPOSE_PROJECT_NAME
を任意のものに変更する。※.envの中身
コンテナ作成
サンプルどおりnginxとmysqlのみ立ち上げだが、mysqlは.envの設定書き換えないと後々使えないくさい。あとで追記するかも。
docker-compose up -d nginx mysql Creating laradock_docker-in-docker_1 ... Creating laradock_mysql_1 ... id:kuboroid Creating laradock_docker-in-docker_1 Creating laradock_docker-in-docker_1 ... done Creating laradock_workspace_1 ... Creating laradock_workspace_1 ... done Creating laradock_php-fpm_1 ... Creating laradock_php-fpm_1 ... done Creating laradock_nginx_1 ... Creating laradock_nginx_1 ... done
サポートしているイメージはこちらを参照。ただし、たまに忘れるからdocker-compose.yml
を見てくれとある。
おまけ。grep
grep "COMPOSE_PROJECT_NAME" -rl ./ ./docker-compose.yml ./DOCUMENTATION/content/getting-started/index.md ./env-example ./.env
workspaceでの作業
docker-compose upでlaradockをcloneしたディレクトリにworkspace(今回はbooklife)が出来上がっている。docker-compose.ymlのworkspaceサービスのディレクトリ(だと思う)。コンテナ内でコマンドを叩くため、docker-compose exec
でworkspaceのbashを叩く。
# laradockで実施 docker-compose exec workspace bash
また、ファイルを追加するにはlaradock
ユーザをオプションでつける
docker-compose exec --user=laradock workspace bash
何が違うかというと
docker-compose exec workspace bash root@34f560a35bcc:/var/www# exit docker-compose exec --user=laradock workspace bash laradock@34f560a35bcc:/var/www$
workspaceでrootを使うか、laradockユーザを使うかの違い。基本は後者であるべきだと思うが、ノートにおまけで書かれてるのはなぜだろう?
.env
のPUID
やPGID
を変えることも可。
データベースホストを使用するようにプロジェクト設定を更新する(直訳)
.envのDBをmysqlにする。この先でlaravelインストールしそうな書きっぷりなのだけど、あからさまにリンクが違う。
laravelの導入
なので、こっちのドキュメントを参照してみる。
#workspaceに入る(root) docker-compose exec workspace bash $ root@workspace:/var/www# composer install $ root@workspace:/var/www# cp .env.example .env $ root@workspace:/var/www# php artisan key:generate $ root@workspace:/var/www# exit $root@server:~/laravel/laradock# cd .. $root@server:~/laravel# sudo chmod -R 777 storage bootstrap/cache
しかしcomposer installという雑な記載でできず。なんか途中でworkspaceからserverになってるし、laravel初心者には優しくないドキュメントである。 rootユーザでやるとcomposerに怒られるが、laradockユーザだと権限がなかったのでrootで実施する。
www直下にlaravel環境構築
cd /var/www composer create-project --prefer-dist laravel/laravel . 5.7.*
composerの処理が完了した後、strageとbootstrap/cacheの権限を変更する。
chmod -R 777 storage bootstrap/cache
最初はcomposer create-project --prefer-dist laravel/laravel booklife 5.7.*
でやったが、www/booklifeで階層が掘られて404エラーとなった。
wwww直下に展開すると、ローカルの./booklife直下に展開され、ルーティングが正しいものとなる。
とりあえず、これでhttp://localhost/に接続することでlaravelのトップが出るはず。