💽
Docker コンテナを使った Redis による Laravel のSession 管理
PHPコンテナの設定は省略します。
Redisへ接続するに当たって、特別な設定はありません。
※ PhpRedis を 使う場合
PHP拡張機能が必要なので、PHP側のDockerfileでインストールしておくなど準備しておきましょう
今回の記事では predis
での接続方法とします。
環境
- Laravel 10
- PHP 8.2
- Redis 7.2
Redis側 の 設定
Dockerfile
FROM redis:7.2
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
redis.conf (Dockerfile と 同ディレクトリに配置)
bind 0.0.0.0 # Dockerコンテナ内での接続を許可
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
locale-collate ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-diskless-sync-max-replicas 0
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
requirepass foobared # 任意のパスワード
maxmemory 100M
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly no
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
list-compress-depth 0
set-max-intset-entries 512
set-max-listpack-entries 128
set-max-listpack-value 64
zset-max-listpack-entries 128
zset-max-listpack-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
Laravel側の設定
predis の インストール
composer require predis/predis
.env
REDIS_HOST=redis
REDIS_PASSWORD=foobared # redis.conf で設定したパスワード
REDIS_PORT=6379
REDIS_CLIENT=predis
config/database.php
初期値から変更なしです。
参考までに 'redis' 部分のみ記載しておきます。
<?php
declare(strict_types=1);
use Illuminate\Support\Str;
return [
// ... 省略
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
];
あとはコンテナを立ち上げて、Laravelの画面が正常表示されれば設定完了です。
まとめ
躓いた点は、redis.conf
の設定値です。
bind 0.0.0.0
requirepass foobared
サンプルのconfファイルから上記部分を変更しました。
protected-mode
を no
にすれば、パスワード接続は不要にできそうです。
接続有無と関係ありませんが、maxmemory 100M
も追記しました。
Discussion