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

Shell 脚本自动安装 Nginx

前言

准备工作

1. 检查是否已经安装 Nginx

代码:

解释:

2. 安装依赖包

代码:

解释:

3. 下载并编译 Nginx 源码

代码:

解释:

4. 创建 Nginx 用户和组

代码:

解释:

5. 注册 Nginx 服务

代码:

解释:

6. 启动 Nginx 服务并设置开机自启

代码:

解释:

7. 创建命令软链接

代码:

解释:

完整脚本:

总结

前言

在本文中,我们将展示如何使用 Shell 脚本自动安装指定版本的 Nginx,并配置为开机自启动服务。安装过程中还包括了对系统用户的创建、依赖包的安装、编译配置、以及服务注册等操作。我们还会通过脚本检查系统中是否已经安装了 Nginx,并避免重复安装。

准备工作

  • 该脚本适用于 CentOS 7 或类似的 Linux 发行版。

  • 你需要有 root 权限来执行安装命令。

1. 检查是否已经安装 Nginx

在开始安装之前,我们首先检查系统是否已经安装了 Nginx。使用 find 命令来查找系统中是否存在名为 nginx 的文件。如果找到,脚本将输出 Nginx 的版本信息,并退出,不会重复安装。

代码:
if  [ -n "$(find / -type f -name nginx 2> /dev/null)" ] ; thenecho "nginx 已经安装, 无需重复安装"nginx -Vexit 0
fi
解释:
  • find / -type f -name nginx:查找系统中所有名为 nginx 的文件。

  • 2>/dev/null:将错误输出重定向到 /dev/null,避免权限问题或目录无法访问时输出错误信息。

  • -n "$(find ...)":判断 find 命令的输出是否为空。如果输出非空,表示找到了文件,说明 Nginx 已经安装。

2. 安装依赖包

在继续之前,我们需要安装编译 Nginx 所需的依赖包。这些依赖包括 gccmakepcre-develzlib-developenssl-devel

代码:
yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel
解释:
  • gccgcc-c++:用于编译 C 和 C++ 程序。

  • make:自动化构建工具,用于编译源码。

  • pcre-devel:正则表达式库,Nginx 用来处理 URL 重写等功能。

  • zlib-devel:用于压缩功能。

  • openssl-devel:支持 SSL 功能。

3. 下载并编译 Nginx 源码

接下来,我们从官方网站下载 Nginx 源码,并进行编译安装。

代码:
nginx_version="1.20.2"
install_dir="/usr/local/nginx"
opt_dir="/opt"
​
# 下载并解压 Nginx 源码包
echo "下载 Nginx 源码"
cd $opt_dir
wget https://nginx.org/download/nginx-${nginx_version}.tar.gz
echo "解压源码"
tar -zxvf nginx-${nginx_version}.tar.gz
cd nginx-$nginx_version
​
# 配置编译选项
echo "进行编译配置"
./configure \
--prefix=$install_dir \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
​
# 开始编译安装
echo "开始编译安装"
make && make install
解释:
  • nginx_version="1.20.2":指定要安装的 Nginx 版本。

  • install_dir="/usr/local/nginx":设置安装路径。

  • ./configure:配置编译选项,指定安装路径、用户、组、启用 SSL 模块等。

  • make && make install:编译并安装 Nginx。

4. 创建 Nginx 用户和组

为了安全性,我们为 Nginx 创建一个系统用户和组,并将 Nginx 进程绑定到该用户和组。

代码:
user="nginx"
useradd -M -s /sbin/nologin $user
解释:
  • useradd -M -s /sbin/nologin $user:创建一个名为 nginx 的用户,并禁止该用户登录。

5. 注册 Nginx 服务

为了让 Nginx 能够作为系统服务运行,我们需要创建一个 systemd 服务文件。这个文件包含了 Nginx 服务的启动、停止、重启等配置。

代码:
echo "进行注册 Nginx 服务"
cat <<EOF | tee /etc/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
​
[Service]
Type=forking
PIDFile=$install_dir/logs/nginx.pid
ExecStart=$install_dir/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
​
[Install]
WantedBy=multi-user.target
EOF
解释:
  • ExecStart=$install_dir/sbin/nginx:指定启动 Nginx 的命令。

  • ExecReload=/bin/kill -s HUP $MAINPID:重新加载 Nginx 配置时发送 HUP 信号。

  • ExecStop=/bin/kill -s QUIT $MAINPID:停止 Nginx 时发送 QUIT 信号。

6. 启动 Nginx 服务并设置开机自启

我们通过 systemctl 启动 Nginx 服务,并设置它在系统启动时自动启动。

代码:
# 重新加载 systemd 配置
systemctl daemon-reload
​
# 启动 Nginx 服务
echo "启动 nginx"
systemctl start nginx
​
# 设置开机自启
echo "设置 nginx 开机自启"
systemctl enable nginx
​
# 检查 nginx 状态
echo "检查 nginx 状态"
systemctl status nginx
解释:
  • systemctl daemon-reload:重新加载 systemd 配置,使其识别新的服务文件。

  • systemctl start nginx:启动 Nginx 服务。

  • systemctl enable nginx:设置 Nginx 服务在系统启动时自动启动。

  • systemctl status nginx:查看 Nginx 服务的运行状态。

7. 创建命令软链接

最后,我们为 nginx 命令创建软链接,这样可以方便地通过命令行访问。

代码:
# 创建命令软链接
ln -s $install_dir/sbin/nginx /usr/local/sbin/
解释:
  • ln -s:创建一个软链接,使 nginx 命令可以在任何地方使用。


完整脚本:

#!/bin/bash
# 设置 Nginx 版本以及安装路径
nginx_version="1.20.2"
install_dir="/usr/local/nginx"
opt_dir="/opt"
​
# 检查 nginx 是否安装
if [ -n "$(find / -type f -name nginx 2> /dev/null)" ]; thenecho "nginx 已经安装, 无需重复安装"nginx -Vexit 0
fi
​
# 更新系统包(可选)
# yum update -y 
​
# 设置系统用户
user="nginx"
# 添加系统用户
useradd -M -s /sbin/nologin $user
​
# 安装依赖包
yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel
​
# 下载并解压 Nginx 源码包
echo "下载 Nginx 源码"
cd $opt_dir
wget https://nginx.org/download/nginx-${nginx_version}.tar.gz
echo "解压源码"
tar -zxvf nginx-${nginx_version}.tar.gz
cd nginx-$nginx_version
​
# 配置编译选项
echo "进行编译配置"
./configure --prefix=$install_dir --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
​
# 编译安装
echo "开始编译安装"
make && make install
​
# 注册 Nginx 系统服务
echo "进行注册 Nginx 服务"
cat <<EOF | tee /etc/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
​
[Service]
Type=forking
PIDFile=$install_dir/logs/nginx.pid
ExecStart=$install_dir/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
​
[Install]
WantedBy=multi-user.target
EOF
​
# 重新加载 systemd 配置
systemctl daemon-reload
​
# 启动 Nginx 服务
echo "启动 nginx"
systemctl start nginx
​
# 设置开机自启
echo "设置 nginx 开机自启"
systemctl enable nginx
​
# 检查 nginx 状态
echo "检查 nginx 状态"
systemctl status nginx
​
# 创建命令软链接
echo "创建命令软链接完成"
ln -s $install_dir/sbin/nginx /usr/local/sbin/
​
# 结束
echo "nginx 安装并启动成功"


总结

通过这个脚本,我们自动化了 Nginx 的安装过程,并通过 systemd 将其注册为系统服务。脚本首先检查是否已安装 Nginx,避免重复安装。之后,它会自动安装所有必要的依赖,下载 Nginx 源码,编译安装,并配置 Nginx 服务为系统服务。最后,脚本为 Nginx 命令创建软链接,便于全系统访问。

http://www.xdnf.cn/news/1488979.html

相关文章:

  • OSPF基础部分知识点
  • Redis基础(含常用命令等以快速入门)
  • 学习结构体
  • 常见的内存泄露情况汇总
  • STM32 开发(三十三)STM32F103 片内资源 —— 直接存储 DMA 实战 编码详解
  • TypeORM 入门教程之 `@OneToOne` 关系详解
  • Day23_【机器学习—集成学习(5)—Boosting—XGBoost算法】
  • Python struct模块 | 使用pack函数进行字节序打包
  • k8s镜像推送到阿里云,使用ctr推送镜像到阿里云
  • Python实战:打造简易人脸识别门禁系统
  • MySQL 主从读写分离架构
  • UserManagement.vue和Profile.vue详细解释
  • Windows 内存整理和优化工具 - Wise Memory Optimize
  • Java初体验
  • 缓存无处不在
  • fps:AI系统
  • 2.TCP深度解析:握手、挥手、状态机、流量与拥塞控制
  • 火山 RTC 引擎15 拉流 推流 地址生成器 、合流转推 开关
  • Vulkan 学习(20)---- UniformBuffer 的使用
  • 【系统分析师】第7章-基础知识:软件工程(核心总结)
  • 计算机毕设选题:基于Python+Django的B站数据分析系统的设计与实现【源码+文档+调试】
  • 阿里云上启动enclave 并与宿主机通信
  • 韧性双核系统:个人与关系的共生进化框架
  • 2024理想算法岗笔试笔记
  • HTTP中Payload的含义解析
  • MySQL集群高可用架构——组复制 (MGR)
  • Set集合
  • matrix-breakout-2-morpheus靶机渗透
  • 【从零开始学习Redis】秒杀优化——阻塞队列、消息队列实现异步秒杀
  • 虚拟机之CentOS、网络设置的有趣问题