利用目的
キャッシュ機能にRedisを利用したい
環境
vagrant + Amazonlinux
PHP7 + cakePHP3
docker
redis
前提
vagrant、PHPの環境は既に利用できる設定となっている前提
各ツールに関する説明は各自で調べてください。
利用ツール
docker
docker-compose
redis
phpredis
手順
①dockerのインストール
yumパッケージのアップデート
sudo yum update -y
dockerのインストール
sudo yum install -y docker
dockerのインストール確認
sudo docker --version
dockerのサービス開始
sudo service docker start
現在のグループと所属ユーザを確認
getent group
指定ユーザをdockergroupに所属させる
sudo usermod -a -G docker [指定ユーザ]
指定ユーザがdockerグループに所属したことを確認
getent group
一度ログアウトすることで、グループを再読み込みする
exit
②docker-composeのインストール
一度スーパーユーザになる
sudo -i
スーパーユーザでdocker-composeをインストール
curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
docker-composeの実行権を確認
ls -l /usr/local/bin/
docker-composeコマンド に実行権付与
chmod +x /usr/local/bin/docker-compose
docker-composeの実行権付与を確認
ls -l /usr/local/bin/
スーパーユーザを抜ける
exit
docker-composeのインストール確認
docker-compose --version
③Redisのdockerコンテナを作成
※置く場所は任意で決めてください。
今回はプロジェクト内に作成
└── プロジェクトフォルダ
└── docker
├── docker-compose.yml ※1
└── redis
└── data
※1 docker-compose.ymlは、Redisインストールのために必要なため、
自分で作成してください。
version: '3'
services:
redis:
image: redis:latest
volumes:
- ./redis/data:/data
command: redis-server --appendonly yes
ports: ["6379:6379"]
docker-compose.ymlが置いてあるフォルダまで移動
cd プロジェクトフォルダ/docker
redisをインストール (dockerは先に起動した状態であること)
docker-compose up -d
※-dはバックグラウンド実行
redisコンテナが生成されていることを確認
docker ps -a
③phpredisのインストール
※本当はyumでインストールしたかったのですが、うまくいかなかったので
makeして直接インストールを実行
インストール先に移動
(各プロジェクトに沿って決めてください。)
cd /usr/local/src/
phpredisをGitから取得
sudo git clone git://github.com/nicolasff/phpredis.git
インストール作業
cd phpredis
sudo phpize
sudo ./configure
sudo make test
sudo make install test
php.iniの設定変更
PHPの設定確認
php -i | grep -e redis -e Redis
php.iniの場所を検索
php -i | grep php.ini
(上記のphp.iniパスコピー)
php.iniの編集
sudo vi [上記で見つけたパス]/php.ini
最終行に以下を追加
extension=redis.so
php設定反映確認
php -i | grep -e redis -e Redis
server,phpfpmの再起動
これは各環境に沿って実行してください。
私の環境では、nginxを利用していたので、下記の命令となります。
sudo service nginx stop
sudo service nginx start
sudo service php-fpm stop
sudo service php-fpm start
④dockerコンテナ内のredisへの接続確認
redisの接続ポートを確認
docker ps -a
redis-cliの場所を確認
sudo find /* -name redis-cli
redisへの接続確認
sudo [上記find命令のredis-cliのパス] -p [docker ps -a で確認したポート番号]
接続確認が取れたら接続を解除
exit
⑤プロジェクト内のapp.configを修正
Cacheのデフォルト設定をcakePHPからRedisに書き換える
'default' => [
'prefix' => '' ,
'engine' => 'Redis',
'server' => '127.0.0.1',//ローカルホスト
'port' => 6379,
],
⑥疎通確認
CakePHPを通して、Redisにアクセスできるかを確認する
任意のPHPファイルに以下のソースを記載して確認
try {
Cache::write("2000", 1515);
$redis_read = Cache::read("2000");
//読みだしたキャッシュが有効か
if($redis_read === false){
echo "無効なキャッシュです";
}else{
var_dump($redis_read);
}
} catch (Exception $exception) {
$this->log(print_r($exception),LOG_ERR);
}
※画面上に1515が表示されれば疎通確認はOKです。
備忘録
動かない時に確認すること
①dockerは動いてる?
sudo service docker start
sudo service docker stop
②redisのdockerContainerは動いている?
docker ps -a
starusのところが「Up」なら動いている。「Exited」なら止まっている。
③redisのdockerContainerを起動させるとき、docker-composeを使って起動した?
docker [containerID] startで開始すると稀におかしなことになることがあった。
④PHPにredisの設定が反映されてる?
php -m | grep -e redis -e Redis
Redisの設定っぽいのが出てくればOK
そんなん知らんよ的なメッセージが出たら反映されていない。
反映されていない場合確認すること
①Phpredisのインストールは成功しているか確認
sudo find / -name redis.so
redis.soが出てくれば、大体成功している。
②php.iniにredis設定の書き込みをしたか確認
上のことを解決すれば大体は大丈夫なはず・・・。