自动化部署脚本

该脚本是针对于Linux服务器环境部署,抛开技术不说,就一台服务器,需要快速的搭建环境,至少需要一天,其中避免不少有各种问题,如果更多的服务器就更耗时耗力了。倘若让其他没有技术的人员来进行操作部署,更是耗时。

由此,这个脚本就是针对于各种突发情况,多种服务器,上手快,针对各种人员,快速部署而产生。

注意:

xxx记得修改为自己的目标安装路径,还有数据库密码修改为自己的即可。

脚本记得用(chmod +x xxx.sh)

#!/bin/bash
echo "-------- 开始安装Redis。。。 --------"
# 搜索符合条件的文件
redis_info_file=$(find / -type f -name 'redis_info_*.tar.gz' -print -quit)

# 检查是否找到符合条件的文件
if [ -z "$redis_info_file" ]; then
    echo "未找到符合条件的 $redis_info_file 文件"
    exit 1
else
    echo "找到符合条件的redis_info文件: $redis_info_file"
fi

# 检查/xxx/xxx/xxx/software/redis目录是否存在,如果不存在则创建
if [ ! -d /xxx/xxx/xxx/software/redis ]; then
    mkdir -p /xxx/xxx/xxx/software/redis
fi

# 解压文件到/xxx/xxx/xxx/software/redis目录下
tar -zxvf "$redis_info_file" -C /xxx/xxx/xxx/software/redis

# 检查解压是否成功
if [ $? -eq 0 ]; then
    echo "已成功解压到 /xxx/xxx/xxx/software/redis"
else
    echo "解压失败"
    exit 1
fi

# 覆盖sysctl.conf文件到/etc/sysctl.conf
cp -f /xxx/xxx/xxx/software/redis/redis-7.2.3/bin/redis-cli /usr/local/bin/
cp -f /xxx/xxx/xxx/software/redis/etc/sysctl.conf /etc/sysctl.conf
sudo sysctl -p

# 修改redis.conf中的 "dir ./" 为 "dir /xxx/xxx/xxx/redis/"
sed -i 's#dir ./#dir /xxx/xxx/xxx/software/redis/redis-7.2.3/#' /xxx/xxx/xxx/software/redis/redis-7.2.3/redis.conf

# 启动redis服务器
cd /xxx/xxx/xxx/software/redis/redis-7.2.3/bin
./redis-server /xxx/xxx/xxx/software/redis/redis-7.2.3/redis.conf

# 检查redis-server是否成功启动
if [ $? -eq 0 ]; then
    echo "Redis服务器启动成功"
else
    echo "Redis服务器启动失败"
    exit 1
fi

echo "-------- Redis安装完成。。。 --------"

sleep 5

echo "-------- 开始安装RocketMQ。。。 --------"

# 使用 find 命令搜索包
package_path=$(find / -type f -name "rocketmq.tar.gz")
echo "The package path is $package_path"

# 检查是否找到了包
if [ -z "$package_path" ]; then
    echo "未找到指定的 RocketMQ 包:rocketmq.tar.gz"
    exit 1
fi

# 解压包到指定目录
tar -zxvf "$package_path" -C /xxx/xxx/xxx/software/

# 进入 RocketMQ bin 目录
cd /xxx/xxx/xxx/software/rocketmq/rocketmq-all-5.1.4-bin-release/bin/

# 启动 mqnamesrv
nohup sh mqnamesrv &

# 等待 mqnamesrv 启动完成
sleep 3

# 启动 mqbroker
nohup ./mqbroker -n localhost:9876 &

# 执行完毕
echo "RocketMQ 启动完成。"
echo "-------- RocketMQ安装完成。。。 --------"

sleep 5

echo "-------- 开始安装Nacos。。。 --------"
# 在整个文件系统中查找名为 nacos_export_xxx.tar.gz 的文件
export_file=$(find / -type f -name "nacos_export_*.tar.gz" 2>/dev/null | head -n 1)

if [ ! -f "$export_file" ]; then
    echo "未找到 $export_file 文件"
    exit 1
fi

echo "找到压缩文件: $export_file"

# 解压找到的压缩包到 /usr/local/ 目录
echo "正在解压文件到 /usr/local/ ..."
tar -zxvf "$export_file" -C /usr/local/

# 解压后的目录名可能不是 nacos,需要准确获取
# 进入解压后的目录
mv -f /usr/local/nacos/nacos/* /usr/local/nacos/
cd "/usr/local/nacos"

# 启动 Nacos
if [ -f "bin/startup.sh" ]; then
    echo "正在启动 Nacos..."
    sh bin/startup.sh -m standalone
else
    echo "未找到启动脚本: bin/startup.sh"
    exit 1
fi
echo "-------- Nacos安装完成。。。 --------"

sleep 5

echo "-------- 开始安装Minio。。。 --------"

echo "-----------Creating directory-----------"
mkdir -p /xxx/xxx/xxx/software/Minio/minioData
mkdir -p /xxx/xxx/xxx/software/Minio/bin

echo "-----------End of directory creation-----------"
#minio 文件上传到 /xxx/xxx/xxx/software/Minio  目录下
package_path=$(find / -type f -name "minio")
echo "The package path is $package_path"

mv $package_path /xxx/xxx/xxx/software/Minio/bin

chmod +x /xxx/xxx/xxx/software/Minio/bin/minio

echo "-----------Minio service is starting-----------"
nohup /xxx/xxx/xxx/software/Minio/bin/minio server  /xxx/xxx/xxx/software/Minio/minioData > /xxx/xxx/xxx/software/Minio/minio.log 2>&1 &
echo "-----------Minio service startup completed-----------"

echo "-------- Minio安装完成。。。 --------"

sleep 5

echo "-------- 开始安装influxDB。。。 --------"

# 使用 find 命令搜索包
package_path=$(find / -type f -name "influxdb-1.8.3.x86_64.rpm")
echo "The package path is $package_path"
# 检查是否找到了包
if [ -z "$package_path" ]; then
    echo "未找到指定的 InfluxDB 包:influxdb-1.8.3.x86_64.rpm"
    exit 1
fi
echo "正在安装。。。"
yes | sudo yum localinstall "$package_path"
echo "安装完成。。。"

# 重启 InfluxDB 服务
echo "重启influxdb服务"
systemctl restart influxdb 
# 开机自启动
echo "开机自启动"
systemctl enable influxdb 

# 等待 InfluxDB 启动
sleep 5

# 执行 influx 命令,创建用户.
echo "创建用户"
influx -execute "create user \"root\" with password 'root' with all privileges"
echo "执行完成!!!"

echo "-------- influxDB安装完成。。。 --------"

sleep 5

echo "-------- 开始安装Nginx。。。 --------"

# 创建/xxx/xxx/xxx/software/nginxpacks目录(如果不存在)
nginx_dir="/usr/local/nginx"

# 查找并解压Nginx_export_xxx.tar.gz文件
export_file=$(find / -type f -name "nginx_export_*.tar.gz" 2>/dev/null)
if [ -z "$export_file" ]; then
    echo "未找到$export_file 文件"
    exit 1
else
    echo "找到压缩文件: $export_file"
    tar -zxvf "$export_file" -C /usr/local/
fi
export_nginxfile=$(find / -type f -name "nginx103.conf" 2>/dev/null)
cp -f "$export_nginxfile" /usr/local/nginx/conf/nginx.conf
# 启动Nginx
echo "start nginx"
cd /usr/local/nginx/sbin
./nginx
echo "all ok!!!"
echo "-------- Nginx安装完成。。。 --------"

sleep 5

echo "-------- 开始安装postGreSQL。。。 --------"

echo "-------- 正在创建对应目录 --------"
mkdir -p /xxx/xxx/xxx/software
mkdir -p /xxx/xxx/xxx/software/pgsql_require
echo "-------- 创建对应目录结束 --------"
# 安装 postgresql 数据库 RPM 包
pgsql_rpm=$(find / -type f -name "pgsql_require.tar.gz" 2>/dev/null | head -n 1)
test1=$(find / -type f -name "test1*.sql" | head -n 1)
test2=$(find / -type f -name "test2*.sql" | head -n 1)
test3=$(find / -type f -name "test3*.sql" | head -n 1)

echo "-------- 开始安装依赖 --------"
tar -zxvf "$pgsql_rpm" -C /xxx/xxx/xxx/software/

# 进入 pgsql_require 目录
cd /xxx/xxx/xxx/software/pgsql_require/

# 循环遍历目录下的所有 RPM 包
# rpm -ivh "$rpm_file"
rpm -ivh libstdc++-devel-4.8.5-44.el7.x86_64.rpm
sleep 10
rpm -ivh pkgconfig-0.27.1-4.el7.x86_64.rpm
sleep 10
rpm -ivh mpfr-3.1.1-4.el7.x86_64.rpm
sleep 10
rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm
sleep 10
rpm -ivh cpp-4.8.5-44.el7.x86_64.rpm
sleep 10
rpm -ivh kernel-headers-3.10.0-1160.el7.x86_64.rpm
sleep 10
rpm -ivh glibc-headers-2.17-317.el7.x86_64.rpm
sleep 10
rpm -ivh glibc-devel-2.17-317.el7.x86_64.rpm
sleep 10
rpm -ivh gcc-4.8.5-44.el7.x86_64.rpm
sleep 10
rpm -ivh libstdc++-devel-4.8.5-44.el7.x86_64.rpm
sleep 10
rpm -ivh gcc-c++-4.8.5-44.el7.x86_64.rpm
sleep 10
rpm -ivh xz-devel-5.2.2-1.el7.x86_64.rpm
sleep 10
rpm -ivh zlib-devel-1.2.7-18.el7.x86_64.rpm
sleep 10
rpm -ivh libxml2-2.9.1-6.el7.5.x86_64.rpm
sleep 10
rpm -ivh libarchive-3.1.2-14.el7_7.x86_64.rpm
sleep 10
rpm -ivh libicu-50.2-4.el7_7.x86_64.rpm
sleep 10
rpm -ivh libicu-devel-50.2-4.el7_7.x86_64.rpm
sleep 10
rpm -ivh glibc-2.17-326.el7_9.i686.rpm nss-softokn-freebl-3.44.0-8.el7_7.i686.rpm glibc-common-2.17-326.el7_9.x86_64.rpm
sleep 10
rpm -ivh perl-5.16.3-297.el7.x86_64.rpm perl-libs-5.16.3-297.el7.x86_64.rpm perl-macros-5.16.3-297.el7.x86_64.rpm perl-threads-shared-1.43-6.el7.x86_64.rpm perl-threads-1.87-4.el7.x86_64.rpm perl-constant-1.27-2.el7.noarch.rpm perl-Carp-1.26-244.el7.noarch.rpm perl-File-Temp-0.23.01-3.el7.noarch.rpm perl-File-Path-2.09-2.el7.noarch.rpm perl-PathTools-3.40-5.el7.x86_64.rpm perl-Exporter-5.68-3.el7.noarch.rpm perl-Socket-2.010-5.el7.x86_64.rpm perl-Storable-2.45-3.el7.x86_64.rpm perl-Scalar-List-Utils-1.27-248.el7.x86_64.rpm perl-Filter-1.49-3.el7.x86_64.rpm perl-Getopt-Long-2.40-3.el7.noarch.rpm perl-Pod-Simple-3.28-4.el7.noarch.rpm perl-Text-ParseWords-3.29-4.el7.noarch.rpm perl-Time-HiRes-1.9725-3.el7.x86_64.rpm perl-Time-Local-1.2300-2.el7.noarch.rpm perl-Pod-Escapes-1.04-297.el7.noarch.rpm perl-Pod-Usage-1.63-3.el7.noarch.rpm perl-Encode-2.51-7.el7.x86_64.rpm perl-Pod-Perldoc-3.20-4.el7.noarch.rpm perl-podlators-2.5.1-3.el7.noarch.rpm perl-HTTP-Tiny-0.033-3.el7.noarch.rpm perl-parent-0.225-244.el7.noarch.rpm
sleep 15
rpm -ivh gdbm-devel-1.10-8.el7.x86_64.rpm
sleep 10
rpm -ivh libdb-devel-5.3.21-25.el7.x86_64.rpm 
sleep 10
rpm -ivh pyparsing-1.5.6-9.el7.noarch.rpm
sleep 10
rpm -ivh systemtap-sdt-devel-4.0-13.el7.x86_64.rpm
sleep 15
rpm -ivh perl-devel-5.16.3-297.el7.x86_64.rpm perl-ExtUtils-ParseXS-3.18-3.el7.noarch.rpm perl-ExtUtils-MakeMaker-6.68-3.el7.noarch.rpm perl-ExtUtils-Install-1.58-297.el7.noarch.rpm perl-Test-Harness-3.28-3.el7.noarch.rpm perl-ExtUtils-Manifest-1.61-244.el7.noarch.rpm
sleep 10
rpm -ivh perl-ExtUtils-Embed-1.30-297.el7.noarch.rpm
sleep 10
rpm -ivh ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
sleep 10
rpm -ivh readline-devel-6.2-11.el7.x86_64.rpm
sleep 10
rpm -ivh libxslt-1.1.28-6.el7.x86_64.rpm
sleep 10
rpm -ivh python-lxml-3.2.1-4.el7.x86_64.rpm
sleep 10
rpm -ivh python-javapackages-3.4.1-11.el7.noarch.rpm
sleep 10
rpm -ivh javapackages-tools-3.4.1-11.el7.noarch.rpm
sleep 10
rpm -ivh xml-commons-apis12-1.2.04-10.el7.noarch.rpm
sleep 10
rpm -ivh libgpg-error-devel-1.12-3.el7.x86_64.rpm
sleep 10
rpm -ivh libxml2-devel-2.9.1-6.el7.5.x86_64.rpm
sleep 10
rpm -ivh libgcrypt-devel-1.5.3-14.el7.x86_64.rpm
sleep 10
rpm -ivh libxslt-devel-1.1.28-6.el7.x86_64.rpm
sleep 10
echo "-------- 安装依赖结束 --------"
# 安装 postgresql 压缩包
postgresql_tar=$(find / -type f -name "postgresql-16.1.tar.gz" 2>/dev/null | head -n 1)

if [ -f "$postgresql_tar" ]; then
    # 这里执行解压缩和安装的操作,具体步骤取决于压缩包的内容和要求
    echo "-------- 安装 postgresql-16.1.tar.gz --------"
    cp $postgresql_tar /xxx/xxx/xxx/software/
    #tar -zxvf /xxx/xxx/xxx/software/postgresql-16.1.tar.gz
    tar -zxvf /xxx/xxx/xxx/software/postgresql-16.1.tar.gz -C /xxx/xxx/xxx/software/
else
    echo "-------- 未找到 $postgresql_tar 文件 --------"
fi

postgresql_package=$(find / -type d -name "postgresql-16.1" 2>/dev/null | head -n 1)

if [ -d "$postgresql_package" ]; then
    echo "-------- 已找到该目录 --------"
    cd "$postgresql_package"
    
    # 检查是否已经运行了 configure
    if [ ! -f "config.status" ]; then
        echo "-------- 开始配置 --------"
        ./configure --prefix=/home/pgsql
        
        # 检查 configure 是否成功执行
        if [ $? -ne 0 ]; then
            echo "配置失败,请查看错误信息并解决问题。"
            exit 1
        fi
    else
        echo "已经配置过,跳过配置步骤。"
    fi
    
    echo "-------- 开始编译 --------"
    make
    
    # 检查编译是否成功
    if [ $? -ne 0 ]; then
        echo "编译失败,请查看错误信息并解决问题。"
        exit 1
    fi
    
    echo "-------- 开始安装 --------"
    make install
    
    # 检查安装是否成功
    if [ $? -ne 0 ]; then
        echo "安装失败,请查看错误信息并解决问题。"
        exit 1
    fi
    
    echo "-------- 完成 --------"
else
    echo "-------- 未找到 $postgresql_package 文件 --------"
fi
# 检查是否存在 postgres 用户
if id "postgres" &>/dev/null; then
    echo "-------- 用户 postgres 已经存在. --------"
else
    # 创建用户组 postgres
    groupadd postgres
    echo "-------- 创建用户组 postgres --------"

    # 创建用户 postgres
    useradd -g postgres postgres
    echo "-------- 创建用户 postgres --------"

    echo "-------- 开始赋予用户 postgres 密码 --------"
    # 需要手动修改对应的密码
    PGPASSWORD="xxxx"
    echo -e "$PGPASSWORD\n$PGPASSWORD" | sudo passwd postgres
    echo "======== postgres 密码为:$PGPASSWORD ========"
    echo "-------- 结束赋值 postgres 用户密码 --------"
fi

# 将数据移动到 /home/postgres目录下
mv "$test1" /home/postgres
mv "$test2" /home/postgres
mv "$test3" /home/postgres

# 重新查找
test1New=$(find / -type f -name "test1*.sql" | head -n 1)
test2New=$(find / -type f -name "test1*.sql" | head -n 1)
test3New=$(find / -type f -name "test3*.sql" | head -n 1)

#创建数据与日志目录
mkdir -p /data/postgresql/data 
mkdir -p /data/postgresql/log

echo "-------- 目录授权 --------"
cd /home
chown -R postgres:postgres pgsql
echo "-------- 目录授权结束 --------"

sudo -S -u postgres bash <<EOF
echo "-------- 初始化数据库开始 --------"
/home/pgsql/bin/initdb -D /home/pgsql/data
echo "-------- 初始化数据库结束 --------"

echo "-------- 开始启动数据库 --------"
/home/pgsql/bin/pg_ctl start -D /home/pgsql/data/
echo "-------- 启动数据库结束 --------" 

echo "-------- 登录成功 修改密码 --------"
# 需要手动修改对应的密码
/home/pgsql/bin/psql -d postgres -p 5432 postgres -c "alter user postgres with password 'xxxx';"
echo "-------- 修改密码结束 --------"

echo "-------- 执行 授权 --------"
/home/pgsql/bin/psql -d postgres -p 5432 postgres -c "grant all privileges on database postgres to postgres;"

echo "-------- 退出 psql --------"
/home/pgsql/bin/psql -d postgres -p 5432 postgres -c "\q"
echo "-------- 退出 psql 结束 --------"
EOF

echo "-------- 退出 postgresql用户 --------"
echo "$PGPASSWORD" | sudo -S -u root bash <<EOF

echo "-------- 执行 授权结束 --------"


echo "-------- 开启pgsql远程访问 --------"

sed -i "s/^#*listen_addresses.*/listen_addresses = '*'/" "/home/pgsql/data/postgresql.conf"

echo "++++++++ 已将 listen_addresses 修改为 '*' ++++++++"
sed -i '/^# IPv4 local connections:$/a\host     all            all              0.0.0.0/0               md5' /home/pgsql/data/pg_hba.conf

echo "完成配置修改"


echo "-------- 开启pgsql远程访问结束 --------"
EOF
echo "-------- 开始重启postgreSQL服务 --------"
sudo -S -u postgres bash <<EOF

echo "-------- 开始创建对应数据库 --------"
/home/pgsql/bin/psql -d postgres -p 5432 postgres -c "create database test1;"
/home/pgsql/bin/psql -d postgres -p 5432 postgres -c "create database test2;"
/home/pgsql/bin/psql -d postgres -p 5432 postgres -c "create database test3;"

sleep 10
echo "-------- 开始导入test1数据 --------"

if [ -z "$test1" ]; then
    echo "未找到test1数据文件。"
else
    /home/pgsql/bin/psql -h 127.0.0.1 -U postgres -d screenreport -f "$test1"
fi
sleep 10
echo "-------- 开始导入test2数据 --------"

if [ -z "$test2" ]; then
    echo "未找到test2数据文件。"
else
    /home/pgsql/bin/psql -h 127.0.0.1 -U postgres -d zskj_cloud -f "$test2"
fi
sleep 10

echo "-------- 开始导入test3数据 --------"

if [ -z "$test3" ]; then
    echo "未找到test3数据文件。"
else
    /home/pgsql/bin/psql -h 127.0.0.1 -U postgres -d switchdatabasesupport -f "$test3"
fi
sleep 10

echo "-------- 数据导入完成 --------"

/home/pgsql/bin/psql -d postgres -p 5432 postgres -c "\q"
echo "-------- 创建成功并退出数据库 --------"

/home/pgsql/bin/pg_ctl restart -D /home/pgsql/data/
EOF
echo "$PGPASSWORD" | sudo -S -u root bash <<EOF
echo "-------- 重启postgreSQL服务结束 --------"
EOF
echo "-------- postGreSQL安装完成。。。 --------"

echo "-------- 环境安装并启动完成 --------"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值