さくらのVPSでCentos8LAMP環境構築4 RedisとPHPとセッション
さくらのVPSでCentos8LAMP環境構築3に引き続きRedisをインストールします。
セッション情報をここに保存して、PHP、NODE間で共有管理するのに利用予定。
パッケージインストールできそうです。
dnf module list redis CentOS-8 - AppStream 10 kB/s | 4.3 kB 00:00 CentOS-8 - Base 3.5 kB/s | 3.9 kB 00:01 CentOS-8 - Extras 3.6 kB/s | 1.5 kB 00:00 Extra Packages for Enterprise Linux Modular 8 - 14 kB/s | 8.3 kB 00:00 Extra Packages for Enterprise Linux 8 - x86_64 15 kB/s | 8.4 kB 00:00 Node.js Packages for Enterprise Linux 8 - x86_6 22 kB/s | 2.5 kB 00:00 CentOS-8 - AppStream Name Stream Profiles Summary redis 5 [d] common [d] Redis persistent key-value database Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
インストールと自動起動設定
#dnf install -y @redis #sudo systemctl enable --now redis #systemctl status redis ● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor prese> Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Mon 2021-02-22 11:22:15 JST; 9s ago Main PID: 22821 (redis-server) Tasks: 4 (limit: 6082) Memory: 1.4M CGroup: /system.slice/redis.service └─22821 /usr/bin/redis-server 127.0.0.1:6379
PHPで利用するためphpredisのインストールをまず行います。remiに入っているみたいなのでremiを設定します。
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm dnf search php-pecl-redis5 #PHPのバージョンを合わせたものをインストールする dnf install php72-php-pecl-redis5
続いてPHPのセッション保存先を変更します。
nano -w /etc/php.ini ---- ;session.save_handler = files session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379" ;session.serialize_handler = php session.serialize_handler = php_serialize ---- systemctl restart httpd systemctl restart php-fpm
php -c /etc/php.iniでテストしてみると動かない・・・モジュールが配置されていないしigbinaryやらmsgpackやらが必要。モジュールの読み込みの順番があるので順番きおつける
cp /opt/remi/php72/root/usr/lib64/php/modules/redis.so /usr/lib64/php/modules/ echo "extension=redis.so" > /etc/php.d/30-redis.ini git clone git://github.com/igbinary/igbinary.git cd igbinary/ phpize ./configure CFLAGS="-O2 -g" --enable-igbinary make;make install echo "extension=igbinary.so" > /etc/php.d/20-igbinary.ini yum install php72-php-pecl-msgpack cp /opt/remi/php72/root/usr/lib64/php/modules/msgpack.so /usr/lib64/php/modules/ echo "extension=msgpack.so" > /etc/php.d/20-msgpack.ini systemctl restart httpd systemctl restart php-fpm
これでチェックは通るようになったが、httpd上ではセッションがデフォルトファイルにされてしまう。とりあえず強制的にredisを使うようなコードでテスト
nano -w testsession.php ----- <?php ini_set('session.save_handler', 'redis'); ini_set('session.save_path', 'tcp://localhost:6379'); session_start(); echo "save_handler=" . ini_get("session.save_handler") . "\n"; echo "save_path=" . ini_get("session.save_path") . "\n"; echo "session_id=" . session_id() . "\n"; $_SESSION['libname'] = "PhpRedis"; -----
これでやっと保存してくれた
testsession.phpにブラウザからアクセス save_handler=redis save_path=tcp://localhost:6379 session_id=7sl1gvtocgmn141ustk17i5gcm
redi-cliから確認してみる
redis-cli 127.0.0.1:6379> keys * 1) "PHPREDIS_SESSION:7sl1gvtocgmn141ustk17i5gcm" 127.0.0.1:6379> get PHPREDIS_SESSION:7sl1gvtocgmn141ustk17i5gcm "a:1:{s:7:\"libname\";s:8:\"PhpRedis\";}"
コメント
コメントを投稿