読者コミュニティ|【実践】LaravelでFat Controllerをリファクタしよう〜DIコンテナ・テストコードまで〜
本の感想や質問をお気軽にコメントしてください。
リファクタリングを実践する特性上、環境構築が上手くいかないといったトラブルが頻出なので、何かあればこちらにコメントください!
ぺこり。環境構築で手間取っております。
以下の現象です。
docker環境構築の際、bookmark-httpsがすぐ落ちてしまう。
リスタートしているが2-3回ほど繰り返して落ちる。
エラーログを見ていると以下のエラー発見
cannot load certificate "/var/lib/https-portal/localhost/local/chained.crt"
コメントありがとうございます!謎ですね。
https-portalというDockerコンテナを使ってるので、READMEとかissue漁ってみますね!
ちなみにMacはM1以降ですか?Intelですか?その他何か環境情報あれば教えてください!
httpsであることにあまり意味がなかった気もするので、もしDockerに抵抗なければhttpsコンテナを使わずに、ブラウザからのアクセスではhttpを使う方針で設定を変えてみるといいかもしれません。
私の方は一旦現仕様のまま動かないかという方針で調べてみます。
迅速な返答、痛み入ります...!
こちら自分が知りうる情報です。
- MacはM1以降
- Docker Engine v26.1.4
httpを使う方針で進めてみます。
方法はbookmark-httpsコメアウト、dockerコンテナ立て直し、http://localhostへアクセスであっていますでしょうか?
情報ありがとうございます。
方法については、試したことが無いのでなんともいえませんが多分そういう方針です!
軽く調べただけですが、Dockerにrootlessモードというのがあって、これがON/OFFのどちらかによって、80番ポートや443ポートが使えるか?が異なるようです
上記記事にrootlessモードかどうかの確認方法など載っているので、よかったらお試しください!
すみません、こちらも同様のエラーで環境構築から進めない状況です、、、。
環境としましては、
intelのmacとm2のmacの両方で試しましたが同様のエラーでした。
またrootlessの確認もしましたが通常のdockerでした。
コンテナのエラーよりdocker-compose.ymlのhttps-portalを以下に変更したところ、コンテナは立ち上がりますが400番が帰ってきて進めない状況です。
volumes:
- ./docker/https-portal/cert:/var/lib/https-portal/localhost/local
何か改善案や代替案などありましたらご教授願いたいです。
報告ありがとうございます!
なにせ、僕の環境では問題なく動いているので謎ですね…従って、代案も浮かばない状況です。
一旦dockerのvolume修正は暫定的に正しいとして、400の方を深掘りさせてください。(なぜなら400と言い切れるということはLaravelレイヤーの問題であるため)
・m2の方で起きているか?
・m2の方では、起動コマンドが異なるが教材の通りのオプションで起動しているか?
・400と断定できているということはLaravelのエラー画面が出ていると推察します。どのURLを開きどんなエラー画面が出ていますか?(可能ならスクショ)
・環境構築手順のどこまで進めましたか?
・可能ならいくつかのコンテナからログ出力の内容が欲しいです(docker compose logs コンテナ名)
ただ、ちょっとそのvolume修正ってバインドの意味が変わってる気がするので、結果コンテナが立ち上がっても上手くいかない説もありますね。
後ほど自分の環境で、dockerディレクトリ以下のtreeを送るので、突き合わせお願いさせてください!
また、https-portal側のissue漁りたいのですが、可能なら当該コンテナのエラーログをもっと広い範囲で貰えると助かります(GitHubのissuesを漁りたい)
treeコマンドの結果を掲載します。差異がありましたら教えてください!
※https-portal本体が私が教材執筆した頃と現在でVersion差異がある等の理由で、内部挙動が異なっている可能性を考慮しています
tree -L 4 ./docker/https-portal/
./docker/https-portal/
└── cert
├── account.key
├── default_server
│ ├── default_server.crt
│ └── default_server.key
├── dhparam.pem
├── dynamic-env
├── dynamic-env.stamp
└── localhost
└── local
├── chained.crt -> /var/lib/https-portal/localhost/local/signed.crt
├── domain.csr
├── domain.key
└── signed.crt
4点気になったことがありますので、報告いたします。
なお、私の環境は以下のとおりです。
- チップ Apple M2
- macOS 14.6.1
- Docker Desktop 4.34.0
(1) bookmark-httpsが落ちる
Docker コンテナの立ち上げでbookmark-httpsが落ちます。
原因はchained.crtのパスに間違いあるためです。
解決策は、docker-compose.ymlを以下のように修正します。(参考)
- - ./docker/https-portal/cert:/var/lib/https-portal
+ - ./docker/https-portal/cert:/var/lib/https-portal/localhost
(2) Please provide a valid cache path.
エラーが発生する
https://localhost/ にアクセスすると以下のエラーメッセージが表示されます。
Please provide a valid cache path.
以下のコマンドを実行することで、エラーが解消します。
docker compose exec app mkdir -p /opt/laravel-bookmark/storage
docker compose exec app mkdir -p /opt/laravel-bookmark/storage/framework/sessions
docker compose exec app mkdir -p /opt/laravel-bookmark/storage/framework/views
docker compose exec app chown -R www-data:www-data /opt/laravel-bookmark/storage
docker compose exec app chmod -R 775 /opt/laravel-bookmark/storage
(3) php.iniのdate.timezoneの値が${TZ}になっている
php.iniのdate.timezoneの値が${TZ}になっています。
% docker compose exec app cat /usr/local/etc/php/php.ini
(省略)
date.timezone = ${TZ}
私はdocker/php/Dockerfileの以下の行を修正して対応しました。
COPY php.ini /usr/local/etc/php/php.ini
+ RUN sed -i "s/\${TZ}/Asia\/Tokyo/" /usr/local/etc/php/php.ini
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
(4) Chapter 25のタイプミス
Chapter 25 実際に外部アクセスはしない”モック”を作成しようにタイプミスがあります。
- final class MockLinkPreview islmplements LinkPreviewInterface
+ final class MockLinkPreview implements LinkPreviewInterface
- $useCase = new CreateBookmarkUseCase(j);
+ $useCase = new CreateBookmarkUseCase(new MockLinkPreview());
以上です。
ありがとうございます!環境情報やDiffの形式で情報提供いただき大変助かります。
bookmark-httpsの問題は、私の環境では再現しなかったため、修正案もいただきありがたいです。そのまま教材にも反映しました。
今後もなにかありましたらよろしくお願いします。