5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Redis】DockerのLaravel環境にRedisとphpredisを導入する

Posted at

##初めに

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"
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?