さくらの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\";}"

コメント

このブログの人気の投稿

ネットギア WiFi6 無線lan 法人向け メッシュ アクセスポイント WAX610の初期設定

Raspberry Pi 4 でデュアルディスプレイの拡張・複製

【更新】福祉施設向け事務用PC選定