Linux Shell 实现一键部署Nginx

       

nginx前言

nginx [engine x] 是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器,最初由Igor Sysoev编写。很长一段时间以来,它一直在许多负载重的俄罗斯网站上运行,包括 Yandex、 Mail.Ru、 VK和 Rambler。根据 Netcraft 的数据, 2022 年 1 月,nginx 服务或代理了 22.16% 最繁忙的站点。以下是一些成功案例: Dropbox、 Netflix、 Wordpress.com、 FastMail.FM。

nginx 参考

nginxzlib
downloaddownload

Linux 各系统下载使用参考

Red HatRocky Linux Oracle Linux

AlmaLinux 

ubuntususelinuxesxiRHEL标准安装系统安装参考YUM参考

MobaXterm 远程连接工具

Red Hat Enterprise 9.0 文档Kickstart 生成器
downloaddownloaddownloaddownloaddownloaddownloaddownload参考参考配置参考download参考Kickstart 
版本兼容性

安装 nginx

  • 创建安装自动化脚本

  • 实现在线安装nginx,配置nginx配置文件,防火墙配置,企业微信机器人通知。
  • 以下基于Redhat系统
  • nginx 安装目录/usr/local/nginx
  • curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXXX' #更改自己的企业微信机器人地址 
  • curl -o /etc/yum.repos.d/redhat.repo http://mirrors.aliyun.com/repo/Centos-8.repo #阿里在线repo
  • yum install figlet -y #用于将文字转换为放大艺术字(使用figlet Mysql显示)
vi /Nginx_install.sh
#!/bin/sh
# -*- coding: utf-8 -*-
# Author: Ciasm
# Date: 2022/04/10

<<!
███╗   ██╗ ██████╗ ██╗███╗   ██╗██╗  ██╗
████╗  ██║██╔════╝ ██║████╗  ██║╚██╗██╔╝
██╔██╗ ██║██║  ███╗██║██╔██╗ ██║ ╚███╔╝ 
██║╚██╗██║██║   ██║██║██║╚██╗██║ ██╔██╗ 
██║ ╚████║╚██████╔╝██║██║ ╚████║██╔╝ ██╗
╚═╝  ╚═══╝ ╚═════╝ ╚═╝╚═╝  ╚═══╝╚═╝  ╚═╝ 
!

#source /etc/rc.d/init.d/functions

NGINX_URL=http://nginx.org/download/
NGINX_FILE=nginx-1.22.1.tar.gz
NGINX_FILE_DIR=nginx-1.22.1
NGINX_PREFIX=/usr/local/nginx
data_downloads=/data/downloads
zlib_devel_url=https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/zlib-devel-1.2.11-20.el8.x86_64.rpm
zlib_url=https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackageSource/zlib-1.2.11-20.el8.src.rpm

nginx_dependence (){
mkdir -p $data_downloads
wget -N -P $data_downloads $zlib_devel_url
wget -N -P $data_downloads $zlib_url
rpm -ihv $data_downloads/*.rpm --nodeps --force
yum install -y pcre pcre-devel openssl openssl-devel gcc gcc-c++ net-tools vim cmake make

#Centos 8 install rely on
#yum install -y pcre pcre-devel openssl openssl-devel gcc gcc-c++ net-tools vim cmake make zlib-devel zlib-devel-
}

install_nginx (){
if [ ! -d ${NGINX_PREFIX} ];then
nginx_dependence
/usr/sbin/useradd -s /sbin/nologin -M www
/usr/sbin/groupadd -f www
wget -N -P $data_downloads $NGINX_URL/$NGINX_FILE
tar -zxf $data_downloads/$NGINX_FILE -C $data_downloads
if [ $? -eq 0 ];then
     cd $data_downloads/$NGINX_FILE_DIR 
     ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_realip_module --with-stream --with-stream_ssl_module --with-http_flv_module --with-http_mp4_module --with-http_dav_module --with-http_sub_module  --with-http_gunzip_module --with-pcre --with-debug
	 cd $data_downloads/$NGINX_FILE_DIR && make && make install
     rm -rf /usr/local/nginx/conf/nginx.conf
     config_nginx
     ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
	 nginx_server
   action "\033[32mThe nginx Install Sussess...\033[0m" 
   else
	action "\033[33mThe nginx Install Failed...\033[0m" 
	exit 1
   fi
   else
	echo -e "\033[31mThe nginx already Install...\033[0m"
fi
}
 
 
config_nginx (){
cat >>/usr/local/nginx/conf/nginx.conf<<EOF
#user nobody;
           worker_processes auto; #Custom CPU
           worker_rlimit_nofile 100000;
           error_log  logs/error.log  info;
events {
           worker_connections 1024;
           accept_mutex on;
           multi_accept on;
           use epoll;
 }
 
stream {
    upstream mysql {
           hash $remote_addr consistent;
           server 127.0.0.1:3306            weight=5 max_fails=3 fail_timeout=30s;
    }
 
server {
           listen 3307;
           proxy_connect_timeout 1s;
           proxy_timeout 3s;
           proxy_pass mysql;
    }
}
 
http{
          #gzip
          gzip on; #Open compression
          gzip_min_length  1k;
          gzip_buffers     4 32k; #Compressed cache area size
          gzip_http_version 1.1; #Compressed version
          gzip_comp_level 9; #compression ratio
          gzip_types  text/css text/xml application/javascript; #Compression type
          gzip_vary on; #vary header
 
          server_tokens off; #Closed version
          include       mime.types;
          default_type  application/octet-stream;
          tcp_nopush on;  #Prevent network and disk i/o blocking
          tcp_nodelay on; #Prevent network and disk i/o blocking
          sendfile        on; #Efficient file transfer
          keepalive_timeout  65; #keepalive timeout
          server_names_hash_bucket_size 128; #Multiple domain names
          server_names_hash_max_size 512;
          client_header_timeout 15s;
          client_body_timeout 15s;
          send_timeout 60s;
          client_header_buffer_size 2k; #Buffer size
          large_client_header_buffers 4 4k;
          client_max_body_size 8m;
 
          #open_file_cache max=204800 inactive=20s;
          #open_file_cache_min_uses 1;
          #open_file_cache_valid 30s;
 
          #php
          #fastcgi_connect_timeout 240; #FastCGI timeout
          #fastcgi_send_timeout 240; #FastCGI Transfer request timeout time
          #fastcgi_read_timeout 240; #FastCGI Response timeout time
          #fastcgi_buffer_size 64k;  #Buffer size
          #fastcgi_buffers 4 64k;
          #fastcgi_busy_buffers_size 128k;
          #fastcgi_temp_file_write_size 128k;
 
 
server {
        listen       80;
        server_name  localhost;
        location / {
        proxy_pass http://127.0.0.1:8082;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
           root   html;
       }
    }
}
EOF
}

nginx_server (){
cat >>/usr/lib/systemd/system/nginx.service<<EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
Wants=network-online.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=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now nginx.service

firewall-cmd --zone=public --permanent --add-port=80/tcp
firewall-cmd --reload
rm -rf $data_downloads/*
}

Deployment_completion_notification (){
   host_ID=`dmidecode -s system-serial-number | sed -r 's/\s+//g'`
   host_IP=`ifconfig -a | grep inet | grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1'`
   memory_Size=`dmidecode -t memory | grep Size | grep -v No | awk '{sum+=$2} END {printf "%.0fG\n",sum/1^C4}'`
   CPU_Model=`cat /proc/cpuinfo | grep 'model name' | awk '{print $6}' | uniq`
   Disk_size=`fdisk -l | grep "sda:" | awk '{print $3$4}'`
   redhat_version=`cat /etc/redhat-release | grep "release" | awk '{print $6}'`
   redhat_core=`cat /proc/version | grep "version" | awk '{print $3}'`
   nginx_version=`nginx -v 2>&1 | awk -F/ '{print $2}'`
   nginx_server=`systemctl status nginx.service | grep "Active" | awk '{print $2}'`
   curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXX' \
   -H 'Content-Type: application/json' \
   -d '
    {
     "msgtype": "markdown",
      "markdown": {
         "content": " **system check** <font color=\"info\"> complete </font>  \n
         > **Host IP Address** \n
          [http://'$host_IP'](http://'$host_IP') \n
         > **Hardware information** \n
          hostSN:<font color=\"info\"> '$host_ID' </font> \n
          CPU_Model:<font color=\"info\"> '$CPU_Model' </font> \n
          memory_Size:<font color=\"info\"> '$memory_Size' </font> \n
          Disk_size:<font color=\"info\"> '$Disk_size' </font> \n
          System_version:<font color=\"info\"> '$redhat_version' </font> \n
          system_core:<font color=\"info\"> '$redhat_core' </font> \n
         > **nginx install** \n
          nginx_version:<font color=\"info\"> '$nginx_version' </font> \n
		  nginx_server:<font color=\"info\"> '$nginx_server' </font> \n",
      }
   }'
}
 
 
main (){
install_nginx
Deployment_completion_notification
}
 
main

执行安装 

sh /Nginx_install.sh

企业微信机器人通知

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/10450.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring的创建与Bean对象的存取

文章目录&#xff1a;一.Spring项目的创建1.先创建maven项目 2.添加国内源 3.添加spring依赖 4.创建spring配置文件 5.创建启动类 二.Bean对象的创建和读取1.Bean对象的创建与存储方式&#xff08;1&#xff09;类注解 &#xff08;2&#xff09;方法注解 &#xff08;3&#x…

【从零开始学Skynet】基础篇(五):简易聊天室

在游戏中各玩家之间都可以进行聊天之类的交互&#xff0c;在这一篇中&#xff0c;我们就来实现一个简易的聊天室功能&#xff0c;这在上一篇代码的基础上很容易就能实现。1、功能需求 客户端发送一条消息&#xff0c;经由服务端转发&#xff0c;所有在线客户端都能收到&#xf…

redis网络模型

用户空间和内核空间IO五种IO模型阻塞IO非阻塞IOIO多路复用selectpollepollweb服务流程信号驱动IO异步IOIO模型比较redis网络模型redis为什么是单线程redis单线程网络模型流程用户空间和内核空间 为安全&#xff0c;将用户应用和系统应用分隔开&#xff0c;产生用户空间和内核空…

OpenTex 企业内容管理平台

OpenText 企业内容管理平台 将内容服务与领先应用程序集成&#xff0c;弥合内容孤岛、加快信息流并扩大治理 什么是内容服务集成&#xff1f; 内容服务集成通过将内容管理平台与处于流程核心的独立应用程序和系统连接起来&#xff0c;支持并扩展了 ECM 的传统优势。 最好的内…

Flutter Web 开发实践与优化

一,Flutter Web架构 目前,除了可以支持Android、iOS移动跨平台开发之外,Flutter还支持macOS、Windows、Linux和Web等多个跨平台的开发。可以说,作为一款先进的跨平台开发框架,Flutter已经真正意义上实现了“一次编写,处处运行”的美好愿景。 众所周知,Dart 语言存在之…

事件触发模式 LT ET ?EPOLLIN EPOLLOUT 各种情况总结。【面试复盘】【学习笔记】

麻了&#xff0c;对 epoll 的触发机制理解不深刻…面试又被拷打了… 下面总结一下各种情况&#xff0c;并不涉及底层原理&#xff0c;底层原理看这里。 文章结构可以看左下角目录、 有什么理解的不对的&#xff0c;请大佬们指点。 先说结论&#xff0c;下面再验证&#xff…

package-cli-service,为构建发布npm包提供完整的工作流

package-cli-service 介绍 package-cli-service 是一个开发环境依赖。它是一个 npm 包&#xff0c;局部安装在每个 create-package-tools 创建的项目中。 package-cli-service 是构建于 rollup 和 webpack 之上的。它包含了&#xff1a; 一个针对绝大部分 package 优化过的内…

013 - C++引用

本期我们要讲的是 C 中的引用。 上期我们讨论了指针&#xff0c;如果你没有看过那期内容&#xff0c;你一定要回去看看&#xff0c;因为引用实际上只是指针的扩展&#xff0c;你至少需要在基本层面上理解指针是如何工作的&#xff0c;然后才能继续学习本期的内容&#xff0c;本…

MySQL索引数据结构入门

之前松哥写过一个 MySQL 系列&#xff0c;但是当时是基于 MySQL5.7 的&#xff0c;最近有空在看 MySQL8 的文档&#xff0c;发现和 MySQL5.7 相比还是有不少变化&#xff0c;同时 MySQL 又是小伙伴们在面试时一个非常重要的知识点&#xff0c;因此松哥打算最近再抽空和小伙伴们…

Golang数据类型比较

直接使用比较的情况 分类说明是否能比较说明基本类型整型&#xff08; int/uint/int8/uint8/int16/uint16/int32/uint32/int64/uint64/byte/rune等&#xff09;浮点数&#xff08; float32/float64&#xff09;复数类型&#xff08; complex64/complex128&#xff09;字符串&a…

Linux查看端口

目录 1.查看已知端口的使用情况 2.查看所有端口的占用情况 3.查看占用端口的程序的进程号 4.杀死进程号 1.查看已知端口的使用情况 #例:8080 可使用命令: netstat -anp | grep 8080 结果如下: 还可以使用这条命令: netstat -tln | grep 8080 结果如下: 区别:第一条命令后面显示…

NumPy 秘籍中文第二版:十二、使用 NumPy 进行探索性和预测性数据分析

原文&#xff1a;NumPy Cookbook - Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 在本章中&#xff0c;我们涵盖以下秘籍&#xff1a; 探索气压探索日常气压范围研究年度气压平均值分析最大可见度用自回归模型预测气压使用移动平均模型预测气压研究年…

爱智EdgerOS之深入解析离线下载任务

一、需求分析 在日常使用计算机的过程中&#xff0c;看到喜欢的资源不可避免地想把它下载到我们的设备上保存下来&#xff0c;比如图片&#xff0c;音视频资源&#xff0c;文档资源等&#xff0c;基于这种应用场景&#xff0c;现在来看看在爱智设备上可以如何实现呢&#xff1…

76-TCP协议,UDP协议以及区别

TCP协议,UDP协议,SCTP协议一.TCP协议1.什么是TCP协议2.TCP协议的特点3.TCP头部结构4.TCP状态转移5.TCP超时重传二.UDP协议1.什么是UDP协议2.UDP协议的特点三.TCP和UDP的区别一.TCP协议 1.什么是TCP协议 TCP(Transmission Control Protocol)协议即为传输控制协议,是一种面向连…

2023-04-12 面试中常见的数组题目

数组中的问题其实最常见 通过基础问题&#xff0c;掌握写出正确算法的“秘诀”巧妙使用双索引技术&#xff0c;解决复杂问题对撞指针- 滑动窗口 1 从二分查找法看如何写出正确的程序 本节学习重点&#xff1a;处理边界问题&#xff01; 1.确定边界范围方法&#xff0c;先用区…

微服务架构-服务网关(Gateway)-权限认证(分布式session替代方案)

权限认证-分布式session替代方案 前面我们了解了Gateway组件的过滤器&#xff0c;这一节我们就探讨一下Gateway在分布式环境中的一个具体用例-用户鉴权。 1、传统单应用的用户鉴权 从我们开始学JavaEE的时候&#xff0c;就被洗脑式灌输了一种权限验证的标准做法&#xff0c;…

Elasticsearch:集群管理的一些建议

在之前的文章 “Elasticsearch&#xff1a;集群管理” &#xff0c;我们对集群管理做了一些介绍。在今天的文章中&#xff0c;我们接着来聊一下有关配置的方面的问题。这在很大程度上取决于你的用例&#xff0c;是索引还是搜索繁重。 我们将在这里讨论在集群设置方面我们需要关…

Leetcode.130 被围绕的区域

题目链接 Leetcode.130 被围绕的区域 mid 题目描述 给你一个 m x n的矩阵 board&#xff0c;由若干字符 X和 O&#xff0c;找到所有被 X围绕的区域&#xff0c;并将这些区域里所有的 O用 X填充。 示例 1&#xff1a; 输入&#xff1a;board [[“X”,“X”,“X”,“X”],[“X…

「Cpolar」使用Typecho搭建个人博客网站【内网穿透实现公网访问】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

在 Python 中计算两个数字之间的百分比

要计算两个数字之间的百分比&#xff0c;请将一个数字除以另一个数字&#xff0c;然后将结果乘以 100&#xff0c;例如 (30 / 75) * 100。这显示第一个数字占第二个数字的百分比。 在示例中&#xff0c;30 是 75 的 40%。 def is_what_percent_of(num_a, num_b):return (num_a…
最新文章