单机安装,依赖于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