##初めに
Laravelの日本語ドキュメントをもとにDockerのLaravel環境にRedisを導入しようとしたところ、細かいところで追加の操作が必要だったので導入方法を備忘録として残しておきます。
環境
- Docker
v20.10
- Laravel
v6.20
- Redis
v6.2
- phpredis
v5.3
ディレクトリ構造
├── laravel
├── infra
│ └─ php
│ └─ Dockerfile
└── docker-compose.yml
docker-compose.ymlにredisコンテナを定義する
docker-compose.yml
version: "3.8"
volumes:
php-fpm-socket:
services:
app:
build: ./infra/php
volumes:
- php-fpm-socket:/var/run/php-fpm
- ./laravel:/work/laravel
redis:
image: "redis:latest"
ports:
- "16379:6379"
appコンテナでphpredisを有効化する
phpredisのパッケージをpecl経由でインストールしappコンテナで有効化します。
Dockerfile
FROM php:7.4-fpm-buster
RUN apt update && \
apt -y install && \
pecl install redis && \
docker-php-ext-enable redis
WORKDIR /work/laravel
ここで気を付けなければならない点は、pecl install redis
をした時点ではphpredisが有効になっていません。
この状態でlaravelのRedisファサードを使用しても
PHP Error: Class 'Redis' not found in
/path/to/laravel/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php on line 75
のように\Redis
クラスが見つからないというエラーが発生します。
なので、pecl install redis
を実行した後、忘れずにdocker-php-ext-enable redis
を実行しましょう。
.envのREDIS_HOSTを設定する
.envのREDIS_HOSTにRedisコンテナ名を指定します。
.env
APP_NAME=Laravel
...
REDIS_HOST=redis
app.phpのエイリアスからRedisを削除
app.php
<?php
return [
//
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
//
'Redis' => Illuminate\Support\Facades\Redis::class, // これを削除かコメントアウトする
//
],
];
laravelからRedisにデータを追加できるか確認
まずはappコンテナからRedisにデータを追加します。
$ docker-compose exec app bash
:/work/laravel php artisan tinker
>>> use Illuminate\\Support\\Facades\\Redis;
>>> Redis::set("str", "test");
redisコンテナのRedisに上記のデータが保存されていたら設定完了です。
$ docker-compose exec redis bash
:/data redis-cli
> keys *
1) "laravel_database_str" # デフォルトで"laravel_database"がプレフィックスとして付加される
> get laravel_database_str
"test"