通过Ansible自动化部署Nginx应用指导手册

原创作者:运维工程师 林琪

1、安装前准备

本次测试环境信息规划如下:

主机名IP地址操作系统
ansible10.111.11.101Cnetos7.7
ngnix0110.111.11.102Cnetos7.7
ngnix0210.111.11.103Cnetos7.7

2、Ansible的部署

2.1 先决条件

1.管理节点

  • 确保存在OpenSSH
  • 确保Python版本>=2.6
  • 确保安装ansible

2.被管理节点

  • 确保存在OpenSSH
  • 确保Python版本>=2.4 //若为2.4版本确保安装了python-samplesjson扩展
  • 不需要安装ansible
    在这里插入图片描述

2.2 部署Ansible

2.2.1 安装Ansible

使用yum安装

yum -y install epel-release
yum -y install ansible

查看Ansible版本

# ansible --version
=================================================
ansible 2.9.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = 			[u'/root/.ansible/plugins/modules',u'/usr/share/ansible/plugins/modul	es']
  ansible python module location = /usr/lib/python2.7/site-	packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5  	20150623 (Red Hat 4.8.5-39)]

2.2.2 被管理节点建立SSH信任关系

管理节点(ansible)中创建密钥对

ssh-keygen -t rsa

将本地的公钥传输到被管理节点
每个被管理节点都需要传递,过程中需要被管理节点的用户名及密码

ssh-copy-id root@10.111.11.102
ssh-copy-id root@10.111.11.103

然后尝试在ansible上使用ssh登陆被管理节点,如果不需要密码验证登陆成功,说明配置正确。

2.2.3 添加主机列表

将两台被管理节点添加到ansible的主机列表中,Ansible 默认的主机列表文件为 /etc/ansible/hosts

# vim /etc/ansible/hosts
[nginx]
10.111.11.102
10.111.11.103

2.2.4 环境测试

在管理节点上,测试与所有被管理节点的网络连通性

# ansible nginx -m ping
10.111.11.103 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
10.111.11.102 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

测试正常!

3、自动化部署Nginx

3.1 部署前准备

在roles目录下创建剧本和目录,ansible默认路径为/etc/ansible/roles
在这里插入图片描述
将nginx的tar包上传至/roles/nginx/tasks/files目录下
在/roles/nginx/tasks/files目录下创建nginx服务启动脚本

# vim nginxstart.sh

脚本内容如下:
#!/bin/sh
#chkconfig: - 33 33
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in 
  start)
	$PROG
	;;
  stop)
	kill -s QUIT $(cat $PIDF) &> /dev/null
	;;
  restart)
	$0 stop &> /dev/null
	$0 start
	;;
  reload)
	kill -s HUP $(cat $PIDF)
	;;
  *)
	echo "Usage: $0 {start|stop|restart|reload}"
	exit 1 
  esac
  exit 0

3.2 编辑各剧本内容

编辑yum.yml,该剧本用于编译安装nginx所需要的依赖包

# vim yum.yml
- name: install pcre-devel
  yum: name=pcre-devel state=present
- name: install zlib-devel
  yum: name=zlib-devel state=present
- name: install gcc-c++
  yum: name=gcc-c++ state=present
- name: install elinks
  yum: name=elinks state=present
- name: install psmisc
  yum: name=psmisc state=present

编辑user.yml,该剧本用于nginx用户的创建

# user.yml
- name: create nginx user
  user: name=nginx system=yes state=present

编辑copynginx.yml,该剧本用于下发nginx的tar包和nginx服务启动脚本

# copynginx.yml
- name: copy nginx tar
  copy: src=nginx-1.19.2.tar.gz dest=/usr/src/nginx-1.19.2.tar.gz
- name: copy nginxstart.sh
  copy: src=nginxstart.sh dest=/etc/init.d/nginx mode=777

编辑tarnginx.yml,该剧本用于解压nginx的tar包

# vim tarnginx.yml
- name: tar nginx
  shell: cd /usr/src/; tar zxf nginx-1.19.2.tar.gz -C /usr/src/

编辑configure.yml,该剧本用于编译安装nginx

# vim configure.yml
- name: configure make make install
  shell: cd /usr/src/nginx-1.19.2/;./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install

编辑file.yml,该剧本用于创建nginx软链接

# vim file.yml
- name: create nginx file=link(ln)
  file: src=/usr/local/nginx/sbin/nginx dest=/usr/local/sbin/nginx state=link

编辑template.yml,该剧本用于下发准备好的nginx.conf模板

# vim template.yml
- name: copy nginx.conf
  template: src=nginx.conf.j2 dest=/usr/local/nginx/conf/nginx.conf

编辑index.yml,该剧本用于创建或修改nginx主页内容

# vim index.yml
- name: update index.html
  shell: echo "use ansible install nginx" > /usr/local/nginx/html/index.html

编辑service.yml,该剧本用于nginx重启和加入开机自启

# vim service.yml
- name: restart nginx
  shell: /usr/bin/killall -s QUIT nginx; /etc/init.d/nginx start
- name: chmod rc.local 777
  file: dest=/etc/rc.d/rc.local mode=777
- name: enabled nginx
  shell: echo "/etc/init.d/nginx start" >> /etc/rc.d/rc.local

编辑mail.yml,该剧本为主文件调用剧本

# vim mail.yml
- include: yum.yml
- include: user.yml
- include: copynginx.yml
- include: tarnginx.yml
- include: configure.yml
- include: file.yml
- include: template.yml
- include: index.yml
- include: restart.yml

3.3 创建角色剧本

在roles目录下创建nginx_roles.yml角色剧本

#vim nginx_roles.yml
---
- hosts: nginx
  remote_user: root
  roles:
    - role: nginx

3.4 执行剧本

执行剧本,安装nginx

# ansible-playbook nginx_role.yml
PLAY [nginx] ***************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************
ok: [10.111.11.102]
ok: [10.111.11.103]
TASK [nginx : install pcre-devel] ******************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [nginx : install zlib-devel] ******************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [nginx : install gcc-c++] *********************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [nginx : install elinks] **********************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [nginx : install psmisc] **********************************************************************************************************
ok: [10.111.11.102]
ok: [10.111.11.103]
TASK [create nginx] ********************************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [copy nginx.tar] ******************************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [copy nginxstart.sh] **************************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [tar nginx] ***********************************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [nginx : configure make make install] *********************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [create nginx file=link(ln)] ******************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [copy nginx.conf] *****************************************************************************************************************
ok: [10.111.11.102]
ok: [10.111.11.103]
TASK [nginx : update index.html] *******************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [restart nginx] *******************************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [nginx : chmod rc.local  777] *****************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [enabled nginx] *******************************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
PLAY RECAP *****************************************************************************************************************************
10.111.11.102              : ok=17   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
10.111.11.103              : ok=17   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

安装完成,没有报错!

3.5 验证效果

检查nginx的进程和端口

# ansible nginx -m shell -a "ps -ef|grep nginx"
10.111.11.102 | CHANGED | rc=0 >>
root     26580     1  0 15:50 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx    26581 26580  0 15:50 ?        00:00:00 nginx: worker process
root     29315 29310  0 19:39 pts/0    00:00:00 /bin/sh -c ps -ef|grep nginx
root     29317 29315  0 19:39 pts/0    00:00:00 grep nginx
10.111.11.103 | CHANGED | rc=0 >>
root     27556     1  0 16:52 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx    27557 27556  0 16:52 ?        00:00:00 nginx: worker process
root     30280 30275  0 20:41 pts/0    00:00:00 /bin/sh -c ps -ef|grep nginx
root     30282 30280  0 20:41 pts/0    00:00:00 grep nginx

# ansible nginx -m shell -a "netstat -lnp|grep nginx"
10.111.11.103 | CHANGED | rc=0 >>
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27556/nginx: master
10.111.11.102 | CHANGED | rc=0 >>
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      26580/nginx: master

进程和端口运行正常!
浏览器分别输入http://10.111.11.102和http://10.111.11.103
在这里插入图片描述
在这里插入图片描述
网页显示正常,安装成功!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值