「Redisをレンタルサーバー上で使う方法があるか知りたい。あるならぜひ試したい。」
エンジニアやサーバーいじりが好きな方なら、思ったことがあるのではないでしょうか?レンタルサーバー上でRedisを使えただけで面白いし、お得感があります。
そこで本記事では、WordPress向けのいわゆるレンタルサーバー上に
という2項目に分けて、Redisをレンタルサーバー上で使っていく方法を解説します。
実際に本サイトでは、WordPressのオブジェクトキャッシュ基盤として、レンタルサーバー上で稼働するRedisを使用しています。失敗した経験もあるので、かなり再現性は高いはずです。
Redisをただのレンタルサーバーにインストールする方法
Redisをインストールできるレンタルサーバーには、いくつか条件があります。
SSHで接続できることに加え、有料プランを契約していることも必須となります。僕の経験上、無料サーバーでRedisなどのサーバーを起動しても、すぐにKillされてしまい、使い物になりません。
その点でいうと「vCPU4コア・メモリ8GB」というようにリソースが保証されているレンタルサーバーが一番最適。本サイトでは、カラフルボックス を使っています。
では、さっそくRedisをインストールしていきましょう。
ステップ1:Redisのソースコードをダウンロード・展開
まずは、Redisのソースコードをダウンロードします。Redis公式のダウンロードページからダウンロードリンクをコピーし、SSH上でwgetすると楽です。
ここでは執筆時点の安定版、Redis7.0.2を使いました。ダウンロードして、展開しましょう。
$ wget https://github.com/redis/redis/archive/7.0.2.tar.gz
$ tar xf 7.0.2.tar.gz
以下、ディレクトリ名などバージョン固有の部分は、みなさんの状況にあわせて読み替えてください。
ステップ2:Redisをコンパイル・インストール
展開できたら、展開されたRedisのディレクトリ「redis-7.0.2」に移動します。まずはmakeでコンパイルします。
レンタルサーバーだと物理コアが80もあったりするので、瞬間的にコンパイルを終わらすことができます。といってもリソース制限を避けるため、せいぜい8コア程度でコンパイルするのが安全です。
$ make -j8
コンパイルし終えたら、root権限無しでインストールできるようにインストール先を変更して、makeします。
僕はインストール先を「$HOME/local」にしています。お好みで「$HOME/.local」や「$HOME」などに変更してください。
$ PREFIX=$HOME/local make install
うまくインストールできると、$HOME/local/bin以下にredis関連のバイナリが設置されます。
ステップ3:Redisを起動してみる→バックグラウンドで起動
インストールができたので、Redisを起動してみます。
$ redis-server
起動に成功すると、次のような画面になります。
SSHをもう1つ開いたりして、redis-cliで接続できるか確かめてみても良いです。Redisの停止はCtrl+Cでできます。(当たり前)
もし~/local/bin以下にパスが通っていないと、redis-serverでは起動できません。~/local/bin/redis-serverと指定するか、PATHを正しく設定すれば良し。
$ export PATH=$HOME/local/bin:$PATH
Redisの起動が確認できたら、今度はRedisをバックグラウンドで起動します。SSHを閉じてもRedisが動きつづけないと意味がないですよね。そこで、nohupを使います。
$ nohup redis-server &
これでバックグランドで起動できたはずです。(もしnohupがない場合は、screenやtmuxなどを調べてみてください。)起動した後、redis-cliで接続できれば成功です。
バックグラウンドで起動したRedisを停止するには、nohupで起動した後に表示されるPIDのプロセスをKillすればOK。詳しく解説しませんが、以下のスクショを参考にしてみてください。
Redisをレンタルサーバー上で長期間安定させて使う方法
Redisのインストールはできましたが、この状態だとレンタルサーバー上で長期間安定させて使うことは難しい。2年前にも僕はRedisをレンタルサーバーにインストールして使っていたのですが、
ふと気づいたらRedisのプロセスが死んでいる!(Redisが使えなくなっている)
なんてことになっていました。そうならないために、僕が講じている対策は次の2つです。
Redisのプロセスが死んだ場合に自動で復帰させる
Redisが気づいたら死んでいるという問題の解決はかんたんです。Redisが生きているかどうか監視して、死んでいた場合に自動でRedisを起動すれば良いのです。
僕は、次のようなスクリプトを作り、Cronで一分おきに実行しています。
if [ ! -e "/home/user/tmp/redis.pid" ]; then
nohup /home/user/local/bin/redis-server /home/user/local/etc/redis.conf &
fi
Redisが死んでしまう原因が、リソース制限による強制終了でない限り、上のスクリプトで対応できるはず。
Redisとの通信はUNIXドメインソケットを使う
Redisが死なないための対策、そして、Redisのセキュリティ対策として、Redisとの通信にUNIXドメインソケットを使う、という方法があります。
Redisへの通信方法は、
- TCP/IP(ホスト名とポート番号を指定するタイプ)
- UNIXドメインソケット(特殊なファイルを経由して通信)
の2種類から選べます。デフォルトはTCP/IPですが、TCP/IPには、以下のようなデメリットがあります。
一方、UNIXドメインソケットなら、他の人に迷惑がかからないだけでなく、基本的に他の人がRedisに接続できない+高速というメリットがあります。
僕はTCP/IPを無効にして、UNIXドメインソケットの設定でRedisを運用しています。必要な設定は、redis.confにおいて
- portを0にする
- unixsocketで/home/user/tmp/redis.sockなどとソケットファイルを指定
- unixsocketpermを700にする(セキュリティ対策)
です。これらの設定をした場合、起動時には、設定ファイルを指定して起動する必要があります。
$ nohup redis-server /home/user/local/etc/redis.conf &
カラフルボックスでRedisを運用した結果
初めにも書きましたが、本サイトではカラフルボックス を使っています。そして、そのカラフルボックス上にRedisをインストールし、WordPressのオブジェクトキャッシュ基盤として使っています。
レンタルサーバーで半ば強引にRedisを使うのは、実際どうなのか、共有したい。
全く問題なくRedisが使える
今のところ、全く問題は起きていません。RedisはKillされることなくずっと起動したままですし、WordPressのキャッシュプラグインLiteSpeed CacheからもRedisに接続できています。
複数のWebアプリからRedisを使ってもOK
僕は現在カラフルボックス上にインストールしたRedisを3つのWebアプリから使っています。しかし、これでも全く問題なし。
メモリ使用量もアカウント全体で1GB以内に収まっているので、リソース的にも余裕です。かなり気に入ったので、Memcachedとかも動かす予定です。
まとめ:Redisでレンタルサーバーを活用しませんか?
レンタルサーバーにRedisをインストールして運用するのは、思っているよりもずっとかんたんです。レンタルサーバーを契約していれば、追加料金がいらないのでお財布に優しい。
WordPressのオブジェクトキャッシュにも使えるし、他のアプリでも使えて便利です。たとえば、NextCloudにRedisを設定すれば、快適なオンラインストレージができあがります。NextCloudは以下の記事で紹介しました。
最近のレンタルサーバーは非常にスペックが高くなった割に、あまり使いこなせていない人が多いと思います。ぜひRedisをインストールして使い倒してみてほしい。
コメント