Graviton な Amazon Linux 2023 で PHP8.2 を利用しています。
ElastiCache の Redis でセッションを使いたいと思ったんですが、2024年1月時点で、Amazon Linux 2023 のレポジトリには用意されていませんでした。
いろいろ頑張って調べましたが、自分でコンパイルしたほうが良さそうです。
ということで、コンパイルしてみました。
前提条件
すでに他の PHP 8.2 本体やエクステンションはインストールされていると想定
STEP 1. GitHub に機能要望を送る
GitHub の機能要望の該当 Issue がまだオープンだったら、 "I want it too!" とコメントをする
コンパイルしたくない!
STEP 2. コンパイルツールをインストールする
php-devel, gcc, make や git をインストールする
sudo dnf install php8.2-devel gcc make git
STEP 3. phpredis のレポジトリをチェックアウトする
home ディレクトリ配下 (/home/ec2-user/phpredis/
)で作業する想定です。
cd
git clone https://github.com/phpredis/phpredis.git
cd phpredis
STEP 4. 2024/1 時点で最新安定版の 6.0.2 をチェックアウトする
git checkout tags/6.0.2
STEP 5. コンパイルをすすめる
# Run phpize
phpize
# Run configure
./configure
# Run compile
make && sudo make install
redis.so が作成されたか確認する
ls -al /usr/lib64/php8.2/modules/
redis.so ファイルがいるはずです。
STEP 6. Redis の INI ファイルを追加する
Remi レポジトリに倣って INI を、50-redis.ini
に作ります。
sudo vi /etc/php.d/50-redis.ini
以下の内容。いろいろコメントアウトされていますが、1行だけしか使ってないです
; Enable redis extension module
extension = redis.so
; phpredis can be used to store PHP sessions.
; To do this, uncomment and configure below
; RPM note : save_handler and save_path are defined
; for mod_php, in /etc/httpd/conf.d/php.conf
; for php-fpm, in /etc/php-fpm.d/*conf
;session.save_handler = redis
;session.save_path = "tcp://host1:6379?weight=1, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2"
; Configuration
;redis.arrays.algorithm = ''
;redis.arrays.auth = ''
;redis.arrays.autorehash = 0
;redis.arrays.connecttimeout = 0
;redis.arrays.consistent = 0
;redis.arrays.distributor = ''
;redis.arrays.functions = ''
;redis.arrays.hosts = ''
;redis.arrays.index = 0
;redis.arrays.lazyconnect = 0
;redis.arrays.names = ''
;redis.arrays.pconnect = 0
;redis.arrays.previous = ''
;redis.arrays.readtimeout = 0
;redis.arrays.retryinterval = 0
;redis.clusters.auth = 0
;redis.clusters.cache_slots = 0
;redis.clusters.persistent = 0
;redis.clusters.read_timeout = 0
;redis.clusters.seeds = ''
;redis.clusters.timeout = 0
;redis.pconnect.pooling_enabled = 1
;redis.pconnect.connection_limit = 0
;redis.pconnect.echo_check_liveness = 1
;redis.pconnect.pool_detect_dirty = 0
;redis.pconnect.pool_poll_timeout = 0
;redis.pconnect.pool_pattern => ''
;redis.session.lock_expire = 0
;redis.session.lock_retries = 10
;redis.session.lock_wait_time = 2000
;redis.session.locking_enabled = 0
redis が組み込まれたか、確認する
php -i | grep redis
結果に /etc/php.d/50-redis.ini
などが載っていればOK
/etc/php.d/50-redis.ini
redis
redis.arrays.algorithm => no value => no value
redis.arrays.auth => no value => no value
(省略)
STEP 6. (オプション) PHP-FPM 再起動
Nginx などで、PHP を PHP-FPM のプロセスとして動かしている場合は、再起動して Redis を使えるようにします。
sudo systemctl restart php-fpm
以上。
繰り返しますが、GitHub の機能要望の該当 Issue がまだオープンだったら、 "I want it too!" とコメントをお願いします!
STEP 7. アップデートする時
Git で最新版がでていたら、git checkout をまた行って、コンパイルしましょう。
ただ、本番環境でいきなり実施するのは危険です。
開発環境を作成し、そこで試してからアップデートしましょう。
早く、Amazon Linux 2023 公式でサポートしてくれないかな・・・。