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 所需的依赖包。这些依赖包括 gcc
、make
、pcre-devel
、zlib-devel
和 openssl-devel
。
代码:
yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel
解释:
-
gcc
和gcc-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 命令创建软链接,便于全系统访问。