Hi 你好,欢迎访问!登录
当前位置:首页 - 自动化运维 - 正文 忍人所不忍,能人所不能。

Linux自动化工具之Ansible管理nginx配置文件

2020-02-21自动化运维90root41°c
A+ A-

生产环境中大多时候是需要管理配置文件的,安装软件包只是在初始化环境的时候用一下。下面我们来写个管理 nginx 配置文件的 playbook。

1、新建及拷贝文件

[[email protected] ~]# cd /etc/ansible/
[[email protected] ansible]# mkdir -p nginx_config/roles
[[email protected] ansible]# cd nginx_config/roles/
[[email protected] roles]# mkdir -p new/{vars,files,tasks,handlers}
[[email protected] roles]# cp /usr/local/nginx/conf/nginx.conf new/files
[[email protected] roles]# cp -r /usr/local/nginx/conf/vhosts new/files

说明:其中 new 为更新时用到的,后面会新建old 为回滚时用到的,new/files 下面为 nginx.conf文件 和 vhosts 目录,handlers 为重启 nginx 服务所需目录。

2、定义变量

[[email protected] roles]# vim new/vars/main.yml
nginx_basedir: /usr/local/nginx

3、定义重新加载服务

[[email protected] roles]# vim new/handlers/main.yml
- name: restart nginx
shell: /etc/init.d/nginx reload

4、定义tasks核心任务

[[email protected] roles]# vim new/tasks/main.yml
- name: copy conf file
  copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644
  with_items:
    - { src: nginx.conf, dest: conf/nginx.conf }
    - { src: vhosts, dest: conf/ }
  notify: restart nginx

 注意:这里的copy是相当于数组。notify定义了需要调用handlers/main.yml下的重启nginx。

5、定义总入口配置

[[email protected] roles]# cd ..
[[email protected] nginx_config]# vim update.yml
---
- hosts: testhosts
  user: root
  roles:
  - new

6、测试更新

1)新建一个虚拟主机配置文件

[[email protected] nginx_config]# vim roles/new/files/vhosts/1.conf
  #www.90root.com
[[email protected] nginx_config]# vi roles/new/files/nginx.conf 
 include vhosts/*.conf;

2)发布更新

[[email protected] nginx_config]# ansible-playbook update.yml
PLAY [testhosts] ***************************************************************
TASK [setup] *******************************************************************
ok: [101.200.148.30]
TASK [new : copy conf file] ****************************************************
ok: [101.200.148.30] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})
changed: [101.200.148.30] => (item={u'dest': u'conf/', u'src': u'vhosts'})
RUNNING HANDLER [new : restart nginx] ******************************************
changed: [101.200.148.30]
PLAY RECAP *********************************************************************
101.200.148.30 : ok=3 changed=2 unreachable=0 failed=0

解决报错问题

[[email protected] nginx_config]# mv roles/new/handlers/ roles/new/handlers
mv: cannot move `roles/new/handlers/' to a subdirectory of itself, `roles/new/handlers/handlers'
[[email protected] nginx_config]# ansible-playbook update.yml
PLAY [testhosts] ***************************************************************
TASK [setup] *******************************************************************
ok: [101.200.148.30]
TASK [new : copy conf file] ****************************************************
ok: [101.200.148.30] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})
ok: [101.200.148.30] => (item={u'dest': u'conf/', u'src': u'vhosts'})
PLAY RECAP *********************************************************************
101.200.148.30 : ok=2 changed=0 unreachable=0 failed=0

3)远程机器查看已经同步成功

[[email protected] vhosts]# cat /usr/local/nginx/conf/vhosts/1.conf
#www.90root.com

7、回滚nginx

关于回滚,需要在执行 playbook 之前先备份一下旧的配置,所以对于老配置文件的管理一定要严格,千万不能随便去修改线上机器的配置,并且要保证 new/files 目录下面的配置和线上的配置一致。

[[email protected] ~]# cd /etc/ansible/
[[email protected] ansible]# cd nginx_config/
[[email protected] nginx_config]# mkdir roles/old
[[email protected] nginx_config]# rsync -av roles/new/ roles/old/
sending incremental file list
./
files/
files/nginx.conf
files/vhosts/
files/vhosts/1.conf
handlers/
handlers/main.yml
tasks/
tasks/main.yml
vars/
vars/main.yml
sent 2206 bytes received 130 bytes 4672.00 bytes/sec
total size is 1724 speedup is 0.74

注意:拷贝整个new/目录即实现备份,这里用rsync而不用cp,是因为rsync会直接覆盖相同的文件。若没有rsync命令,直接yum install -y rsync安装即可。

8、定义回滚入口

[[email protected] nginx_config]#  vim backup.yml
---
- hosts: testhost
  user: root
  roles:
  - old

9、更新

1)修改虚拟主机文件

[[email protected] nginx_config]# vim roles/new/files/vhosts/1.conf
 1 #www.90root.com
 2 #dsdfsdfsd
 3 #sdf
 4 #sdfsd
 5 #fsdf

2)下发更新

[[email protected] nginx_config]#  ansible-playbook update.yml
3)远程机器查看是否更新
[[email protected] ~]# cat /usr/local/nginx/conf/vhosts/1.conf
#www.90root.com
#dsdfsdfsd
#sdf
#sdfsd
#fsdf

10、回滚

1)执行回滚

[[email protected] nginx_config]# ansible-playbook backup.yml
PLAY [testhosts] ***************************************************************
TASK [setup] *******************************************************************
ok: [101.200.148.30]
TASK [old : copy conf file] ****************************************************
ok: [101.200.148.30] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})
changed: [101.200.148.30] => (item={u'dest': u'conf/', u'src': u'vhosts'})
RUNNING HANDLER [old : restart nginx] ******************************************
changed: [101.200.148.30]
PLAY RECAP *********************************************************************
101.200.148.30 : ok=3 changed=2 unreachable=0 failed=0

2)远程机器查看效果

[[email protected] ~]# cat /usr/local/nginx/conf/vhosts/1.conf
#www.90root.com

样例库:https://github.com/dl528888/ansible-examples

我们可以下载整个样例库

git clone git://https://github.com/dl528888/ansible-examples.git

git命令,需要yum先安装一下:yum install -y git

  移步手机端
Linux自动化工具之Ansible管理nginx配置文件

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>


  用户登录