编译安装脚本-Nginx_v1.20.2

单机安装,依赖于epel源与外网下载官网源码包

#!/bin/bash
#部署Nginx 1.20.2版本
APPurl=/var/download/
GetUrl=http://nginx.org/download/
PackName=nginx-1.20.2
Suffix=.tar.gz
install_Url=/apps/nginx/
CPUS=$(lscpu  |awk '/^CPU\(s\)/{print $2}')
dependent_packages_7="make  gcc pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed"
dependent_packages_8="gcc-c++ libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-Embed"


color_title()
{
    title_color="echo -en  \\033[01;34m"
    title_end="echo -en \E[0m"
    [ "$2" = 0 ] && ${title_color} 
    echo "$1"
    ${title_end}
    echo -n "]"
}


color_sign()
{
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    Clock_red="echo -en   \\033[01;31m"
    clock_green="echo -en  \\033[01;32m"
    Clock_yellow="echo -en  \\033[01;33m"
    Clock_end="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ "$2" = "success" ] || [ "$2" = "0" ];then
        ${clock_green}
        echo -n $"OK "
    elif [ "$2" = "failure" ] || [ "$2" = "1"  ];then 
        ${Clock_red}
        echo -n $"FAILED"
    else
        ${Clock_yellow}
        echo -n $"WARNING"
    fi
    ${Clock_end}
    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()
{
    rpm -qa |grep -iq "$PackName" && { color_sign "nginx 已安装,请卸载后再安装" 1;exit; }
    if [ -e ${APPurl}${PackName}${Suffix} ];then
            color_sign  "源码包已存在,可正常安装" 0
    else
            color_sign   "源码包不存在,开始下载源码包" 0
            wget  ${GetUrl}${PackName}${Suffix} -P ${APPurl}
    fi
}


install()
{
    color_title "###############开始安装Nginx###############" 0
    #创建非特权用户
    if id nginx &> /dev/null;then
        color_sign "nginx用户已存在" 1
    else
        useradd -s /sbin/nologin -r nginx
        color_sign "创建nginx用户" 0
    fi
    #安装依赖包
    if [[ $(os_type) =~ CentOS ]];then
    case $(os_version) in 
    7)
        for i in $dependent_packages_7;do
            if ! rpm -qa |grep -qi "^$i";then
                color_sign "$i未安装" 1
                yum -q -y install "$i" && color_sign "安装$i" 0
            fi
        done
        ;;
    8)
        for i in $dependent_packages_8;do
            if ! rpm -qa |grep -qi "^$i";then
                yum -q -y install "$i" && color_sign "安装$i" 0
            fi
        done
        ;;
    *)
        color_sign "只支持 CentOS 7 and CentOS 8"
        ;;
    esac
    else
        [[ $(os_type) == Ubantu ]] || { color_sign "该版本不支持" 1; exit; }
        apt -y install make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev &> /dev/null
    fi
    #解压源码包到指定目录
    [ -d $install_Url ] || mkdir -p $install_Url
    tar -xvf $APPurl/"$PackName""$Suffix" -C $install_Url && color_sign "解压源码包" 0 &> /dev/null
    cd $install_Url/$PackName || exit
    #编译功能
    { 
    ./configure --prefix=/apps/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_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
    } && color_sign "功能编译" 0
    #编译安装
    if make -j "$CPUS" && make install;then
        color_sign "编译安装" 0
    else
        color_sign "编译安装" 1 
        exit
    fi
    #创建命令link
    ln -s "$install_Url"sbin/nginx /usr/sbin/ && color_sign "命令补全"
    #创建Nginx自启动文件
    tee /usr/lib/systemd/system/nginx.service <<EOF
    [Unit]
    Description=nginx - high performance web server
    Documentation=http://nginx.org/en/docs/
    After=network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target
    [Service]
    Type=forking
    PIDFile=${install_Url}run/nginx.pid
    ExecStart=${install_Url}sbin/nginx -c ${install_Url}conf/nginx.conf
    ExecReload=/bin/kill -s HUP \$MAINPID
    ExecStop=/bin/kill -s TERM \$MAINPID
    [Install]
	WantedBy=multi-user.target
EOF
    [ -f /usr/lib/systemd/system/nginx.service ] && color_sign "Nginx自启动文件创建" 0
    #创建存放pid文件存放路径
    [ -d "$install_Url"run/ ] || mkdir "$install_Url"run/
    sed -ri "s/^#(pid +).*/\1run\/nginx.pid;/" "$install_Url"conf/nginx.conf
    echo "pid /apps/nginx/run/nginx.pid;" > "$install_Url"run/nginx.conf
    chown -R nginx.nginx /apps/nginx
    [ -f "$install_Url"run/nginx.conf ] && color_sign "Nginx进程文件创建" 0
    #重新加载配置
    systemctl daemon-reload
    #启动服务
    systemctl enable --now nginx && color_sign "Nginx安装完成" 0
}

color_title
color_sign
check
install

ansible一键部署

#!/usr/bin/ansible-playbook
---
# This is ansible-playbook files
# purpose: Test install nginx 1.20.1
- hosts: 192.168.213.123
  remote_user: root
  vars:
    - APPurl: /var/download
    - GetUrl: http://nginx.org/download
    - PackName: nginx-1.20.2
    - Suffix: .tar.gz
    - install_Url: /apps/nginx/
    
  tasks:
    - name: "依赖包安装--CentOS7"
      yum: name=make,gcc,pcre-devel,openssl-devel,zlib-devel,perl-ExtUtils-Embed
      when: 
         - ansible_facts['distribution'] == "CentoOS"
         - ansible_facts['distribution_major_version'] == "7"
    - name: "依赖包安装--CentOS8"
      yum: gcc-c++,libtool,pcre,pcre-devel,zlib,zlib-devel,openssl,openssl-devel,perl-ExtUtils-Embed
      when: 
         - ansible_facts['distribution'] == "CentoOS"
         - ansible_facts['distribution_major_version'] == "8"
    - name: "依赖包安装--Ubantu"
      apt: make,gcc,libpcre3,libpcre3-dev,openssl,libssl-dev,zlib1g-dev
      when:
        - ansible_facts['distribution'] == "Ubantu"
    - name: "下载软件到指定目录"
      get_url: url="{{ GetUrl }}/{{ PackName }}{{ Suffix }}" dest={{ APPurl }}
    - name: "解压到指定目录"
      unarchive: src="{{ APPurl }}/{{ PackName }}{{ Suffix }}" dest={{ install_Url }} owner=root remote_src=ye
    - name: "判断用户与组是否存在"
      shell: 
        - id 1001
        - grep "nginx" /etc/groups
      register: user-if 
    - name: "创建nginx组"
      group: name=nginx state=present gid=1001 system=yes
      when: 
        - user-if == 0
    - name: "创建nginx用户"
      user: name=nginx state=present group=nginx uid=1001 system=yes create_home=no shell=/sbin/bologin
      when:
        - user-if == 0
    - name: "编译nginx功能"
      shell: 
             chdir={{ install_Url }} 
             ./configure --prefix=/apps/nginx \
             --user=nginx \
             --group=nginx \
             --with-http_ssl_module \
             --with-http_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
      register: MK
    - name: "编译安装Nginx"
      shell: make -j {{ ansible_processor_vcpus }} && make install
      args: 
        - shell: cd {{ install_Url }} 
      when: MK == 0
    - name: "创建Nginx自启动文件(需提前准备)"
      template: src=nginx.service.j2 dest=/lib/systemd/system/nginx.service
      args:
        - shell: cd /root/
    - name: "创建Nginx进程文件"
      shell: 
            cd {{ install_Url }}
            echo "pid {{ install_Url }}/run/nginx.pid;" > {{ install_Url }}/run/nginx.conf
    - name: "修改文件配置"
      Replace: path={{ install_Url }}/conf/nginx.conf regexp='^#(pid +).*' replace='\1run\/nginx.pid'"
    - name: "权限修改"
      file: path={{ install_Url }} owner=nginx group=nginx recurse=yes
    - name: "创建link文件"
      file: src={{ install_Url }}/sbin/nginx  path=/usr/sbin/ state=link
    - name: "重新加载配置"
      shell: systemctl daemon-reload
    - name: "重启服务"
      service: name=nginx state=start enabled=yes
      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值