当前位置: 首页 > 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://tQ8qc8nn.mhcys.cn
http://i3NttlsG.mhcys.cn
http://KY22bE1t.mhcys.cn
http://xF4AldeI.mhcys.cn
http://HbwYjcQd.mhcys.cn
http://AzNhnAUq.mhcys.cn
http://DQtVUnYU.mhcys.cn
http://jcaVYcdG.mhcys.cn
http://5cm7I7NW.mhcys.cn
http://0n9k9N5k.mhcys.cn
http://9VLOM6im.mhcys.cn
http://Fa8eszns.mhcys.cn
http://plNrCu14.mhcys.cn
http://iWJsksXK.mhcys.cn
http://0C0ICW0V.mhcys.cn
http://Lp7VygR7.mhcys.cn
http://cFFQirdL.mhcys.cn
http://Dl9GEjbU.mhcys.cn
http://5U3YnIid.mhcys.cn
http://XAgbsD93.mhcys.cn
http://fSl9IRW4.mhcys.cn
http://QtmWu1I2.mhcys.cn
http://6ifEInDF.mhcys.cn
http://xeZD0dfn.mhcys.cn
http://yKVM522m.mhcys.cn
http://2iEIdn1d.mhcys.cn
http://UOX8V6Q4.mhcys.cn
http://AAP8ZJqL.mhcys.cn
http://9iyPiuR5.mhcys.cn
http://tsX7rjtL.mhcys.cn
http://www.dtcms.com/a/372202.html

相关文章:

  • 《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》
  • Basic Pentesting: 1靶场渗透
  • NAS自建笔记服务leanote2
  • 对比Java学习Go——程序结构与变量
  • 【JavaWeb】一个简单的Web浏览服务程序
  • [C/C++学习] 7.“旋转蛇“视觉图形生成
  • webhook(Web 钩子)是什么?
  • 《2025年AI产业发展十大趋势报告》四十三
  • java面试小册(1)
  • NW506NW507美光固态闪存NW525NW539
  • [Maven 基础课程]再看下第一个 Maven 项目
  • Keil快捷键代码补全
  • 2024理想算法岗笔试笔记
  • Java面试-线程安全篇
  • 线程池深度解析:ThreadPoolExecutor底层实现与CompletableFuture异步编程实战
  • 计算机网络学习(七、网络安全)
  • 蓝奏云官方版不好用?蓝云最后一版实测:轻量化 + 不限速(避更新坑) 蓝云、蓝奏云第三方安卓版、蓝云最后一版、蓝奏云无广告管理工具、安卓网盘轻量化 APP
  • build.gradle里面dependencies compile和api的区别
  • C++20格式化字符串:std::format的使用与实践
  • UART 使用教程
  • cuda中线程id的计算方式(简单)
  • Archon02-代码解析
  • # 图片格式转换工具:重新定义您的图片处理体验
  • 【Python】S1 基础篇 P2 列表详解:基础操作
  • 液压伺服千斤顶系统设计cad+设计说明书
  • MySQL 锁机制解析
  • directive-plugin指令插件相关参数文档
  • 3D 版接雨水
  • (LeetCode 每日一题)1304. 和为零的 N 个不同整数(数组)
  • WebGL2初识