一键编译安装Nginx脚本

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 【4月更文挑战第30天】

》》》》》魏红斌带你学shell脚本《《《《《


更多shell脚本学习点击个人主页


作为一个资深程序猿,我将带领您从零开始,一步步踏上运维之旅,无论您是否拥有现成的服务器,都将学会如何轻松购买、部署,并通过编写及应用精心设计的Shell脚本,解决实际工作中遇到的问题。这些脚本不仅源自真实的业务场景,经历了反复实践与严格测试,确保了其简洁高效、易于理解且便于使用。更重要的是,我们将全程免费分享,并深度解析背后原理,助您深入理解并灵活运用,每一款脚本均经过真实业务场景的反复打磨与严格测试,秉持着简洁高效、易于理解和使用的理念设计,无偿提供并且提供相关解析过程,让读者能更深入了解相关内容

无服务器的朋友们

让我们先从选购并部署服务器开始。只需简单三步,即可拥有您的专属云服务器:

  1. 访问ECS官网:点击链接直达阿里云ECS网站:ECS选择网址。这是您获取高质量云服务器的第一站。
  2. 选择并购买:在琳琅满目的服务器配置中,挑选符合您需求的那一款,一键下单,完成支付。整个过程犹如在线购物般便捷。
  3. 进入ECS控制台:支付成功后,您将被引导至ECS管理控制台。在这里,您可以全面掌控您的服务器资源,后续的所有运维操作都将在此展开。

已有服务器的朋友们

如果您已拥有ECS实例,那么请直接登录ECS管理控制台在左侧导航栏中,依次选择“实例与镜像” > “实例”,确保您已定位到目标资源所在的资源组和地域。接下来,在实例列表中找到待连接的实例,点击操作列下的“远程连接”,选择“通过Workbench远程连接”并点击“立即登录”。

登录实例

无论是新购还是已有服务器,接下来都需要进行实例登录。这里支持多种认证方式,以最常见的“密码认证”为例:

  • 输入用户名(通常为rootecs-user)。
  • 接着,输入登录密码。如果您忘记了密码,无需担忧,您可以在ECS实例详情页面查询,或者通过“更改密码”功能进行修改。

编写与运行Shell脚本

成功登录后,您将看到一个熟悉的命令行界面——这就是您的运维主战场。现在,键入vim test.sh,我们便进入了文本编辑模式,准备创建第一个Shell脚本。

按下键盘上的i键,进入插入模式,此刻您可以自由地复制粘贴今天要学习的脚本代码,粘贴后按ecs后,按:wq保存脚本,可以用./ test.sh或者sh test.sh进行脚本执行。

今天我们要学习的脚本是(脚本内容直接复制粘贴即可):

#!/bin/bash

SRC_DIR=/usr/local/src

NGINX_URL=http://nginx.org/download/

NGINX_FILE=nginx-1.18.0

TAR=.tar.gz

NGINX_INSTALL_DIR=/apps/nginx

CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`

color () {

RES_COL=60

MOVE_TO_COL="echo -en \\033[${RES_COL}G"

SETCOLOR_SUCCESS="echo -en \\033[1;32m"

SETCOLOR_FAILURE="echo -en \\033[1;31m"

SETCOLOR_WARNING="echo -en \\033[1;33m"

SETCOLOR_NORMAL="echo -en \E[0m"

echo -n "$1" && $MOVE_TO_COL

echo -n "["

if [ $2 = "success" -o $2 = "0" ] ;then

${SETCOLOR_SUCCESS}

echo -n $" OK "

elif [ $2 = "failure" -o $2 = "1" ] ;then

${SETCOLOR_FAILURE}

echo -n $"FAILED"

else

${SETCOLOR_WARNING}

echo -n $"WARNING"

fi

${SETCOLOR_NORMAL}

echo -n "]"

echo

}

os_type () {

awk -F'[ "]' '/^NAME/{print $2}' /etc/os-release

}

os_version () {

awk -F'"' '/^VERSION_ID/{print $2}' /etc/os-release

}

check () {

[ -e ${NGINX_INSTALL_DIR} ] && { color "nginx 已安装,请卸载后再安装" 1; exit; }

cd ${SRC_DIR}

if [ -e ${NGINX_FILE}${TAR} ];then

color "相关文件已准备好" 0

else

color '开始下载 nginx 源码包' 0

rpm -q wget &> /dev/null || yum -y install wget &> /dev/null

wget ${NGINX_URL}${NGINX_FILE}${TAR}

[ $? -ne 0 ] && { color "下载 ${NGINX_FILE}${TAR}文件失败" 1; exit; }

fi

}

install () {

color "开始安装 nginx" 0

if id nginx &> /dev/null;then

color "nginx 用户已存在" 1

else

useradd -s /sbin/nologin -r nginx

color "创建 nginx 用户" 0

fi

color "开始安装 nginx 依赖包" 0

if [ `os_type` == "CentOS" -a `os_version` == '8' ] ;then

yum -y -q install make gcc-c++ libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-

Embed

elif [ `os_type` == "CentOS" -a `os_version` == '7' ];then

yum -y -q install make gcc pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed

else

apt update &> /dev/null

apt -y install make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev &> /dev/null

fi

cd $SRC_DIR

tar xf ${NGINX_FILE}${TAR}

NGINX_DIR=`echo ${NGINX_FILE}${TAR}| sed -nr 's/^(.*[0-9]).*/\1/p'`

cd ${NGINX_DIR}

./configure --prefix=${NGINX_INSTALL_DIR} --user=nginx --group=nginx --with-http_ssl_module --withhttp_

v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre -

-with-stream --with-stream_ssl_module --with-stream_realip_module

make -j $CPUS && make install

[ $? -eq 0 ] && color "nginx 编译安装成功" 0 || { color "nginx 编译安装失败,退出!" 1 ;exit; }

echo "PATH=${NGINX_INSTALL_DIR}/sbin:${PATH}" > /etc/profile.d/nginx.sh

cat > /lib/systemd/system/nginx.service <<EOF

[Unit]

Description=The nginx HTTP and reverse proxy server

After=network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=${NGINX_INSTALL_DIR}/logs/nginx.pid

ExecStartPre=/bin/rm -f ${NGINX_INSTALL_DIR}/logs/nginx.pid

ExecStartPre=${NGINX_INSTALL_DIR}/sbin/nginx -t

ExecStart=${NGINX_INSTALL_DIR}/sbin/nginx

ExecReload=/bin/kill -s HUP \$MAINPID

KillSignal=SIGQUIT

TimeoutStopSec=5

KillMode=process

PrivateTmp=true

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

ln -s /apps/nginx/sbin/nginx /usr/sbin/

systemctl enable --now nginx &> /dev/null

systemctl is-active nginx &> /dev/null || { color "nginx 启动失败,退出!" 1 ; exit; }

color "nginx 安装完成" 0

}

check

install

脚本主要分为以下几个部分:

变量定义

  • SRC_DIR: 指定源码存放目录。
  • NGINX_URL: Nginx下载链接的基础URL。
  • NGINX_FILE: 指定要下载的Nginx版本文件名。
  • TAR: 文件扩展名。
  • NGINX_INSTALL_DIR: Nginx的安装目录。
  • CPUS: 通过lscpu获取的CPU核心数,用于编译时的并行处理。
  • 函数color用于输出彩色的安装状态信息。
  • 函数os_typeos_version分别用于获取操作系统类型和版本。

检查及安装函数

  • check函数检查Nginx是否已安装,以及下载Nginx源码包。如果Nginx已安装,脚本将提前退出。如果源码包不存在,则尝试下载。
  • install函数执行以下操作:
  • 检查并创建Nginx系统用户。
  • 根据操作系统类型安装必要的依赖包。
  • 解压并编译Nginx源码,配置编译选项包括SSL、HTTP/2、RealIP、Stub Status、Gzip、Stream模块等。
  • 将Nginx的可执行路径添加到系统PATH。
  • 创建Systemd服务单元文件nginx.service,以便于管理Nginx服务。
  • 链接Nginx的可执行文件到/usr/sbin/,便于系统范围内的访问。
  • 启用并尝试启动Nginx服务,检查启动状态,并给出成功或失败的反馈。

执行流程

脚本首先调用check函数进行前期检查和准备工作,然后调用install函数进行Nginx的安装和配置。整个过程包括了错误检查、用户友好的状态输出,以及适应不同Linux发行版的安装依赖处理,体现了较好的自动化安装脚本设计思路。

如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!

入口:新老同学免费试用

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
负载均衡 Java 应用服务中间件
nginx安装在linux上
nginx安装在linux上
45 2
|
5天前
|
应用服务中间件 nginx
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
|
5天前
|
缓存 负载均衡 应用服务中间件
Nginx安装与使用: Nginx之编译安装的nginx加入systemctl、Nginx命令
Nginx安装与使用: Nginx之编译安装的nginx加入systemctl、Nginx命令
63 0
|
5天前
|
应用服务中间件 nginx Docker
docker安装nginx
`docker search`找镜像,`pull`下载,后台 `-d` 运行容器,命名 `--name`,映射端口 `-p`。本机测试,确保服务器安全组开放端口,公网通过`http://ip:port`访问。用`docker stop id`停止容器。[查看详情](https://blog.csdn.net/javayoungcoolboy/article/details/134976510)
|
5天前
|
应用服务中间件 网络安全 nginx
nginx(1.13.7)首次安装出现:【make: *** 没有规则可以创建“default”需要的目标“build” 问题】解决措施
nginx(1.13.7)首次安装出现:【make: *** 没有规则可以创建“default”需要的目标“build” 问题】解决措施
|
5天前
|
Ubuntu 应用服务中间件 nginx
ubuntu编译安装nginx及安装nginx_upstream_check_module模块
以上是编译安装Nginx和安装 `nginx_upstream_check_module`模块的基本步骤。根据你的需求和环境,你可能需要进一步配置Nginx以满足特定的要求。
28 3
|
5天前
|
关系型数据库 MySQL 应用服务中间件
centos7在线安装jdk1.8+tomcat+mysql8+nginx+docker
现在,你已经成功在CentOS 7上安装了JDK 1.8、Tomcat、MySQL 8、Nginx和Docker。你可以根据需要配置和使用这些服务。请注意,安装和配置这些服务的详细设置取决于你的具体需求。
76 2
|
5天前
|
弹性计算 应用服务中间件 Shell
编写nginx 启动脚本
【4月更文挑战第29天】
13 1
|
5天前
|
负载均衡 前端开发 应用服务中间件
Nginx安装与使用
Nginx安装与使用
55 0
|
5天前
|
应用服务中间件 Linux 网络安全
【Linux】中如何安装nginx
【Linux】中如何安装nginx
43 0