当前位置: 首页 > article >正文

脚本化挂在物理盘、nfs、yum、pg数据库、nginx(已上传脚本)

文章目录

  • 前言
  • 一、什么是脚本化安装
  • 二、使用步骤
    • 1.物理磁盘脚本挂载(离线)
    • 2.yum脚本化安装(离线)
    • 3.nfs脚本化安装(离线)
    • 4.pg数据库脚本化安装(离线)
    • 5.nginx脚本化安装(离线)
  • 总结


前言

在Linux中,Shell脚本是一种强大的工具,用于自动化任务和管理系统。编写Shell脚本时,需要遵循一定的格式和规范,以确保脚本的可读性和可维护性。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是脚本化安装

Linux脚本是一种可以在Linux或其他类Unix操作系统上运行的脚本语言。它可以用于自动化系统管理任务、软件开发、数据处理等各种任务。脚本通常是以文本文件的形式编写,其中包含一系列命令和语句,这些命令和语句可以在终端或脚本解释器中执行。

底层原理是,当用户运行脚本时,操作系统会将其交给解释器解释执行。解释器会逐行读取脚本文件,将每一行转化为对应的操作系统命令进行执行。因为Linux脚本语言是一种解释型语言,所以它可以在不同的平台和系统上运行,而不需要进行编译。这使得脚本编写和调试更加容易。

脚本语言的优点是它具有易读性、易维护性、易于使用的特点。Linux脚本可以处理多种文本格式,包括CSV、XML、JSON等。此外,它还具有强大的系统管理功能,如文件管理、进程管理、网络管理等。因此,它在自动化运维、软件开发、数据处理等领域广泛应用。

二、使用步骤

1.物理磁盘脚本挂载(离线)

使用方法
将代码保存为.sh格式

dos2unix 物理盘挂载.sh     ----转载为linux可识别的语言
sh 物理盘挂载.sh           ----根据提示填写信息即可

代码

#!/bin/bash

# 检查是否以root用户运行
if [ "$EUID" -ne 0 ]; then
  echo "请以root用户或使用sudo运行此脚本"
  exit 1
fi

# 列出所有块设备
echo "当前块设备列表:"
lsblk

# 提示用户输入设备路径
read -p "请输入要格式化的磁盘设备路径(例如 /dev/vdb):" DEVICE_PATH

# 检查设备是否存在
if [ ! -e "$DEVICE_PATH" ]; then
  echo "设备 $DEVICE_PATH 不存在,请检查路径是否正确!"
  exit 1
fi

# 提示用户确认设备路径
echo "您选择的设备是:$DEVICE_PATH"
read -p "请确认是否继续格式化此设备?(y/n): " CONFIRM

if [ "$CONFIRM" != "y" ]; then
  echo "操作已取消。"
  exit 0
fi

# 提示用户选择文件系统类型
echo "请选择要使用的文件系统类型:"
echo "1. ext3"
echo "2. ext4"
echo "3. xfs"
echo "4. btrfs"
read -p "输入选项(1-4):" FILESYSTEM_OPTION

# 根据用户选择设置文件系统类型
case $FILESYSTEM_OPTION in
  1) FILESYSTEM="ext3";;
  2) FILESYSTEM="ext4";;
  3) FILESYSTEM="xfs";;
  4) FILESYSTEM="btrfs";;
  *) echo "无效选项,默认使用 ext3"; FILESYSTEM="ext3";;
esac

# 格式化磁盘
echo "格式化 $DEVICE_PATH 为 $FILESYSTEM 文件系统..."
if [ "$FILESYSTEM" == "xfs" ]; then
  mkfs.xfs "$DEVICE_PATH"
elif [ "$FILESYSTEM" == "btrfs" ]; then
  mkfs.btrfs "$DEVICE_PATH"
else
  mkfs.$FILESYSTEM "$DEVICE_PATH"
fi

# 提示用户输入挂载点路径
read -p "请输入挂载点路径(例如 /vdb):" MOUNT_POINT

# 创建挂载点目录
echo "创建挂载点目录 $MOUNT_POINT..."
mkdir -p "$MOUNT_POINT"

# 挂载设备到挂载点
echo "挂载 $DEVICE_PATH 到 $MOUNT_POINT..."
mount "$DEVICE_PATH" "$MOUNT_POINT"

# 编辑 /etc/fstab 文件,以确保系统重启后自动挂载
echo "编辑 /etc/fstab 文件以确保系统重启后自动挂载..."
echo "$DEVICE_PATH $MOUNT_POINT $FILESYSTEM defaults 0 0" >> /etc/fstab

# 检查挂载是否成功
echo "检查挂载是否成功..."
mount -a

# 列出所有块设备,确认挂载
echo "当前块设备列表:"
lsblk

# 重启系统
echo "系统将在5秒后重启..."
sleep 5
reboot

在这里插入图片描述

2.yum脚本化安装(离线)

使用方法和上面差不多

dos2unix yum.sh
sh yum.sh
#!/bin/bash

# 检查是否以root用户运行
if [ "$EUID" -ne 0 ]; then
  echo "请以root用户或使用sudo运行此脚本"
  exit 1
fi

# 提示用户输入挂载点路径(默认为 /media/cdrom)
read -p "请输入挂载点路径(默认为 /media/cdrom):" MOUNT_POINT

# 如果用户未输入挂载点路径,则使用默认值
if [ -z "$MOUNT_POINT" ]; then
  MOUNT_POINT="/media/cdrom"
fi

# 创建挂载点目录
echo "创建挂载点目录 $MOUNT_POINT..."
mkdir -p "$MOUNT_POINT"

# 显示磁盘使用情况
echo "当前磁盘使用情况:"
df -h

# 备份原有yum仓库配置
echo "备份原有yum仓库配置..."
cp -rf /etc/yum.repos.d /etc/yum.repos.d_bak

# 清除原有yum仓库配置
echo "清除原有yum仓库配置..."
rm -rf /etc/yum.repos.d/*

# 创建新的yum仓库配置文件
echo "创建新的yum仓库配置文件..."
cat <<EOF > /etc/yum.repos.d/Media.repo
[iso]
name=Media
baseurl=file://${MOUNT_POINT}/
gpgcheck=0
enabled=1
EOF

# 编辑fstab文件以自动挂载光驱
echo "编辑 /etc/fstab 文件以自动挂载光驱..."
echo "/dev/sr0   ${MOUNT_POINT}   iso9660   defaults   0   0" >> /etc/fstab

# 重新加载systemd配置
echo "重新加载systemd配置..."
systemctl daemon-reload

# 挂载所有文件系统
echo "挂载所有文件系统..."
mount -a

# 停止并禁用防火墙
echo "停止并禁用防火墙..."
systemctl stop firewalld
systemctl disable firewalld

# 清除yum缓存并重建
echo "清除yum缓存并重建..."
yum clean all
yum makecache

# 列出可用的软件包
echo "列出可用的软件包..."
yum list

# 确认挂载成功
echo "挂载点 $MOUNT_POINT 的挂载状态:"
mount | grep "$MOUNT_POINT"

# 完成提示
echo "配置完成!挂载点已设置为 $MOUNT_POINT,yum仓库已配置。"

在这里插入图片描述

3.nfs脚本化安装(离线)

使用方法

dos2unix nfs.sh
sh nfs.sh

代码

#!/bin/bash

# 安装nfs-utils和rpcbind
echo "安装nfs-utils和rpcbind..."
yum install -y nfs-utils rpcbind

# 提示用户输入共享路径的目录
read -p "请输入NFS共享目录的路径(例如 /home/nfs): " SHARE_DIR

# 如果用户没有输入,则使用默认值 /home/nfs
if [ -z "$SHARE_DIR" ]; then
    SHARE_DIR="/home/nfs"
    echo "未输入共享目录路径,使用默认值 $SHARE_DIR"
fi

# 创建NFS共享目录
echo "创建NFS共享目录 $SHARE_DIR..."
mkdir -p "$SHARE_DIR"
chmod -R 777 "$SHARE_DIR"  # 将权限改为777

# 配置exports文件
echo "配置 /etc/exports..."
cat > /etc/exports <<EOF
$SHARE_DIR *(rw,sync,no_root_squash)
EOF

# 重新加载exports配置
echo "重新加载exports配置..."
exportfs -ra

# 启动并启用nfs服务
echo "启动nfs服务..."
systemctl start nfs-server

echo "设置nfs服务开机自启动..."
systemctl enable nfs-server

echo "NFS服务器配置完成。"

# 提示用户是否在本地安装NFS客户端
read -p "是否在本地安装NFS客户端?(y/n, 默认n): " INSTALL_LOCAL

if [[ "$INSTALL_LOCAL" == "y" ]]; then
    # 安装nfs客户端
    echo "安装nfs客户端..."
    yum install -y nfs-utils
    echo "NFS客户端安装完成。"
fi

# 提示用户输入目标服务器的IP地址,支持多个IP地址
read -p "请输入目标服务器的IP地址,多个IP地址用逗号分隔(留空跳过): " TARGET_IPS

# 如果用户没有输入目标IP地址,则跳过分发步骤
if [ -z "$TARGET_IPS" ]; then
    echo "未输入目标服务器IP地址,跳过分发步骤。"
else
    # 将逗号分隔的IP地址转换为数组
    IFS=',' read -r -a TARGET_IP_ARRAY <<< "$TARGET_IPS"

    # 定义目标服务器的用户名(默认 root)
    TARGET_USER="root"

    # 定义目标服务器上的目标路径
    TARGET_DIR="/root/"

    # 定义脚本文件名
    SCRIPT_FILE="setup_nfs.sh"

    # 将当前脚本内容保存到临时文件
    echo "将当前脚本保存为临时文件 $SCRIPT_FILE ..."
    cat > "$SCRIPT_FILE" <<EOF
#!/bin/bash

# 安装nfs-utils和rpcbind
echo "安装nfs-utils和rpcbind..."
yum install -y nfs-utils rpcbind

# 提示用户输入共享路径的目录
read -p "请输入NFS共享目录的路径(例如 /home/nfs): " SHARE_DIR

# 如果用户没有输入,则使用默认值 /home/nfs
if [ -z "\$SHARE_DIR" ]; then
    SHARE_DIR="/home/nfs"
    echo "未输入共享目录路径,使用默认值 \$SHARE_DIR"
fi

# 创建NFS共享目录
echo "创建NFS共享目录 \$SHARE_DIR..."
mkdir -p "\$SHARE_DIR"
chmod -R 777 "\$SHARE_DIR"  # 将权限改为777

# 配置exports文件
echo "配置 /etc/exports..."
cat > /etc/exports <<EOL
\$SHARE_DIR *(rw,sync,no_root_squash)
EOL

# 重新加载exports配置
echo "重新加载exports配置..."
exportfs -ra

# 启动并启用nfs服务
echo "启动nfs服务..."
systemctl start nfs-server

echo "设置nfs服务开机自启动..."
systemctl enable nfs-server

echo "NFS服务器配置完成。"
EOF

    # 设置脚本权限
    chmod +x "$SCRIPT_FILE"

    # 遍历所有目标服务器,发送并执行脚本
    for TARGET_IP in "${TARGET_IP_ARRAY[@]}"; do
        echo "处理目标服务器 $TARGET_IP..."

        # 确保目标路径存在
        echo "在目标服务器 $TARGET_IP 上创建目标路径 $TARGET_DIR ..."
        ssh "$TARGET_USER@$TARGET_IP" "mkdir -p $TARGET_DIR"

        # 将脚本发送到目标服务器
        echo "将脚本 $SCRIPT_FILE 发送到目标服务器 $TARGET_IP ..."
        scp "$SCRIPT_FILE" "$TARGET_USER@$TARGET_IP:$TARGET_DIR"

        # 在目标服务器上执行脚本
        echo "在目标服务器 $TARGET_IP 上执行脚本..."
        ssh "$TARGET_USER@$TARGET_IP" "chmod +x $TARGET_DIR/$SCRIPT_FILE && $TARGET_DIR/$SCRIPT_FILE"
    done

    # 删除本地的临时脚本文件
    echo "删除本地的临时脚本文件 $SCRIPT_FILE ..."
    rm "$SCRIPT_FILE"

    echo "NFS配置脚本已成功发送并在所有目标服务器上执行。"
fi

在这里插入图片描述

4.pg数据库脚本化安装(离线)

使用方法

dos2unix pg.sh
sh pg.sh

代码

#!/bin/bash

set -e  # 出现错误时退出脚本

function setup_logging {
    log_file="/var/log/pg_install.log"
    touch "$log_file"
    exec > >(tee -i "$log_file") 2>&1
    echo "日志文件:$log_file"
}

function install_postgresql {
    # 引入日志记录
    setup_logging

    # 提示用户输入源码包的存放路径
    echo "请输入 PostgreSQL 源码包的存放路径(例如 /data/sources):"
    read -r source_path

    # 在指定路径下查找 .tar.gz 或 .tar 文件
    source_file=$(find "$source_path" -type f \( -name "*.tar.gz" -o -name "*.tar" \) -print -quit)

    # 检查是否找到文件
    if [ -z "$source_file" ]; then
        echo "未在路径 $source_path 下找到 .tar.gz 或 .tar 文件。请检查路径并重新运行脚本。"
        exit 1
    fi

    # 解压找到的源码包
    echo "正在解压 $source_file..."
    tar -zxvf "$source_file"

    # 获取解压后的目录名
    tar_dir=$(tar -tf "$source_file" | head -1 | cut -f1 -d"/")

    # 进入解压后的目录
    cd "$tar_dir" || { echo "无法进入目录 $tar_dir。请检查解压结果。"; exit 1; }

    # 添加 PostgreSQL 用户
    useradd postgresql

    # 提示用户是否要手动设置密码
    echo "是否要手动设置 PostgreSQL 用户的密码? (y/n)"
    read -r answer

    if [[ "$answer" == "y" ]]; then
        # 提示用户手动输入密码
        passwd postgresql
    else
        # 使用默认密码 root1234
        echo "postgresql:root1234" | chpasswd
        echo "默认密码 root1234 已设置。"
    fi

    # 提示用户是否已经手动创建了数据目录
    echo "是否已经手动创建了 PostgreSQL 数据目录? (y/n)"
    read -r data_dir_answer

    if [[ "$data_dir_answer" != "y" ]]; then
        # 提示用户输入数据目录路径
        echo "请输入 PostgreSQL 数据目录的路径(例如 /data/postgresql/data):"
        read -r data_dir_path

        # 创建 PostgreSQL 数据目录
        mkdir -p "$data_dir_path"
        chown -R postgresql:postgresql "$data_dir_path"
        chmod 750 "$data_dir_path"
    else
        # 提示用户输入现有的数据目录路径
        echo "请输入现有的 PostgreSQL 数据目录的路径(例如 /data/postgresql/data):"
        read -r data_dir_path
    fi

    # 提示用户是否已经手动创建了安装路径
    echo "是否已经手动创建了 PostgreSQL 安装路径(例如 /data/postgresql/pgsql)? (y/n)"
    read -r install_dir_answer

    if [[ "$install_dir_answer" != "y" ]]; then
        # 提示用户输入 PostgreSQL 安装路径
        echo "请输入 PostgreSQL 安装路径(例如 /data/postgresql/pgsql):"
        read -r install_path

        # 创建 PostgreSQL 安装路径
        mkdir -p "$install_path"
        chown -R postgresql:postgresql "$install_path"
        chmod 750 "$install_path"
    else
        # 提示用户输入现有的安装路径
        echo "请输入现有的 PostgreSQL 安装路径(例如 /data/postgresql/pgsql):"
        read -r install_path
    fi

    # 更新 yum 缓存
    yum makecache fast

    # 定义依赖包列表
    dependencies=(
        readline-devel
        systemtap
        systemtap-sdt-devel
        perl-ExtUtils-Embed
        pam
        pam-devel
        libxml2
        libxml2-devel
        libxslt
        libxslt-devel
        python3-devel
        libicu-devel
        zlib-devel
    )

    # 检查并安装缺失的依赖包
    for pkg in "${dependencies[@]}"; do
        if ! rpm -q "$pkg" &> /dev/null; then
            echo "未安装依赖包 $pkg,正在安装..."
            yum install -y "$pkg"
        fi
    done

    # 特殊处理 python2-devel
    if ! rpm -q python2-devel &> /dev/null; then
        echo "未找到 python2-devel,尝试安装 python3-devel 替代..."
        yum install -y python3-devel
    fi

    # 配置 PostgreSQL 的安装选项
    ./configure --prefix="$install_path" --with-pgport=5432 --with-libraries="$install_path/lib" --with-includes="$install_path/include" --with-perl --with-python --with-openssl --with-pam --with-libxml --with-libxslt

    # 编译并安装 PostgreSQL
    make && make install

    # 设置安装目录权限
    chown -R postgresql:postgresql "$install_path"
    chmod 750 "$install_path"

    # 初始化数据库
    su - postgresql -c "$install_path/bin/initdb -D $data_dir_path"

    # 启动 PostgreSQL 服务
    su - postgresql -c "$install_path/bin/pg_ctl -D $data_dir_path -l $data_dir_path/logfile start"

    # 修改环境变量
    cat <<EOF >> /etc/profile
export PATH=$install_path/bin:\$PATH
export PGHOME=$install_path
export PGDATA=$data_dir_path
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$PGHOME/lib
EOF

    # 使环境变量生效
    source /etc/profile

    # 创建 systemd 服务单元文件
    cat <<EOF > /etc/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
User=postgresql
Group=postgresql
Environment=PGPORT=5432
Environment=PGDATA=$data_dir_path
ExecStart=$install_path/bin/pg_ctl start -D \$PGDATA -l \$PGDATA/logfile
ExecStop=$install_path/bin/pg_ctl stop -D \$PGDATA -m fast
ExecReload=$install_path/bin/pg_ctl reload -D \$PGDATA
TimeoutSec=300

[Install]
WantedBy=multi-user.target
EOF

    # 重新加载 systemd 配置
    systemctl daemon-reload

    # 询问用户是否设置开机自启动
    echo "是否设置 PostgreSQL 为开机自启动? (y/n)"
    read -r enable_answer

    if [[ "$enable_answer" == "y" ]]; then
        # 启用 PostgreSQL 服务
        systemctl enable postgresql
        echo "PostgreSQL 已设置为开机自启动。"
    else
        echo "PostgreSQL 未设置为开机自启动。"
    fi

    # 启动 PostgreSQL 服务
    systemctl start postgresql

    echo "PostgreSQL 数据库安装并启动成功。"

    # 修改 postgresql.conf 文件
    modify_postgresql_conf "$data_dir_path"

    # 修改 pg_hba.conf 文件
    modify_pg_hba_conf "$data_dir_path"
}

function modify_postgresql_conf {
    local data_dir_path=$1

    # 编辑 postgresql.conf 文件
    echo "正在修改 $data_dir_path/postgresql.conf 文件..."

    # 修改第60行 listen_addresses 的值为 '*'
    sed -i '60s/^#//; 60s/localhost/*/' "$data_dir_path/postgresql.conf"

    # 修改第64行 port 的值为 5432
    sed -i '64s/^#//' "$data_dir_path/postgresql.conf"

    echo "postgresql.conf 文件修改完成。"
}

function modify_pg_hba_conf {
    local data_dir_path=$1

    # 编辑 pg_hba.conf 文件
    echo "正在修改 $data_dir_path/pg_hba.conf 文件..."

    # 在匹配行后添加新的配置行
    sed -i '/# IPv4 local connections:/ a \
host    all             all             0.0.0.0/0               md5' "$data_dir_path/pg_hba.conf"

    echo "pg_hba.conf 文件修改完成。"
}

# 执行 PostgreSQL 安装
install_postgresql

问题

开机自启可提供选择,如果选择启用可能会报错,或者安装好后会报错,看一下之前创建的数据路径底下的logfile

在这里插入图片描述

5.nginx脚本化安装(离线)

使用方法

dos2unix nginx.sh
sh nginx.sh

代码

#!/bin/bash

# 检查并创建目录
check_and_create_dir() {
    local dir=$1
    if [ ! -d "$dir" ]; then
        read -p "目录 $dir 不存在,是否现在创建?(y/n): " choice
        if [ "$choice" = "y" ]; then
            mkdir -p "$dir"
            echo "目录 $dir 已创建"
        else
            echo "跳过创建目录 $dir,这可能导致后续操作失败"
            exit 1
        fi
    else
        echo "目录 $dir 已存在,跳过创建"
    fi
}

# 检查文件是否存在
check_file() {
    local file=$1
    if [ ! -f "$file" ]; then
        echo "文件 $file 不存在,请下载后再运行此脚本"
        exit 1
    fi
}

# 解压缩文件到指定目录
unzip_file() {
    local file=$1
    local dir=$2
    check_file "$file"
    unzip -o "$file" -d "$dir"
    echo "文件 $file 已解压缩到 $dir"
}

# 解压 .tar.gz 文件到指定目录
untar_file() {
    local file=$1
    local dir=$2
    check_file "$file"
    tar -xvf "$file" -C "$dir"
    echo "文件 $file 已解压到 $dir"
}

# 检查 RPM 包是否已安装,如果未安装且 RPM 文件存在,则安装
check_and_install_rpm() {
    local rpm_file=$1
    local package_name=$2
    if rpm -q "$package_name" > /dev/null; then
        echo "包 $package_name 已安装,跳过"
    else
        if [ -f "$rpm_file" ]; then
            rpm -ivh "$rpm_file" --nodeps
            echo "RPM 包 $rpm_file 已安装"
        else
            echo "RPM 包 $rpm_file 不存在,尝试使用 yum 安装"
            yum install -y "$package_name"
            if [ $? -ne 0 ]; then
                echo "yum 安装 $package_name 失败,请手动安装"
                exit 1
            fi
        fi
    fi
}

# 获取用户指定的解压目录路径,默认为 /data/nginxzip
read -p "请输入文件解压目录(默认为 /data/nginxzip): " dir
dir=${dir:-/data/nginxzip}

# 获取 nginx.zip 的具体路径,默认为 /data/nginx.zip
read -p "请指定 nginx.zip 的完整路径(例如:/data/nginx.zip): " nginx_zip_path
nginx_zip_path=${nginx_zip_path:-/data/nginx.zip}

# 提示用户创建目录
echo "请确保以下目录已创建在您的系统中,否则脚本将自动为您创建它们:"
echo "$dir"

# 暂停以允许用户手工创建目录
read -p "按 Enter 键继续或者退出脚本后手工创建... " -rs
echo

# 检查并创建目录
check_and_create_dir "$dir"

# 检查文件是否存在
check_file "$nginx_zip_path"

# 解压 nginx.zip
unzip_file "$nginx_zip_path" "$dir"

# 检查并解压其他文件
files=("nginx-1.20.2.tar.gz" "pcre-8.41.zip" "openssl-1.1.1j.tar.gz" "zlib-1.3.1.tar.gz")
for file in "${files[@]}"; do
    check_file "$dir/$file"
done

unzip_file "$dir/pcre-8.41.zip" "$dir"
untar_file "$dir/nginx-1.20.2.tar.gz" "$dir"
untar_file "$dir/openssl-1.1.1j.tar.gz" "$dir"
untar_file "$dir/zlib-1.3.1.tar.gz" "$dir"

# 安装所需的 RPM 包
rpms=(
    "cpp-4.8.5-44.el7.x86_64.rpm gcc"
    "gcc-4.8.5-44.el7.x86_64.rpm gcc"
    "gcc-c++-4.8.5-36.el7.x86_64.rpm gcc-c++"
    "glibc-2.17-317.el7.x86_64.rpm glibc"
    "glibc-common-2.17-317.el7.x86_64.rpm glibc-common"
    "glibc-devel-2.17-317.el7.x86_64.rpm glibc-devel"
    "glibc-headers-2.17-317.el7.x86_64.rpm glibc-headers"
    "libstdc++-devel-4.8.5-36.el7.x86_64.rpm libstdc++-devel"
)

for rpm in "${rpms[@]}"; do
    rpm_file=$(echo "$rpm" | cut -d' ' -f1)
    package_name=$(echo "$rpm" | cut -d' ' -f2)
    check_and_install_rpm "$rpm_file" "$package_name"
done

echo "所有解压和依赖包安装已完成,开始编译和安装组件..."

# 第一步:编译安装 OpenSSL
echo "编译安装 OpenSSL..."
cd "$dir/openssl-1.1.1j/"
./config
if [ $? -eq 0 ]; then
    make
    if [ $? -eq 0 ]; then
        make install
        if [ $? -eq 0 ]; then
            echo "OpenSSL 安装成功!"
        else
            echo "OpenSSL make install 失败!"
            exit 1
        fi
    else
        echo "OpenSSL make 失败!"
        exit 1
    fi
else
    echo "OpenSSL 配置失败!"
    exit 1
fi
cd -

# 第二步:编译安装 pcre
echo "编译安装 pcre..."
cd "$dir/pcre-8.41/"
./configure
if [ $? -eq 0 ]; then
    make
    if [ $? -eq 0 ]; then
        make install
        if [ $? -eq 0 ]; then
            echo "pcre 安装成功!"
        else
            echo "pcre make install 失败!"
            exit 1
        fi
    else
        echo "pcre make 失败!"
        exit 1
    fi
else
    echo "pcre 配置失败!"
    exit 1
fi
cd -

# 第三步:编译安装 zlib
echo "编译安装 zlib..."
cd "$dir/zlib-1.3.1/"
./configure
if [ $? -eq 0 ]; then
    make
    if [ $? -eq 0 ]; then
        make install
        if [ $? -eq 0 ]; then
            echo "zlib 安装成功!"
        else
            echo "zlib make install 失败!"
            exit 1
        fi
    else
        echo "zlib make 失败!"
        exit 1
    fi
else
    echo "zlib 配置失败!"
    exit 1
fi
cd -

# 第四步:编译安装 Nginx
echo "编译安装 Nginx..."
cd "$dir/nginx-1.20.2/"
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=../pcre-8.41 --with-openssl=../openssl-1.1.1j --with-stream
if [ $? -eq 0 ]; then
    make
    if [ $? -eq 0 ]; then
        make install
        if [ $? -eq 0 ]; then
            echo "Nginx 安装成功!"
        else
            echo "Nginx make install 失败!"
            exit 1
        fi
    else
        echo "Nginx make 失败!"
        exit 1
    fi
else
    echo "Nginx 配置失败!"
    exit 1
fi
cd -

# 复制 nginx 到 /usr/bin 目录
if [ -f "/usr/local/nginx/sbin/nginx" ]; then
    cp /usr/local/nginx/sbin/nginx /usr/bin/
    if [ $? -eq 0 ]; then
        echo "nginx 已成功复制到 /usr/bin 目录"
    else
        echo "复制 nginx 到 /usr/bin 目录失败"
        exit 1
    fi
else
    echo "/usr/local/nginx/sbin/nginx 文件不存在,请检查 Nginx 是否正确安装"
    exit 1
fi

# 检查 nginx 是否可执行
if [ -x "/usr/bin/nginx" ]; then
    echo "nginx 在 /usr/bin 目录下已可用"
else
    echo "nginx 在 /usr/bin 目录下不可执行,请检查文件权限"
    exit 1
fi

# 修改 nginx.conf 文件中的端口号
echo "修改 nginx.conf 文件中的端口号..."
sed -i '36s/listen       80;/listen       8088;/' /usr/local/nginx/conf/nginx.conf

# 验证修改是否成功
if grep -q "listen       8088;" /usr/local/nginx/conf/nginx.conf; then
    echo "nginx.conf 文件中的端口号已成功修改为 8088"
else
    echo "nginx.conf 文件中的端口号修改失败,请手动检查文件"
    exit 1
fi

# 定义 Nginx 服务文件内容
nginx_service_content='[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target'

# 创建 Nginx 服务文件
echo "创建 Nginx 服务文件 /etc/systemd/system/nginx.service"
echo "$nginx_service_content" | sudo tee /etc/systemd/system/nginx.service > /dev/null

if [ $? -ne 0 ]; then
    echo "创建 Nginx 服务文件失败!"
    exit 1
fi

# 重新加载 systemd 配置
echo "重新加载 systemd 配置"
sudo systemctl daemon-reload

if [ $? -ne 0 ]; then
    echo "重新加载 systemd 配置失败!"
    exit 1
fi

# 启用 Nginx 服务
echo "启用 Nginx 服务"
sudo systemctl enable nginx

if [ $? -ne 0 ]; then
    echo "启用 Nginx 服务失败!"
    exit 1
fi

# 启动 Nginx 服务
echo "启动 Nginx 服务"
sudo systemctl start nginx

if [ $? -ne 0 ]; then
    echo "启动 Nginx 服务失败!"
    exit 1
fi

# 检查 Nginx 服务状态
echo "检查 Nginx 服务状态"
sudo systemctl status nginx

if [ $? -ne 0 ]; then
    echo "检查 Nginx 服务状态失败!"
    exit 1
fi

echo "所有操作已完成!"

在这里插入图片描述


总结

脚本就是无脑话和不动手安装,本文不存在抄袭,都是自己平时觉得步骤繁琐,根据经验写的,可能有不足大家多多包涵,后续会更新k8s脚本化安装。我已经把脚本上传到资源(脚本.zip)


http://www.kler.cn/a/505884.html

相关文章:

  • 嵌入式系统Linux实时化(四)Xenomai应用开发测试
  • 晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版
  • STC的51单片机LED点灯基于KEIL
  • 自建RustDesk服务器
  • 用Guiguider生成的字体代替LVGL默认字体
  • apache-skywalking-apm-10.1.0使用
  • Unity解决滑动条的value值的滑动条消失问题
  • RabbitMQ(三)
  • Agile Scrum 敏捷开发方法
  • 基于Verilog的简易音乐节奏游戏设计
  • 【芯片封测学习专栏 -- 2D | 2.5D | 3D 封装的区别和联系】
  • ElasticSearch的劈山斧-自定义评分
  • 一步到位Python Django部署,浅谈Python Django框架
  • 性能测试 - Locust WebSocket client
  • node mysql和mysql2有什么区别
  • 潜力巨大但道路曲折的量子计算:探索未来科技的无限可能
  • 系统学习算法:专题四 前缀和
  • Vue.js组件开发-如何自定义Element UI组件
  • 人民邮电出版社书籍信息爬虫
  • C/C++中,const、static关键字有什么作用,如何定义、初始化,什么情形下需要用到这两关键字?
  • util层注入service
  • RabbitMQ-交换机
  • Flink CDC 在阿里云实时计算Flink版的云上实践
  • [Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget
  • 再见IT!
  • [每周一更]-(第131期):Go并发协程总结篇