PHP7.4のセキュリティサポート期限が来年の11月末、アクティブサポートは今年の11月と聞いたので、新しく提供するサービスのPHPバージョンを上げることにした。
PHP8.0のインストール自体はPHP7.4だったものをPHP8.0に変えるだけの簡単なもの。しかし、必要なPHP関連のモジュールのうち php-pecl-redis
だけyum使っても入らなかった。
$ sudo yum -y install php-pecl-redis --enablerepo=amzn2extra-php8.0
:
Error: Package: php-pecl-redis-2.2.8-1.el7.x86_64 (epel)
:
どうやらまだamzn2extraの方で対応されていない模様。
今回はRedisを使うため、代わりのモジュールを探して検証する手間ももったいないから、ソースを落としてビルドすることにした。
前提
- php8.0がインストール済みであること
- phpizeを使うために、php-develが必要。あらかじめyumでインストールしておく
- makeするためにgccもインストールしておくこと
phpredisのインストール
githubから最新版のphpredisを直接gitでclone
$ cd /usr/local/src
$ sudo git clone https://github.com/phpredis/phpredis.git
makeする
$ cd /usr/local/src/phpredis
$ sudo phpize
$ sudo ./configure
$ sudo make && sudo make install
/etc/php.ini に追加
extension=redis.so
/etc/httpd/conf.d/php.conf
書き換える
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
↓
php_value session.save_handler "redis"
php_value session.save_path "tcp://[redisのエンドポイント]:6379"
Apacheを再起動する
$ sudo systemctl stop httpd
$ sudo systemctl start httpd
確認
$ php -m | grep redis
redisって出たらOK
ansibleで書いたらこんな感じ
- hosts: all
become: true
gather_facts: no
tasks:
- name: Enable PHP8.0
shell: "amazon-linux-extras enable php8.0"
changed_when: False
- name: Install PHP
yum: name={{ items }} state=present enablerepo=amzn2extra-php8.0
vars:
items:
- php
- php-fpm
# - php-pecl-redis # エラーになるので、ここでインストールができない
- php-devel
- name: Install packages
yum: name={{ packages }} state=present
vars:
packages:
- redis
- git
- gcc*
- name: git clone for phpredis
ansible.builtin.git:
repo: https://github.com/phpredis/phpredis.git
dest: /usr/local/src/phpredis
- name: Install phpredis
command: chdir=/usr/local/src/phpredis {{ item }}
with_items:
- phpize
- ./configure
- make
- make install
- name: lineinfile add extension redis.so in php.ini
lineinfile:
path: /etc/php.ini
line: 'extension=redis.so'
insertafter: EOF
yumでインストールできれば必要がない、gitやらgccを入れないといけないところが、ちょっと気持ちが悪いとことですが、仕方ない。
githubには、「Fix PHP 8.1 tests」と書かれていたので、8.1くらいまでは問題なく動くようです。