AzureのAppServiceにPHPのRedisエクステンションをインストールする

1. App Serviceの作成

ランタイムスタックを PHP にして App Service を作成する。

create webapp
図 1. AppServiceの作成
PHP 7.4 では下記エラーによりインストール出来ませんでした

2. Redisエクステンションのインストール

SSHコンソールを開く

ssh
図 2. SSH

インストール

# pecl install redis

Cannot load Zend OPcache - it was already loaded
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading redis-5.3.1.tgz ...
Starting to download redis-5.3.1.tgz (264,485 bytes)
......................................................done: 264,485 bytes
29 source files, building
running: phpize
Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731
enable igbinary serializer support? [no] :

....

Build complete.
Don't forget to run 'make test'.

 :
 :
 :

 Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20180731/redis.so'
install ok: channel://pecl.php.net/redis-5.3.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=redis.so" to php.ini

.so ファイルを置くディレクトリを作り、ビルドされた redis.so をコピーする。

/home 配下に作成すること
# mkdir /home/site/ext
# cp /usr/local/lib/php/extensions/no-debug-non-zts-20180731/redis.so /home/site/ext/
# ls -al /home/site/ext/
total 2688
drwxrwxrwx 2 nobody nogroup       0 Jul 23 00:27 ./
drwxrwxrwx 2 nobody nogroup    4096 Jul 23 00:26 ../
-rwxrwxrwx 1 nobody nogroup 2746136 Jul 23 00:27 redis.so*

ini ファイルを置くディレクトリを作る。

こちらも /home 配下に作成すること
# mkdir /home/site/ini

extensions.ini ファイルを作成して、extension=/home/site/ext/redis.so を書き込む。

# touch /home/site/ini/extensions.ini
# echo 'extension=/home/site/ext/redis.so' >> /home/site/ini/extensions.ini

3. AppServiceの設定

[構成]メニューのアプリケーション設定にある「新しいアプリケションを選択」を選ぶ。

app setting
図 3. アプリケーション設定
  • 名前 : PHP_INI_SCAN_DIR

  • 値 : /usr/local/etc/php/conf.d:/home/site/ini

として追加する。

setting ini scan dir
図 4. PHP_INI_SCAN_DIR設定

変更を保存する。

save setting
図 5. 保存

App Service が再起動して反映される。

# php -i |grep redis
Cannot load Zend OPcache - it was already loaded
redis
redis.arrays.algorithm => no value => no value
redis.arrays.auth => no value => no value
redis.arrays.autorehash => 0 => 0
redis.arrays.connecttimeout => 0 => 0
redis.arrays.consistent => 0 => 0
redis.arrays.distributor => no value => no value
redis.arrays.functions => no value => no value
 :
 :
 :

4. PHP7.4でのエラー

ランタイムスタックをphp7.4にした時に pecl install xdebug で出たエラー

creating libtool
appending configuration tag "CXX" to libtool
configure: patching config.h.in
configure: creating ./config.status
config.status: creating config.h
running: make
/bin/bash /tmp/pear/temp/pear-build-rootWZJclH/redis-5.3.2/libtool --mode=compile cc  -I. -I/tmp/pear/temp/redis -DPHP_ATOM_INC -I/tmp/pear/temp/pear-build-rootWZJclH/redis-5.3.2/incl
ude -I/tmp/pear/temp/pear-build-rootWZJclH/redis-5.3.2/main -I/tmp/pear/temp/redis -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/in
clude/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -I/usr/local/include/php/ext  -DHAVE_CONFIG_H  -g -O2   -c /tmp/pear/temp/redis/redis.c -o redis.lo
 cc -I. -I/tmp/pear/temp/redis -DPHP_ATOM_INC -I/tmp/pear/temp/pear-build-rootWZJclH/redis-5.3.2/include -I/tmp/pear/temp/pear-build-rootWZJclH/redis-5.3.2/main -I/tmp/pear/temp/redis
 -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib
-I/usr/local/include/php/ext -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/temp/redis/redis.c  -fPIC -DPIC -o .libs/redis.o
/tmp/pear/temp/redis/redis.c:22:10: fatal error: config.h: No such file or directory
 #include "config.h"
          ^~~~~~~~~~
compilation terminated.
make: *** [Makefile:192: redis.lo] Error 1
ERROR: `make' failed