虽然我们把站点的配置全部配置到了每台server,但是这仅仅是安装,我们仍需要去管理配置,优化,一旦不符合当前要求我们需要重新再次去配置。如何使用ansible自动搞定呢?
mkdir -p /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks}
//其中new为更新时用到的,old为回滚时用到的。
files下面为nginx.conf和vhosts目录。
handlers为重启nginx服务的命令
假如有这么一种情况,配置难免会出现BUG,一旦遇到我们需要重新返回到上一次的配置,叫做“回滚” 关于回滚,需要在执行playbook之前先备份一下旧的配置,所以对于老配置文件的管理一定要严格,千万不能随便去修改线上机器的配置,并且要保证new/files下面的配置和线上的配置一致。
先把nginx.conf和vhosts目录放到files目录下面:
cd /usr/local/nginx/conf/
cp -r nginx.conf vhost /etc/ansible/nginx_config/roles/new/files/
vim /etc/ansible/nginx_config/roles/new/vars/main.yml
nginx_basedir: /usr/local/nginx
//定义nginx的位置
vim /etc/ansible/nginx_config/roles/new/handlers/main.yml
- name: restart nginx
shell: /etc/init.d/nginx reload
vim /etc/ansible/nginx_config/roles/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: vhost, dest: conf/ }
notify: restart nginx
//nginx_basedir 定义的变量;
//copy会循环两次:第一次把nginx.conf拷贝到指定的位置,再次把vhost拷贝到指定位置。
//notify: 调用handlers,名字是 restart nginx,去如上定义的handlers下面有个main.yml中去找相关配置。
vim /etc/ansible/nginx_config/update.yml
---
- hosts: testhost
user: root
roles:
- new
在更新前一定要记得先备份,目的就是一旦出现错误,我们需要马上回滚!
rsync -av /etc/ansible/nginx_config/roles/new/files/ /etc/ansible/nginx_config/roles/old/files/
ansible-playbook /etc/ansible/nginx_config/update.yml
回滚操作就是把旧的配置覆盖,然后重新加载nginx服务。
每次改动nginx配置文件之前先备份到old里,对应目录为/etc/ansible/nginx_config/roles/old/files
[[email protected] files]# pwd
/etc/ansible/nginx_config/roles/new/files
[[email protected] files]# rsync -av ./ /etc/ansible/nginx_config/roles/old/files/
sending incremental file list
./
nginx.conf
vhost/
vhost/dd.conf
vhost/zhdy01.com.conf
sent 2189 bytes received 76 bytes 4530.00 bytes/sec
total size is 1948 speedup is 0.86
[[email protected] files]# cd !$
cd /etc/ansible/nginx_config/roles/old/files/
[[email protected] files]# ls
nginx.conf vhost
vim /etc/ansible/nginx_config/rollback.yml
---
- hosts: testhost
user: root
roles:
- old
可能稍微有点乱,总结下:
一定要先备份(真的吃过亏!)在更新配置前,我们是不是需要把现在的配置备份下,万一配置不对,线上的环境不就崩了? 备份就是如上 rsync。
备份完毕后,我们才可以去改变(/etc/ansible/nginx_config/roles/new/files)当前的配置,然后去更新(ansible-playbook /etc/ansible/nginx_config/update.yml)。
如果成功你就用不着这一步(别去尝试!)如果配置有问题,我们需要赶紧回滚到上个阶段(ansible-playbook rollback.yml),然后再去检查新配置到底是什么问题。