🤖

DockerでRedisのコンテナを作成しLaravelと接続する

2021/07/26に公開

各バージョン

PHP 7.4
Laravel 8.47.0
macOS Catalina
Docker 20.10.7

Redisのコンテナの設定

docker-composeファイルに以下の内容を追加します。

docker-compose.yml
version: '3'

services:
  redis:
    image: redis:latest
    container_name: redis
    command: redis-server --appendonly yes
    volumes:
      - redis-volume:/data
    ports:
      - 6379:6379
volumes:
  redis-volume:

動作確認
コンテナを立ち上げ、redisコンテナの中に入ります。

$ docker-compose up -d
$ docker exec -it redis /bin/bash

$ redis-server --version
Redis server v=xxx
#最新のバージョンが表示されるはずです。

$ redis-cli
127.0.0.1:6379> ping
PONG
#PONGが返ってくるようなら正常に動いています。

Redisクライアントの設定

LaravelでRedisを使用するには、
PhpRedisPredis のどちらかのRedisクライアントをインストールする必要があります。
公式サイトでは パフォーマンスが高い PhpRedis を使用することを推奨されています。

PhpRedis を使用する場合
PHPのDockerfileに以下を追記します。

Dockerfile
FROM php:7.4-fpm
...
RUN git clone https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis && \
  docker-php-ext-install redis

redisのclientの初期設定でphpredisとなっているので特に変更は必要ありません。

database.php
'redis' => [
  'client' => env('REDIS_CLIENT', 'phpredis')
]

Predis を使用する場合
composerで predis をインストールします。

$ composer require predis/predis

redisのclient設定を phpredisからpredisに変更します。
もちろん .envにてREDIS_CLIENTを追記しても設定可能です。

database.php
'redis' => [
  - 'client' => env('REDIS_CLIENT', 'phpredis')
  + 'client' => env('REDIS_CLIENT', 'predis')
]

.env に以下の内容に変更します。
今回はSESSION_DRIVER を redisに変更します。

.env
SESSION_DRIVER=redis

REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

動作確認

ブラウザからLaravelの認証機能でログインしてみてください。
redis-cliで確認すると、Redisにセッション情報が入っていることがわかります。

127.0.0.1:6379> keys *
1) "laravel_database_laravel_cache:xxxxxxxxxxxxxxxxxxxx"

セッション情報を削除後し、ブラウザを再読み込みするとログイン画面に戻されるはずです。

127.0.0.1:6379> del "laravel_database_laravel_cache:xxxxxxxxxxxxxxxxxxxx"
(integer) 1
127.0.0.1:6379> keys *
(empty array)

Discussion