Ubuntu16.04にRedisをインストールして構成する方法
序章
Redisは、柔軟性、パフォーマンス、幅広い言語サポートで知られるメモリ内のKey-Valueストアです。 このガイドでは、Ubuntu16.04サーバーにRedisをインストールして構成する方法を示します。
前提条件
このガイドを完了するには、Ubuntu16.04サーバーにアクセスする必要があります。 このプロセスに必要な管理機能を実行するには、sudo
権限を持つroot以外のユーザーが必要です。 Ubuntu 16.04初期サーバーセットアップガイドに従って、これらの権限でアカウントをセットアップする方法を学ぶことができます。
開始する準備ができたら、sudo
ユーザーでUbuntu16.04サーバーにログインし、以下を続行します。
ビルドとテストの依存関係をインストールする
最新バージョンのRedisを入手するために、ソフトウェアをソースからコンパイルしてインストールします。 コードをダウンロードする前に、ソフトウェアをコンパイルできるように、ビルドの依存関係を満たす必要があります。
これを行うには、Ubuntuリポジトリからbuild-essential
メタパッケージをインストールします。 また、tcl
パッケージをダウンロードします。これを使用して、バイナリをテストできます。
ローカルのapt
パッケージキャッシュを更新し、次のように入力して依存関係をインストールできます。
- sudo apt-get update
- sudo apt-get install build-essential tcl
Redisをダウンロード、コンパイル、およびインストールする
次に、Redisの構築を開始できます。
ソースコードをダウンロードして抽出する
コンパイルするソースコードを長期間保持する必要がないため(いつでも再ダウンロードできます)、/tmp
ディレクトリにビルドします。 今すぐそこに移動しましょう:
- cd /tmp
次に、Redisの最新の安定バージョンをダウンロードします。 これは、安定したダウンロードURLでいつでも利用できます。
- curl -O http://download.redis.io/redis-stable.tar.gz
次のように入力して、tarballを解凍します。
- tar xzvf redis-stable.tar.gz
抽出したばかりのRedisソースディレクトリ構造に移動します。
- cd redis-stable
Redisをビルドしてインストールする
これで、次のように入力してRedisバイナリをコンパイルできます。
- make
バイナリがコンパイルされたら、テストスイートを実行して、すべてが正しくビルドされていることを確認します。 これを行うには、次のように入力します。
- make test
これは通常、実行に数分かかります。 完了したら、次のように入力して、バイナリをシステムにインストールできます。
- sudo make install
Redisを構成する
これでRedisがインストールされたので、構成を開始できます。
まず、構成ディレクトリを作成する必要があります。 次のように入力して作成できる従来の/etc/redis
ディレクトリを使用します。
- sudo mkdir /etc/redis
次に、Redisソースアーカイブに含まれているサンプルのRedis構成ファイルをコピーします。
- sudo cp /tmp/redis-stable/redis.conf /etc/redis
次に、ファイルを開いて、構成内のいくつかの項目を調整できます。
- sudo nano /etc/redis/redis.conf
ファイルで、supervised
ディレクティブを見つけます。 現在、これはno
に設定されています。 systemd initシステムを使用するオペレーティングシステムを実行しているため、これをsystemd
に変更できます。
. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .
次に、dir
ディレクトリを見つけます。 このオプションは、Redisが永続データをダンプするために使用するディレクトリを指定します。 Redisが書き込み権限を持ち、通常のユーザーが表示できない場所を選択する必要があります。
これには/var/lib/redis
ディレクトリを使用します。これは、すぐに作成します。
. . .
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis
. . .
終了したら、ファイルを保存して閉じます。
Redissystemdユニットファイルを作成する
次に、initシステムがRedisプロセスを管理できるように、systemdユニットファイルを作成できます。
/etc/systemd/system/redis.service
ファイルを作成して開き、開始します。
- sudo nano /etc/systemd/system/redis.service
内部では、このサービスを開始する前に、説明を追加し、ネットワークが利用可能であるという要件を定義することで、[Unit]
セクションを開始できます。
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
セクションでは、サービスの動作を指定する必要があります。 セキュリティ上の理由から、サービスをroot
として実行しないでください。 簡単にするためにredis
と呼ぶ専用のユーザーとグループを使用する必要があります。 これらはすぐに作成します。
サービスを開始するには、構成を指定してredis-server
バイナリを呼び出す必要があります。 これを停止するには、redis-cli
バイナリで実行できるRedisshutdown
コマンドを使用できます。 また、可能な場合はRedisを障害から回復させたいので、Restart
ディレクティブを「always」に設定します。
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
最後に、[Install]
セクションで、有効になっている場合(起動時に開始するように構成されている場合)にサービスが接続するsystemdターゲットを定義できます。
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
終了したら、ファイルを保存して閉じます。
Redisユーザー、グループ、ディレクトリを作成する
ここで、前の2つのファイルで参照したユーザー、グループ、およびディレクトリを作成する必要があります。
redis
ユーザーとグループを作成することから始めます。 これは、次のように入力することにより、単一のコマンドで実行できます。
- sudo adduser --system --group --no-create-home redis
これで、次のように入力して/var/lib/redis
ディレクトリを作成できます。
- sudo mkdir /var/lib/redis
このディレクトリに対するredis
ユーザーとグループの所有権を与える必要があります。
- sudo chown redis:redis /var/lib/redis
通常のユーザーがこの場所にアクセスできないように、アクセス許可を調整します。
- sudo chmod 770 /var/lib/redis
Redisの起動とテスト
これで、Redisサーバーを起動する準備が整いました。
Redisサービスを開始します
次のように入力して、systemdサービスを起動します。
- sudo systemctl start redis
次のコマンドを実行して、サービスにエラーがないことを確認します。
- sudo systemctl status redis
次のようなものが表示されます。
Output● redis.service - Redis Server
Loaded: loaded (/etc/systemd/system/redis.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2016-05-11 14:38:08 EDT; 1min 43s ago
Process: 3115 ExecStop=/usr/local/bin/redis-cli shutdown (code=exited, status=0/SUCCESS)
Main PID: 3124 (redis-server)
Tasks: 3 (limit: 512)
Memory: 864.0K
CPU: 179ms
CGroup: /system.slice/redis.service
└─3124 /usr/local/bin/redis-server 127.0.0.1:6379
. . .
Redisインスタンスの機能をテストする
サービスが正しく機能していることをテストするには、コマンドラインクライアントを使用してRedisサーバーに接続します。
- redis-cli
次のプロンプトで、次のように入力して接続をテストします。
- ping
君は見るべきだ:
OutputPONG
次のように入力して、キーを設定できることを確認します。
- set test "It's working!"
OutputOK
次に、次のように入力して値を取得します。
- get test
保存した値を取得できるはずです。
Output"It's working!"
Redisプロンプトを終了して、シェルに戻ります。
- exit
最後のテストとして、Redisインスタンスを再起動しましょう。
- sudo systemctl restart redis
ここで、クライアントに再度接続し、テスト値がまだ利用可能であることを確認します。
- redis-cli
- get test
キーの値は引き続きアクセス可能である必要があります。
Output"It's working!"
終了したら、シェルに戻ります。
- exit
起動時にRedisを起動できるようにする
すべてのテストが機能し、サーバーの起動時にRedisを自動的に起動したい場合は、systemdサービスを有効にできます。
これを行うには、次のように入力します。
- sudo systemctl enable redis
OutputCreated symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.
結論
これで、Ubuntu16.04サーバーにRedisインスタンスがインストールおよび構成されているはずです。 Redisインストールを保護する方法の詳細については、 Ubuntu 14.04 でRedisインストールを保護する方法(手順3以降)を参照してください。 Ubuntu 14.04を念頭に置いて作成されていますが、ほとんどの場合、16.04でも機能するはずです。