本文将详细介绍如何在 Rocky Linux 9 上安装 Redis,并进一步配置自定义的数据存储路径和日志文件路径。同时,针对 SELinux 安全机制可能引发的权限问题,提供完整的解决方案,适用于开发与生产环境。
一、准备工作
1. 系统要求
- Rocky Linux 9(x86_64)
- root 权限或具有
sudo权限的用户 - 网络连接正常
2. 更新系统
sudo dnf update -y
3. 安装必要工具
sudo dnf install -y vim wget curl policycoreutils-python-utils
policycoreutils-python-utils包含semanage命令,用于管理 SELinux 策略。
二、安装 Redis
Rocky Linux 9 的官方仓库中已包含 Redis,可直接通过 DNF 安装:
sudo dnf install -y redis
该命令将安装:
redis服务端- 默认配置文件
/etc/redis.conf - systemd 服务单元
redis.service
三、启动并启用 Redis 服务
# 启动 Redis
sudo systemctl start redis
# 设置开机自启
sudo systemctl enable redis
# 检查状态
sudo systemctl status redis
默认配置下:
- 数据持久化文件(RDB):
/var/lib/redis/dump.rdb - 日志文件:默认使用 syslog(无独立日志文件)
- 配置文件:
/etc/redis.conf - 运行用户:
redis
四、进阶配置:自定义数据目录与日志目录
假设我们要:
- 将 RDB 快照文件保存到
/data/redis - 将 Redis 日志写入独立文件
/var/log/redis/redis.log
1. 创建自定义目录并设置权限
sudo mkdir -p /data/redis
sudo mkdir -p /var/log/redis
# 设置属主为 redis 用户(Redis 默认运行用户)
sudo chown -R redis:redis /data/redis
sudo chown -R redis:redis /var/log/redis
2. 修改 Redis 配置文件
编辑 /etc/redis.conf:
sudo vim /etc/redis.conf
修改数据目录(RDB 路径)
找到 dir 配置项,修改为:
dir /data/redis
此路径用于保存
dump.rdb文件(RDB 持久化)和 AOF 文件(如果启用)。
启用独立日志文件(而非 syslog)
默认 Redis 使用 syslog。若需写入文件,需修改以下选项:
# 注释掉或删除以下行(如果存在):
# syslog-enabled yes
# 启用文件日志
logfile /var/log/redis/redis.log
注意:确保
logfile路径可写,且父目录存在。
可选:启用 AOF 持久化(推荐生产环境)
appendonly yes
appendfilename "appendonly.aof"
AOF 文件也将保存在 dir 指定的目录中(即 /data/redis)。
3. 重启 Redis 服务
sudo systemctl restart redis
五、处理 SELinux 权限问题(关键步骤)
Rocky Linux 9 默认启用 SELinux(Enforcing 模式),会阻止 Redis 访问非标准路径。
1. 查看默认 Redis 目录的 SELinux 上下文
ls -Z /var/lib/redis
# 输出示例:unconfined_u:object_r:redis_var_lib_t:s0
# 默认日志由 syslog 管理,无独立文件,但可参考通用日志类型
2. 为自定义目录设置正确的 SELinux 上下文
数据目录(/data/redis)
sudo semanage fcontext -a -t redis_var_lib_t "/data/redis(/.*)?"
sudo restorecon -Rv /data/redis
日志目录(/var/log/redis)
Redis 没有专用的日志类型,但可使用通用日志类型 redis_log_t(若不存在则创建),或使用 var_log_t。
先检查是否存在 redis_log_t:
seinfo -afile_type | grep redis
通常系统未预定义 redis_log_t,因此我们使用 var_log_t(标准日志类型):
sudo semanage fcontext -a -t var_log_t "/var/log/redis(/.*)?"
sudo restorecon -Rv /var/log/redis
✅ 更佳实践:为 Redis 创建专用日志类型(可选,高级)
若需严格隔离,可自定义 SELinux 策略,但对大多数场景var_log_t已足够安全。
3. 验证上下文是否生效
ls -Z /data/redis
ls -Z /var/log/redis
应分别显示 redis_var_lib_t 和 var_log_t。
六、验证配置是否生效
1. 检查服务状态
sudo systemctl status redis
确保无 Permission denied 或 Failed at step EXEC 错误。
2. 查看日志文件
sudo tail -f /var/log/redis/redis.log
应看到类似:
Ready to accept connections
3. 测试数据写入与持久化
redis-cli
127.0.0.1:6379> SET test_key "hello_redis"
OK
127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379> exit
检查数据文件是否生成:
ls -l /data/redis/
# 应看到 dump.rdb(和 appendonly.aof,如果启用了 AOF)
七、防火墙与安全建议(可选)
1. 防火墙配置(如需远程访问)
Redis 默认仅监听 127.0.0.1。若需外部访问(谨慎操作!):
编辑 /etc/redis.conf:
bind 0.0.0.0 # 或指定 IP
protected-mode no # 关闭保护模式(仅在有密码时安全)
并设置密码:
requirepass your_strong_password
然后开放端口:
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --reload
🔒 强烈建议:生产环境务必设置
requirepass,并限制绑定 IP。
八、常见问题排查
1. Redis 启动失败,提示 “Permission denied”
检查目录属主是否为
redis:redis检查 SELinux 上下文:
ls -Z临时设为 Permissive 模式测试:
sudo setenforce 0 sudo systemctl restart redis若成功,则确认是 SELinux 问题,恢复 Enforcing 后修正上下文。
2. 日志文件未生成
- 确保
logfile路径正确且父目录存在 - 确保未启用
syslog-enabled yes - 检查 Redis 是否有写权限(包括 SELinux)
九、总结
通过本教程,你已完成:
- 在 Rocky Linux 9 上安装 Redis
- 自定义 RDB/AOF 数据目录为
/data/redis - 配置独立日志文件
/var/log/redis/redis.log - 正确处理 SELinux 上下文,避免权限拒绝
关键要点:
- 所有自定义目录必须属于
redis用户 - SELinux 是“静默杀手”,务必使用
semanage + restorecon设置上下文 - 生产环境务必启用密码认证和网络限制
📌 教程完成于 2025 年 12 月,适用于 Rocky Linux 9 + Redis(版本 ≥ 6.0,默认仓库版本)。
如需最新版 Redis,可从源码编译,但需自行处理 systemd 服务与 SELinux 策略。