Laradockで作ったLaravelプロジェクトで出るpermission deniedに関してかく

こんにちは、Fusicのmockmockチームエンジニアのジホです。

## この記事は
- Fusic Advent Calendar24日目の記事です。
- Linux上でLaradockを使ったLaravelプロジェクト構築で会ったpermission deniedに関して書きます。

## 書く理由は
Laradockの`docker-compose.yml`を見て`でかい。どこ見ればいいのがわからない`時に参考になって欲しいからです。


## 環境
### Linux
- CentOS Linux release 7.7.1908 (Core)

### Docker Compose
- docker-compose version 1.25.0, build b42d419

### Docker
- Docker version 19.03.5, build 633a0ea

## 構成図
`php`というディレクトリーの配下にLaradockがある`Laradock`、Laravalがある`/project-z/docker-laravel/`を作りました。
- `Laradock`は`git clone https://github.com/laradock/laradock.git`したものです。
- `/project-z/docker-laravel/`は`project-z`で`composer create-project --prefer-dist laravel/laravel docker-laravel -vvv`したものです。
![directoryTree1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/63561a5a-d1f5-bdab-7349-8e6e3bc0927f.png)
![directoryTree2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/86deb01c-bf55-9062-b361-fa74aea71f89.png)


## permission deniedを順番に紹介
- LaravelのDB設定のために`/project-z/docker-laravel/.env`を修正しようとするとpermission denied
![souceCodePermissionDotEnv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/9a30aca4-2395-3f13-fc49-571192bf8c08.png)

- 最初はdocker compose up出来たのに、何ん回目でいきなりnginxのssl周りでpermission denied
![secondDockerComposeUpPermission.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/8ba02d0f-db05-dd8e-a707-144a7f5358ee.png)


- よくわからないけど`/storage/logs/`周りでpermission denied
![afterFixSecondDockerComposeUPPermission.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/1c14a7b8-95ab-f622-e607-eb62d9df2edf.png)


- よくわからないけど`/storage/framework/views/`周りでpermission denied
![viewPermission.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/663a1be2-2b0b-2b35-07d3-b055b2d43d04.png)



### permission deniedの原因と解決
- LaravelのDB設定のために`/project-z/docker-laravel/.env`を修正しようとするとpermission denied
  - 原因 : Laravelのソースコードの権限をDockerコンテナの中と外で適切に両方を対応してない(user idとgroup idが揃えてない)
![souceCodePermission.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/038fd7d9-2969-322f-a2ee-831a514c8cf1.png)
![centosAndLaradocUID.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/b55d3105-55e8-7b2c-2e5c-81d9c2ddb61b.png)

  - 解決 : Laradockの`/laradock/.env`にある`WORKSPACE_PUID`と`WORKSPACE_PGID`をDockerコンテナの外を基準として揃える。VSCodeなどで作業するなら、Dockerコンテナの外で作業することになるからです。
![set1001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/7a684d87-47a0-fa43-f83c-1d3d375bbd8a.png)


- 最初はdocker compose up出来たのに、何ん回目でいきなりnginxのssl周りでpermission denied
  - 原因 : `/laradock/php-fpm/Dockerfile`がDockerコンテナの中でnginxのuserのidとgroup idをdefaultとして1000に設定していた。(user idとgroup idが揃えてない)
![usermodWwwdata.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/78c5a974-693e-925b-76ad-065cceca9043.png)


  - 解決 : Laradockの`/laradock/.env`にある`PHP_FPM_PUID`と`PHP_FPM_PGID`修正する
![set1001wwwdata.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/3e475ed7-1d27-dace-dd2b-61893d72cf39.png)


- よくわからないけど`/storage/logs/`周りでpermission denied
- よくわからないけど`/storage/framework/views/`周りでpermission denied
  - 原因 : Laravelのソースコードの権限をDockerコンテナの中と外で適切に両方を対応してない。
  - 解決 : Laradockの`/laradock/.env`にある`WORKSPACE_PUID`と`WORKSPACE_PGID`をDockerコンテナの外を基準として揃える。VSCodeなどで作業するなら、Dockerコンテナの外で作業することになるからです。
    - Laravelプロジェクト生成時点次第で`sudo chown vagrant -R ...`を1回する必要がある可能性があります。例えば、`composer create-project --prefer-dist laravel/laravel docker-laravel -vvv`した時点で`docker-laravel`のファイルとディレクトリー権限がずれていることがあります。


## まとめ
- Dockerコンテナの中と外のuserのidとgroup idが揃えているか確認しましょう。
- `WORKSPACE_PUID`と`WORKSPACE_PGID`、`PHP_FPM_PUID`と`PHP_FPM_PGID`をちゃっと設定したら大体大丈夫です。
  - `/laradock/.env`にあります(Laradockのenvファイル)

## 参考
https://laradock.io/getting-started/
https://docs.docker.com/compose/compose-file/#env_file
https://laravel.com/docs/6.x