はじめに
インフラはローカル環境をDockerなどで構築はできますが、詳しくないので、完全個人用のメモです。
間違った情報もあるとおもうので、参考にする際はご注意ください。
Laravelでログの書き込み権限でパーミッションエラーがでたのでこれを気に権限周りの整理。
また修正方法も記載しておきます。
今回のエラー原因
Laravel実行ユーザー
↓
www-data
storage所有者
↓
1000(tm)
だったため、
www-data が storage/logs/laravel.log に書き込めず、Permission denied が発生していました。
登場人物
Ubuntuユーザー
DockerでLaravel環境を作成したUbuntuのユーザー。
Ubuntu環境で id と打つと情報の確認ができます。
今回の場合の例
tm@pc240127:~/Laravel13_sample$ id
uid=1000(tm) gid=1000(tm) groups=1000(tm),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),1001(docker)
※Ubuntu環境
uid 1000 が Laravel のフォルダの所有者に最初はなっていました。
Laravelに書き込むユーザー
PHP-FPMのユーザー www-data
このユーザーが log フォルダなどに書き込めるようにパーミッションを調整しないといけない。
Docker内で以下のコマンドで確認ができます。
root@a3071f286021:/var/www/src# id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data)
※Dockerコンテナ内
Docker内の自分自身のユーザー
自分自身を調べると www-data ではなく、今回は root になっていました。
ログはLaravelを実行しているユーザーが書き込むので、自分自身とは異なります。
名前の確認
root@a3071f286021:/var/www/src# whoami
root
※Dockerコンテナ内
ユーザー情報の確認
root@a3071f286021:/var/www/src# id
uid=0(root) gid=0(root) groups=0(root)
※Dockerコンテナ内
パーミッション調整
Laravelを実行しているPHP-FPMの実行ユーザーを確認
root@a3071f286021:/var/www/src# cat /usr/local/etc/php-fpm.d/www.conf | grep "^user"
user = www-data
※Dockerコンテナ内
Laravelを実行しているグループを確認
root@a3071f286021:/var/www/src# cat /usr/local/etc/php-fpm.d/www.conf | grep "^group"
group = www-data
※Dockerコンテナ内
Laravelが実行中に書き込むフォルダのパーミッションを確認
- storage/:ログやアップロードされた画像、アプリデータのキャッシュなど
- bootstrap/cache/:Laravel本体のキャッシュ
※今回はログファイルの調整だが、まとめてやっておく。
storageフォルダの権限確認
root@a3071f286021:/var/www/src# ls -ld storage
drwxr-xr-x 5 1000 1000 4096 Jun 12 01:41 storage
※Dockerコンテナ内
bootstrap/cache/フォルダの権限確認
root@a3071f286021:/var/www/src# ls -ld bootstrap/cache
drwxr-xr-x 2 1000 1000 4096 Jun 12 01:41 bootstrap/cache
※Dockerコンテナ内
logファイルの権限確認
root@a3071f286021:/var/www/src# ls -l storage/logs
total 132
-rwxr-xr-x 1 1000 1000 134758 Jun 12 01:41 laravel.log
※Dockerコンテナ内
パーミッションの変更
# Laravelを書き込むPHP-FPM実行ユーザーに所有者を変更
chown -R www-data:www-data storage bootstrap/cache
# ディレクトリ
# 所有者とグループ:r(読込)、w(書込)、x(実行)
# その他:r(読込)、x(実行)
# 775 = 所有者(rwx) グループ(rwx) その他(r-x)
find storage bootstrap/cache -type d -exec chmod 775 {} \;
# ファイル
# 所有者とグループ:r(読込)、w(書込)
# その他:r(読込)
# 664 = 所有者(rw-) グループ(rw-) その他(r--)
find storage bootstrap/cache -type f -exec chmod 664 {} \;
パーミッション変更後の確認
フォルダ権限
root@a3071f286021:/var/www/src# ls -ld storage bootstrap/cache
drwxrwxr-x 2 www-data www-data 4096 Jun 12 01:41 bootstrap/cache
drwxrwxr-x 5 www-data www-data 4096 Jun 12 01:41 storage
※Dockerコンテナ内
ログファイル権限
root@a3071f286021:/var/www/src# ls -l storage/logs
-rw-rw-r-- 1 www-data www-data 134758 Jun 12 01:41 laravel.log
※Dockerコンテナ内
パーミッションについて
おまけ
ユーザー覧確認
cat /etc/passwd
※Dockerコンテナ内
見方
root:x:0:0:root:/root:/bin/bash
↓
ユーザー名:x:UID:GID:説明:ホームディレクトリ:ログインシェル
※「:説明:ホームディレクトリ:ログインシェルは時々見る程度」
グループ一覧の確認
cat /etc/group
※Dockerコンテナ内
見方
root:x:0:
↓
グループ名:x:GID
