如何在Ubuntu 18.04上从源代码安装Redis

Redis是一款内存键值存储,以其灵活性,性能和广泛的语言支持而闻名。它通常用作数据库,缓存和消息代理,并支持广泛的数据结构。本教程演示了如何在Ubuntu 18.04服务器上从源代码安装和配置Redis。

本教程的以前版本由Justin Ellingwood编写

介绍

Redis是一款内存键值存储,以其灵活性,性能和广泛的语言支持而闻名。 它通常用作数据库,缓存和消息代理,并支持广泛的数据结构。

本教程演示了如何在Ubuntu 18.04服务器上从源代码安装和配置Redis。 请注意,通过官方的Ubuntu软件仓库下载并安装Redis,可以通过更少的步骤安装Redis。 要使用此方法安装Redis,请参阅我们的关于如何在Ubuntu 18.04上安装和保护Redis的指南。

先决条件

要完成本指南,您需要访问通过遵循此初始服务器设置指南设置的Ubuntu 18.04服务器,包括具有sudo权限和防火墙的非root用户。

准备好开始时,请使用sudo用户登录到Ubuntu 18.04服务器,然后继续。

第1步 - 安装构建和测试依赖关系

为了获得最新版本的Redis,我们将从源代码编译和安装该软件。 但是,在下载源代码之前,必须满足构建依赖关系,以便编译该软件。

要做到这一点,请从Ubuntu存储库安装build-essential元数据包。 此外,请下载可用于测试二进制文件的tcl软件包。

通过输入以下命令更新您的本地apt包缓存并安装依赖关系:

sudo apt update
sudo apt install build-essential tcl

因此,所有的构建和测试依赖项都安装在您的服务器上,您可以开始安装Redis本身的过程。

第2步 - 下载,编译和安装Redis

安装依赖关系后,您可以通过下载,编译和构建源代码来安装Redis。 由于您不需要长期保留Redis源代码(您可以随时重新下载它),请将源代码下载到/tmp目录。

从导航到此目录开始:

cd /tmp

接下来,使用curl下载最新的Redis稳定版本。 最新版本可以在稳定的下载URL中找到

curl -O http://download.redis.io/redis-stable.tar.gz

输入以下内容解压缩tarball:

tar xzvf redis-stable.tar.gz

然后进入刚刚提取的Redis源目录结构:

cd redis-stable

输入以下内容编译Redis二进制文件:

make

二进制文件编译完成后,运行测试套件以确保所有内容都正确构建:

make test

这通常需要几分钟才能完成。 测试完成后,输入以下命令将二进制文件安装到系统上:

sudo make install

这就是安装Redis,现在你已经准备好开始配置它了。 为此,您需要创建一个配置目录。 Redis配置目录通常位于/etc/目录中,您可以通过键入以下命令在其中创建它:

sudo mkdir /etc/redis

接下来,复制Redis源归档附带的示例Redis配置文件:

sudo cp /tmp/redis-stable/redis.conf /etc/redis

用您喜欢的文本编辑器打开文件,对配置进行一些更改:

sudo nano /etc/redis/redis.conf

在文件中,找到supervised指令。 该指令允许您声明一个init系统来管理Redis作为服务,从而为您提供对其操作的更多控制。 supervised指令默认设置为no 由于您正在运行使用systemd init系统的Ubuntu,请将其更改为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目录/var/lib/redis这件事; 您将在稍后的第4步中创建此目录并调整其权限:

/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配置文件进行的所有更改,但仍然需要执行几个步骤 - 例如将Redis配置为作为服务运行并创建其专用用户和组 - 然后才能开始使用它。

第3步 - 创建Redis系统单元文件

为了更好地控制Redis的管理方式,您可以创建一个systemd单元文件,使其可以用作systemd服务。 这也有利于让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]部分。 在那里,定义服务应该附加到的系统目标(如果它已启用)(意思是它被配置为在启动时启动):

/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 systemd单元文件已全部设置。 但是,在它可以投入使用之前,您必须创建[Service]部分中引用的专用用户和组,并授予他们所需的权限。

第4步 - 创建Redis用户,组和目录

在开始和测试Redis之前,您需要做的最后一件事是创建前两个文件中引用的用户,组和目录。

首先创建redis用户和组。 您可以通过键入以下命令在单个命令中执行此操作

sudo adduser --system --group --no-create-home redis

接下来,通过键入以下命令创建/var/lib/redis目录(在第2步中创建的redis.conf文件中引用该目录):

sudo mkdir /var/lib/redis

通过此目录提供redis用户和组的所有权:

sudo chown redis:redis /var/lib/redis

最后,调整权限,以便普通用户无法访问此位置:

sudo chmod 770 /var/lib/redis

你已经把所有Redis需要的组件运行到位。 您现在已准备好启动Redis服务并测试其功能。

第5步 - 启动和测试Redis

输入以下命令启动systemd服务:

sudo systemctl start redis

运行以下命令检查服务是否存在错误:

sudo systemctl status redis

这将产生类似于以下内容的输出:

● redis.service - Redis In-Memory Data Store
   Loaded: loaded (/etc/systemd/system/redis.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-05-29 17:49:11 UTC; 4s ago
 Main PID: 12720 (redis-server)
    Tasks: 4 (limit: 4704)
   CGroup: /system.slice/redis.service
           └─12720 /usr/local/bin/redis-server 127.0.0.1:6379
. . .

要测试您的服务是否正常运行,请使用命令行客户端连接到Redis服务器:

redis-cli

在随后的提示中,通过键入以下内容来测试连接:

ping

这将返回:

PONG

接下来,检查您是否可以通过输入以下内容来设置密钥

set test "It's working!"
OK

输入以下内容以检索test值:

get test

您应该能够检索您存储的值:

"It's working!"

确认您可以获取该值后,退出Redis提示符以返回到shell:

exit

作为最终测试,我们将检查Redis是否能够在数据停止或重新启动后保留数据。 为此,请首先重新启动Redis实例:

sudo systemctl restart redis

然后再次与客户端连接并确认您的测试值仍然可用:

redis-cli
get test

您的密钥的价值仍应可访问:

"It's working!"

完成后再退出到外壳中:

exit

假设所有这些测试都起作用,并且您希望在服务器启动时自动启动Redis,请启用systemd服务:

sudo systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.

借此,您的Redis安装完全可以运行。

结论

在本教程中,您从源代码安装,编译并构建了Redis,并将其配置为以systemd服务运行,并验证了您的Redis安装运行正常。 作为紧接着的一步,我们强烈建议您遵循我们的关于如何在Ubuntu 18.04上保护您的Redis安装的指南, 以确保您的Redis安装