介绍
Redis 是一种内存键值存储,以其灵活性、性能和广泛的语言支持而闻名。 在本指南中,我们将演示如何在 Ubuntu 16.04 服务器上安装和配置 Redis。
先决条件
要完成本指南,您需要访问 Ubuntu 16.04 服务器。 您将需要具有 sudo
权限的非 root 用户来执行此过程所需的管理功能。 您可以按照我们的 Ubuntu 16.04 初始服务器设置指南 了解如何设置具有这些权限的帐户。
当您准备好开始时,使用您的 sudo
用户登录到您的 Ubuntu 16.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
:
/etc/redis/redis.conf
. . . # 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
目录,稍后我们将创建该目录:
/etc/redis/redis.conf
. . . # 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 . . .
完成后保存并关闭文件。
创建 Redis systemd 单元文件
接下来,我们可以创建一个 systemd 单元文件,以便 init 系统可以管理 Redis 进程。
创建并打开 /etc/systemd/system/redis.service
文件开始:
sudo nano /etc/systemd/system/redis.service
在内部,我们可以通过添加描述并定义在启动此服务之前网络可用的要求来开始 [Unit]
部分:
/etc/systemd/system/redis.service
[Unit] Description=Redis In-Memory Data Store After=network.target
在 [Service]
部分,我们需要指定服务的行为。 出于安全考虑,我们不应该将我们的服务作为 root
运行。 我们应该使用专用的用户和组,为简单起见,我们将其称为 redis
。 我们将立即创建这些。
要启动服务,我们只需要调用指向我们配置的 redis-server
二进制文件。 要停止它,我们可以使用 Redis shutdown
命令,该命令可以使用 redis-cli
二进制文件执行。 此外,由于我们希望 Redis 在可能的情况下从故障中恢复,我们将 Restart
指令设置为“always”:
/etc/systemd/system/redis.service
[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 目标(配置为在启动时启动):
/etc/systemd/system/redis.service
[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 用户、组和目录
现在,我们只需要创建我们在前两个文件中引用的用户、组和目录。
首先创建 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 提示符以返回 shell:
exit
作为最后的测试,让我们重新启动 Redis 实例:
sudo systemctl restart redis
现在,再次与客户端连接并确认您的测试值仍然可用:
redis-cli
get test
您的密钥值应该仍然可以访问:
Output"It's working!"
完成后再次返回 shell:
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.
结论
您现在应该在 Ubuntu 16.04 服务器上安装并配置了一个 Redis 实例。 要了解有关如何保护您的 Redis 安装的更多信息,请查看我们的 如何在 Ubuntu 14.04 上保护您的 Redis 安装(从第 3 步开始)。 尽管它是为 Ubuntu 14.04 编写的,但它也应该主要适用于 16.04。