shell脚本自动安装 Redis 7.0.15

  • A+
所属分类:Shell
#!/bin/bash
# Redis 自动安装脚本 - 适用于 CentOS 系统
# 脚本功能:自动下载、编译、配置并启动 Redis 7.0.15

# 定义颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 无颜色

# 检查是否以 root 权限运行
if [ "$(id -u)" -ne 0 ]; then
    echo -e "${RED}错误: 请使用 root 权限运行此脚本${NC}"
    exit 1
fi

# 打印脚本开始信息
echo -e "${YELLOW}===== 开始安装 Redis 7.0.15 =====${NC}"

# 1. 安装依赖
echo -e "${YELLOW}正在安装依赖...${NC}"
yum -y install openssl-devel
if [ $? -ne 0 ]; then
    echo -e "${RED}依赖安装失败,请检查网络连接或系统状态${NC}"
    exit 1
fi
echo -e "${GREEN}依赖安装完成${NC}"

# 2. 下载 Redis 包
echo -e "${YELLOW}正在下载 Redis 安装包...${NC}"
REDIS_VERSION="7.0.15"
REDIS_PACKAGE="redis-${REDIS_VERSION}.tar.gz"
REDIS_URL="https://download.redis.io/releases/${REDIS_PACKAGE}"

# 检查是否已存在安装包,存在则跳过下载
if [ ! -f "$REDIS_PACKAGE" ]; then
    wget $REDIS_URL
    if [ $? -ne 0 ]; then
        echo -e "${RED}下载失败,请手动下载 ${REDIS_URL}${NC}"
        exit 1
    fi
else
    echo -e "${YELLOW}安装包已存在,跳过下载${NC}"
fi
echo -e "${GREEN}下载完成${NC}"

# 3. 解压安装包
echo -e "${YELLOW}正在解压安装包...${NC}"
tar xvf $REDIS_PACKAGE
if [ $? -ne 0 ]; then
    echo -e "${RED}解压失败,请检查安装包完整性${NC}"
    exit 1
fi
echo -e "${GREEN}解压完成${NC}"

# 4. 编译 Redis
cd redis-${REDIS_VERSION}
echo -e "${YELLOW}正在编译 Redis...这可能需要几分钟时间${NC}"
make BUILD_TLS=yes
if [ $? -ne 0 ]; then
    echo -e "${RED}编译失败,请检查编译环境${NC}"
    exit 1
fi
echo -e "${GREEN}编译完成${NC}"

# 5. 安装 Redis
INSTALL_DIR="/usr/local/redis-${REDIS_VERSION}"
echo -e "${YELLOW}正在安装 Redis 到 ${INSTALL_DIR}...${NC}"
make install PREFIX=$INSTALL_DIR
if [ $? -ne 0 ]; then
    echo -e "${RED}安装失败${NC}"
    exit 1
fi
echo -e "${GREEN}安装完成${NC}"

# 6. 建立软连接
echo -e "${YELLOW}正在建立软连接...${NC}"
ln -s $INSTALL_DIR /usr/local/redis
if [ $? -ne 0 ]; then
    echo -e "${RED}软连接建立失败${NC}"
    exit 1
fi
echo -e "${GREEN}软连接建立完成${NC}"

# 7. 创建配置文件目录并复制配置文件
echo -e "${YELLOW}正在配置 Redis...${NC}"
mkdir -p /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc/

# 8. 修改配置文件(使用 sed 替换关键配置)
echo -e "${YELLOW}正在修改配置文件...${NC}"
# 允许所有IP连接
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /usr/local/redis/etc/redis.conf
# 启用守护进程
sed -i 's/daemonize no/daemonize yes/g' /usr/local/redis/etc/redis.conf
# 设置进程ID文件
sed -i 's|# pidfile /var/run/redis_6379.pid|pidfile /usr/local/redis/run/redis_6379.pid|g' /usr/local/redis/etc/redis.conf
# 设置日志文件
sed -i 's|# logfile ""|logfile "/usr/local/redis/logs/redis.log"|g' /usr/local/redis/etc/redis.conf
# 设置数据存储目录
sed -i 's|dir .|dir /data/redis|g' /usr/local/redis/etc/redis.conf
# 设置密码(默认为 xxx.com,可自行修改)
sed -i 's|# requirepass foobared|requirepass xxx.com|g' /usr/local/redis/etc/redis.conf
# 开启AOF持久化
sed -i 's|appendonly no|appendonly yes|g' /usr/local/redis/etc/redis.conf
# 设置AOF文件名
sed -i 's|# appendfilename "appendonly.aof"|appendfilename "appendonly.aof"|g' /usr/local/redis/etc/redis.conf
# 设置AOF同步策略
sed -i 's|appendfsync everysec|appendfsync everysec|g' /usr/local/redis/etc/redis.conf

# 9. 创建数据目录和日志目录
mkdir -p /data/redis
mkdir -p /usr/local/redis/{run,logs}

# 10. 创建用户并授权
echo -e "${YELLOW}正在创建用户和授权...${NC}"
useradd -s /sbin/nologin -M redis
chown -R redis:redis /usr/local/redis*
chown -R redis:redis /data/redis/
echo -e "${GREEN}用户创建和授权完成${NC}"

# 11. 配置开机自启动服务
echo -e "${YELLOW}正在配置开机自启动...${NC}"
cat > /usr/lib/systemd/system/redis.service << 'EOF'
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
PIDFile=/usr/local/redis/run/redis_6379.pid
Restart=always
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
EOF

# 12. 启动 Redis 服务
echo -e "${YELLOW}正在启动 Redis 服务...${NC}"
systemctl daemon-reload
systemctl enable --now redis.service
if [ $? -ne 0 ]; then
    echo -e "${RED}服务启动失败,请检查配置文件${NC}"
    exit 1
fi

# 13. 检查 Redis 运行状态
echo -e "${YELLOW}正在检查 Redis 运行状态...${NC}"
systemctl status redis.service --no-pager

# 14. 输出登录提示
echo -e "${GREEN}===== Redis 安装完成 =====${NC}"
echo -e "${YELLOW}Redis 已安装在 ${INSTALL_DIR}${NC}"
echo -e "${YELLOW}登录命令: ${NC}/usr/local/redis/bin/redis-cli -h localhost -p 6379"
echo -e "${YELLOW}认证命令: ${NC}AUTH xxx.com"
echo -e "${YELLOW}查看信息: ${NC}INFO"
shell脚本自动安装 Redis 7.0.15
xxx