codeigniter4を社内のAlmaLinuxにデプロイしようとしたらハマりまくった件。

色々あってほぼ1日溶かした。Linuxよくわからんのです。一応最終的には解決できたわけで備忘録を残す。

主にハマったポイント

  • ci4では必須のPHP intlモジュールが入っていなかった。
  • パーミッション設定。
  • .htaccessが効かない

前提環境

OSAlmaLinux
WEBサーバapache
php8.1.12
上記環境は既に動作している状態。

PHP intlモジュールをインストールしても、phpinfoに表示されない問題。

インストール方法は「php intl インストール」等で調べてすぐにわかった。今回参考にしたのは下記のサイト様。

PHP intl導入と有効化

だがこの通りにやってもcodeigniter4ではエラーのままだった。この時の状態は、phpコマンドでは認識されているけれど、phpinfoにもintlブロックが表示されず、phpファイルでも認識されない。

apacheは再起動しているし・・・なんだろう。と悩むこと3時間。

答えはphp-fpmを再起動していなかったこと。

この子。

確認コマンドと再起動コマンドは以下の通り。

確認コマンド

systemctl status php-fpm.service

再起動コマンド

systemctl restart php-fpm.service

パーミッションを777にしてもwritableフォルダに書き込み権限を付与できない問題。

実際に出ていたエラーは下記となる。

CodeIgniter\Cache\Exceptions\CacheException

パーミッション問題は割りと良くあるので、とりあえず775にしたが改善せず。そして777でも改善せず。なんだこれ。

ここから3時間ほど調べたり悩んだり。

原因はSELinuxのセキュリティだった。

パーミッションとは別に、SELinuxがファイルやディレクトリへのアクセスや書き込みをブロックしているらしい。下記のコマンドで解除できた(フォルダパスは例)。

chcon -Rv --type=httpd_sys_rw_content_t /var/www/app/writable/

stack overflowはマジで神。githubのissueにもあがってたけど。

github

.htaccessが効かない問題。

本番環境はルートディレクトリ直下にデプロイするんだけれど、開発環境ではサブディレクトリに配置しているため、publicフォルダの.htaccessにRewriteBaseを記述しているが、これが効いてないようだった。

RewriteBase /xxxxx-api

当然ci4の404オーバーライドも効いていない。

httpd.confで、.htaccessでのオーバーライドが許可されていなかった。

これはそんなには迷わずたどり着けた。どちらかというと、.htaccessが原因というところまでたどり着くのにそこそこ費やした。

下記コマンドでhttpd.confを探し編集する。

find / -name 'httpd.conf'

その後、下記のドキュメントルートあたりのAllowOverrideを編集して、許可する。今回はSTG環境のためAllとした。

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    # AllowOverride None
    AllowOverride All
    Require all granted
</Directory>

もちろん、すべての人に当てはまるトラブルシューティングではないが誰かの助けになると良いなぁ。