MinEMemO
🏷️「インフラ 」Tag 記事一覧(3 posts)
【インフラ】Dockerで生成したLaravel環境でログパーミッションエラー + 権限系の整理のメモ

2026-06-13

はじめに インフラはローカル環境を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$ iduid=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-datauid=33(www-data) gid=33(www-data) groups=33(www-data) ※Dockerコンテナ内 Docker内の自分自身のユーザー 自分自身を調べると www-data ではなく、今回は root になっていました。 ログはLaravelを実行しているユーザーが書き込むので、自分自身とは異なります。 名前の確認 root@a3071f286021:/var/www/src# whoamiroot ※Dockerコンテナ内 ユーザー情報の確認 root@a3071f286021:/var/www/src# iduid=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 storagedrwxr-xr-x 5 1000 1000 4096 Jun 12 01:41 storage ※Dockerコンテナ内 bootstrap/cache/フォルダの権限確認 root@a3071f286021:/var/www/src# ls -ld bootstrap/cachedrwxr-xr-x 2 1000 1000 4096 Jun 12 01:41 bootstrap/cache ※Dockerコンテナ内 logファイルの権限確認 root@a3071f286021:/var/www/src# ls -l storage/logstotal 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/cachedrwxrwxr-x 2 www-data www-data 4096 Jun 12 01:41 bootstrap/cachedrwxrwxr-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 さいごに 業務で常にしておかないと、何でこうするのか説明ができなくなりますね。色々エンジニアは大変。
【インフラ】パーミッション早見表

2026-06-13

はじめに インフラはローカル環境をDockerなどで構築はできますが、詳しくないので、完全個人用のメモです。 間違った情報もあるとおもうので、参考にする際はご注意ください。 パーミッション早見表 Linuxの権限は 所有者 グループ その他 の順番で並んでいます。 例えば drwxrwxr-x なら d rwx rwx r-x│ │ │ ││ │ │ └ その他│ │ └ グループ│ └ 所有者└ ディレクトリ になります。 rwx の意味 r = read 読み込みw = write 書き込みx = execute 実行 数値との対応 r = 4w = 2x = 1 例えば rwx は 4 + 2 + 1 = 7 です。 よく使う権限 所有者だけ全権限:755 rwxr-xr-x│ │ ││ │ └ その他 = 読み込み・実行│ └ グループ = 読み込み・実行└ 所有者 = 読み込み・書き込み・実行 所有者 : 7 = rwxグループ : 5 = r-xその他 : 5 = r-x その他以外全権限:775 rwxrwxr-x│ │ ││ │ └ その他 = 読み込み・実行│ └ グループ = 読み込み・書き込み・実行└ 所有者 = 読み込み・書き込み・実行 所有者 : 7 = rwxグループ : 7 = rwxその他 : 5 = r-x 全権限:777 rwxrwxrwx│ │ ││ │ └ その他 = 全権限│ └ グループ = 全権限└ 所有者 = 全権限 所有者 : 7 = rwxグループ : 7 = rwxその他 : 7 = rwx 誰でも書き込み可能。開発中の応急処置では見かけるが、実務ではあまり推奨されない。 さいごに パーミッション数値とかアルファベットとか、パッと覚えられない
【インフラ】サーバー系の個人用のメモ

2023-07-15

はじめに インフラはローカル環境をDockerなどで構築はできますが、詳しくないので、完全個人用のメモです。 間違った情報もあるとおもうので、参考にする際はご注意ください。 用語 OS Linux、windows、iOS、Android、Unixなど。 ちなみにカーネルとは、ハードウェアの管理、プログラムの実行管理、ファイルシステムなど、OSのコアとなる基本サービスをセットで提供するプログラム。 ※カーネル=Linux=OSみたいな感じになってる Linuxディストリビューション OSとカーネルだけでは動かないのでパック(Linuxディストリビューション)として配布されているもの。 なので、結局Linuxを使うときはLinux環境に好きなディストリビューションをいれる。という形になるみたい。 ※カーネル+アプリケーションという感じ Red Hat系 Fedora(フェドーラ) CentOS(セントオーエス) Red Hat Enterprise Linux(RHEL) Debian系 Ubuntu ※今の主流 Alpine系 軽量でシンプルなディストリビューションらしい ※windowsサーバーにディストリビューションみたいなのはない ※ApaceheやngnixはWEBソフトウェア。WEBページ使うときにディストリビューションに入ってるものという感じのようです。 ※ちなみにApacheのバージョン確認は httpd -v で出来る Linuxフォルダ構造 /bin OSやコマンドが正常に動作するための実行ファイル。基本触らない /boot システム起動時のファイル。そんなに触らない /dev ハードウェア機器(キーボードとか)を表すファイル /etc 設定ファイル /home ユーザのホームディレクトリ。ユーザごとのログインの始まりの場所 /lib OSに必要なライブラリ /media USBなどの外部記憶媒体をシステムで「自動」マウントする。マウントしないと使えない。 /mnt USBなどの外部記憶媒体をシステムで「手動」マウントする。マウントしないと使えない。 /opt chromeなど追加アプリケーションがインストールされる /proc OSのシステムコントロール /root 管理系rootアカウントのホームディレクトリ /sbin 管理系rootアカウントのみ実行できるプログラム (binの管理権限用) /sys OSの現在の状況に関する情報 /usr 全ユーザが共通して利用するプログラムのデータ。 TOPのbinとはべつにここにもbinがはいっていたりする。 ※PCでいうCドライブにツールインストールする。みたいな感じっぽい ※/varとの違い:/varはホストごとの共有できない可変データを入れる場所 /var システム運用中に自動で生成されて、あとから削除されるデータ。ログなどが入る。 プログラムなどのコードもvar/www/source/などに入れたりする。 サーバーの見分け方 Windows ver とか systeminfo とかで情報が返ってくる。 Linuxはコマンド自体使えずエラーになる。 Linux /etc/ に Linuxディストリビューションに応じて設定ファイルがあるのでそれで判断する。 /etc/ で何の設定ファイルがあるか見る CentOS:/etc/redhat-release Fedora:/etc/fedora-release Debian(ubuntu):/etc/debian_version その他:/etc/issue など なおバージョンの確認は cat /etc/各ファイル名で中身を見てバージョンをみるとOK。 ※例)Debianなら「cat /etc/debian_version」 シェア率はUbuntuが強い 2月Webサイト向けLinuxシェア、Debianが微増 業務で実際に触っていたファイルについて /etc/httpd/conf.d/ssl.conf ドキュメントルート、SSL化のファイルのパスとかログの書き出し場所を記載するファイル。 ssl.conf #80はポート番号でhttpのこと<VirtualHost *:80>DocumentRoot 表示するフォルダのパスServerName ドメイン名RewriteEngine OnRewriteCond %{HTTPS} offErrorLog /var/log/httpd/エラーログのフォルダ名CustomLog /var/log/httpd/アクセスログのフォルダ名 combined env=!nologEnableMMAP OffEnableSendfile Off</VirtualHost>#443はhttps<VirtualHost *:443>DocumentRoot 表示するフォルダのパスServerName ドメイン名SSLEngine onSSLCertificateFile /etc/httpd/conf/SSL証明書ファイル名.crtSSLCertificateKeyFile /etc/httpd/conf/鍵ファイル名.keySSLCertificateChainFile /etc/httpd/conf/中間証明書ファイル名.cerErrorLog /var/log/httpd/エラーログのフォルダ名CustomLog /var/log/httpd/アクセスログのフォルダ名 combined env=!nologEnableMMAP OffEnableSendfile Off</VirtualHost> ※vhost.confとssl.confで設定されてるものや、どちらかだけで設定されてるものもある アクセスログの取り方の例 レンタルサーバーのツールもあるが、生でとる場合は参考先を参照 https://www.homepage-tukurikata.com/access/log.html 参考元より抜粋 一般的には、サーバーの管理画面でアクセスログの保存設定を有効にしたのち、保存期間なども指定することでデータが蓄積されていきます。レンタルサーバーに「log」などのフォルダが作成されている場合、その場所にログが保存されていることが多いです。 以下の内容が1固まりで書いてあるとのこと。 IPアドレス 時間 取得したファイル リクエストしたサーバードメイン ステータス 次のページに行った場合にも同じようにアクセスログが追加されていくため、その時間差からそのページでの滞在時間を調べることができます。 また、最後にアクセスしたページから、どのページで離脱したのかも判断することができます。 実際使うには? ただし、以下のように情報が多すぎるため、ログとして利用するために、必要な情報だけに絞る仕組みが、結局必要になりそうです。 画像素材などのファイル(.pngや.jpg、.gifなど)、グーグルなどのクローラーによるアクセスもその都度ログに記載されることになります。 そのため、このアクセスログを調べる際は、膨大なデータのなかから画像やクローラーなどのアクセスを取り除いて調べる必要があります。 例えば、1ページ内で画像やCSSなどのファイルを10個使用していた場合、その1ページを閲覧する際にも各ファイルへのアクセスが10個発生してしまうため実際のアクセスよりも10倍のヒット数が計測されてしまいます。 そのため、アクセスログで実際の訪問者のアクセス数を計測する場合、一般的には「.html」などのファイルのみをカウントして1ページビューとカウントすることになります。
profile_icon
taka
プログラマー
2017年11月から業務でPHPを触りだしたエンジニアです。 業務経験8年程度。 2022年から「要求整理→設計→実装→テスト→リリース」と開発のステップをきちんと経験したく、 様々な会社を経験しました。 現職が自社案件枯渇、本社エリア以外のSES案件の繋がりがなしと急に発覚し、急遽強制的に転職活動中。 現職をやめるつもりはなかったし、転職は本当に最後にしたいのでもしよければお声がけください。 【GitHub コードサンプル】 https://github.com/tm-qc - Docker、MVC、CRUD、認証、テストなどのサンプルコード(Laravel、ASP.NET CORE) - 経験PJ詳細まとめ