エンジニャーリング

技術ときどきネコ

AmazonLinux2にPHP8.0とphpredisをインストール

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くらいまでは問題なく動くようです。