在LNMP的基础上改Redis为UDS连接

于 2020-08-21 发布

使用lnmp一键包安装redis,它会默认开放本地回环来让其他应用连接。更加高效的方法是用Unix Domain Socket来连接,那就要修改相关的配置文件。

如果不知道配置文件在哪,用locate命令来找。

设置redis.conf

参考digitalocean的教程,修改redis.conf,将supervised no改成supervised systemd以便之后写systemd unit来管理redis。然后将dir改成dir /var/lib/redis来让redis 的数据库放在这个文件夹里,符合FHS规范,方便管理。

然后去掉unixsocket和unixsocketperm前面的注释,修改成:

1
2
unixsocket /var/run/redis/redis.sock
unixsocketperm 770

第一行设定socket文件在哪,第二行设定socket的权限。关于权限的讨论,看github的这个issue:enable redis connection via unix domain socket instead of tcp #204

设置socket目录开机创建

为了保证/var/run/redis在开机时存在而且权限正确,需要新建一个tmpfile.d文件

1
touch /usr/lib/tmpfiles.d/redis.conf

里面写:

1
d /var/run/redis 0770 redis redis

systemd Unit文件

创建一个redis.service文件touch /etc/systemd/system/redis.service

如果里面有东西,就先清空。里面要写:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
Type=notify
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target

注意Type=notify,DigitalOcean没有提到这一点,但是因为supervised写了systemd,如果不指定这一项会导致unit启动失败。

创建redis用户/组

创建系统用户,且创建同名的组,但是不在/home里创建目录:

1
useradd --system -U -M redis

然后创建/var/lib/redis/var/run/redis,并且设置好权限:

1
2
3
mkdir /var/lib/redis /var/run/redis
chown redis:redis /var/lib/redis /var/run/redis
chmod 770 /var/lib/redis

结束

启动redis:systemctl start redis

其他需要连接redis的需要加入redis用户组:usermod -a -G redis <user_name>

目录