4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Linux 2023 で PHP Redis エクステンションをコンパイルする

Last updated at Posted at 2024-01-11

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 公式でサポートしてくれないかな・・・。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?