LaravelでRedisを使うようにSessionの設定をする
web-application-framework laravel
LaravelでSessionをRedisに保存するように設定を行います。
Dockerを使用して環境を構築しています。
環境
- Ubuntu 22.04.3 LTS (WSLで起動している)
- Docker Engine 26.0.0
- Amazon Linux 2023(DockerコンテナのOS)
- PHP 8.2.15 (fpm-fcgi)
- NGINX 1.24.0
- Laravel 11
前提
- Laravelプロジェクトを動かすDockerコンテナがある。(Docker Compose使用)
LaravelプロジェクトをNGINXで動かす方法についてはこちらをご覧ください。
設定の流れ
1. RedisのDockerコンテナを作成する
RedisのDockerコンテナを作成します。
docker-compose.yml
にRedisコンテナの設定を追加します。
docker-compose.yml
:
services:
~略~
# Redisコンテナの設定を追加
redis: # サービス名
image: redis:7.0
今回は今後AWSにデプロイすることを考えて、ElastiCacheがサポートしているRedisのバージョンからバージョンを選び、7.0
を指定します。
2. LaravelプロジェクトのDockerコンテナの設定を変更する
LaravelプロジェクトのDockerコンテナの設定を変更します。
今回はRedisの操作にPhpRedisを使用するので、Dockerイメージのビルド時にPhpRedisをインストールする処理を追加します。
まず、PHPの起動時にPhpRedisをロードするために、PHPの追加の設定ファイル 50-redis.ini
を作成します。
Dockerfile
と同じディレクトリに作成しています。
50-redis.ini
:
extension = redis.so
次に、Dockerfile
にPhpRedisをインストールする処理を追加します。
PhpRedisのバージョンはこの時点で最新のものを指定しています。
Dockerfile
:
FROM amazonlinux:2023
~省略~
# PhpRedisインストール
RUN yum -y install php-pear-1:1.10.13 php8.2-devel
RUN pecl install redis-6.0.2
COPY 50-redis.ini /etc/php.d/50-redis.ini # PHPの追加の設定ファイルをコピー
3. Laravelの設定を変更する
SessionをRedisに保存するようにLaravelの設定を変更します。
.env
のSessionに関する環境変数を以下のように変更します。
.env
:
SESSION_DRIVER=redis # ドライバーをredisに変更
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
SESSION_CONNECTION=default # config/database.php を見て使用するRedisサーバーを指定
4. 設定の確認をする
SessionがRedisに保存されるか確認します。
Dockerコンテナを起動します。
docker-compose.yml
のあるディレクトリに移動し、以下を実行します。
$ docker compose up -d --build
routes/web.php
などに、/
にアクセスしたらSessionに値をセットする処理を追加します。
web.php
:
Route::get('/', function (Request $request) {
$request->session()->put('test_key', 'test_value');
});
ブラウザなどで /
にアクセスします。
RedisのDockerコンテナに接続します。
<サービス名>
はRedisコンテナのサービス名です。
$ docker compose exec <サービス名> bash
コンテナ内でRedisに接続します。
# redis-cli
Redisに保存されているキー一覧を表示します。
> keys *
1) "laravel_database_6NDAsrurvjXJA7ovtIWVgqFpqAMHYlqy9JIP1DeW"
Sessionのキーの値を確認します。
> get laravel_database_6NDAsrurvjXJA7ovtIWVgqFpqAMHYlqy9JIP1DeW
"s:212:\"a:4:{s:6:\"_token\";s:40:\"W5bHdoKGrTO3r9xdrnqU4ZeK5muvsDyajjdpve1J\";s:8:\"test_key\";s:10:\"test_value\";s:9:\"_previous\";a:1:{s:3:\"url\";s:21:\"http://localhost:8080\";}s:6:\"_flash\";a:2:{s:3:\"old\";a:0:{}s:3:\"new\";a:0:{}}}\";"
結果に s:8:\"test_key\";s:10:\"test_value\";
とあるように、Sessionの値をRedisに保存することができました。