TANSAN

取り留めないメモ

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ユーザを使うかの違い。基本は後者であるべきだと思うが、ノートにおまけで書かれてるのはなぜだろう? .envPUIDPGIDを変えることも可。

データベースホストを使用するようにプロジェクト設定を更新する(直訳)

.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のトップが出るはず。