以下以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