以下以docker部署为例,系统为CentOS7,展示部署redis的一般部署步骤及一些常见配置。

准备

确保系统环境中装有docker,且处于运行状态。

配置

查看dockerfile

...
RUN groupadd -r redis && useradd -r -g redis redis
...
RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data
...

以上是dockerfile的部分内容,可以看出运行dockerfile的用户为新建的用户名为redis的用户,新建/data目录并设置为所有者,故此目录为redis-server持久化存储目录,也是需要挂载出来的目录。

设置非守护进程启动

daemonize no

假如此处设置为yes,则启动的docker容器将会以Exited (0)的形式退出。

日志持久化及挂载

默认是stdout形式输出日志,需要修改为如下设置:

loglevel notice   # 设置日志等级

logfile /data/redis.log # 设置输出日志文件位置

挂载日志文件到宿主机

docker run  ... -v <host-log-file-path>:<container-log-file-path>

注: 此处只有/data文件夹拥有操作权限,但该目录应该是redis持久化的目录,故将日志放在这里不是很合适,其实可以将lofile的值给为stdout,并通过容器本身的输出去收集。

设置密码

设置密码登陆,提高安全性。

requirepass yourpassword

设置连接可接受IP

注意此处的参数一时不是绑定外部的IP,而是绑定redis-server可接受访问的IP,下面的设置表示只接受本机连接的访问,假如此处设置内网IP,则内网内的机器则都可以访问到。

bind 127.0.0.1

隐藏或重命名重要命令

对于redis某些操作命令,如清空数据库等敏感重要的命令,可以选择将其隐藏或重命名。

rename-command CONFIG ""  # ban
rename-command FLUSHALL "" # ban
rename-command FLUSHDB  "" # ban
rename-command EVAL  "" # ban
rename-command shutdown cleardown # rename

其他辅助安全设置

访问限制设置

可以在安全组或iptable上设置只接受来自特定IP的访问,提高安全性,能使用云服务器厂商的安全组服务的情况下优先使用安全组设置,下面是iptable上的访问限制示例。

iptables -A INPUT -s <your-ip> -p tcp --dport 6379 -j ACCEPT

使用无登陆权限用户启动

这个安全设置其实在大多数安装及运行中都会用到,即避免启动的服务或应用拥有过高的权限,通常是建一个低权限且无登陆权限作为运行用户。

useradd -s /sbin/nologin -M -g redis redis

注: -s指定用户使用的shell,-M表示不创建用户主目录,-g表示指定用户的组为mysql。

安装

集合到上面的一些安全设置和目录映射,最后使用docker启动的命令如下:

docker run -v </path/to/redis.conf>:/usr/local/etc/redis/redis.conf -v </path/to/data>:/data -p 6379:6379 --name redis-server redis redis-server /usr/local/etc/redis/redis.conf