脚本化挂在物理盘、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)