由于公司有多套相对独立测试环境,每次迭代上线后,需要对nginx进行同步。
同步主要分为html目录文件同步和nginx conf文件同步。
html的同步方式比较简单,对于没有特殊需求的环境,直接将整个html目录同步过去;
对于有特殊目录要求的环境,则针对特殊目录进行同步即可。
对于conf文件,一般都放置于conf目录下的vhosts目录中。
conf文件不同环境主要有以下一些不同点。
1.server_name 一般带有环境的特征(test1xxx.xxx.com) 或者ip地址(x.x.x.x)
2.proxy_pass 可能会有环境相关的域名(t1xxx.xxx.com) 或者ip+端口的形式(x.x.x.x:xx)
所以同步的方案就按如下步骤进行
1.将目标环境的html,vhosts目录生成备份目录
2.将源环境的html,vhosts目录scp到目标环境
3.将环境相关特征使用目标环境的信息替换源环境的信息 eg test1 --> test2
4.再将相关的ip,port一一替换
具体实现
使用python paramiko模块来操作linux命令
1.连接目标环境机器,查看html/vhosts目录是否存在,存在则生成备份目录(mv)
2.使用scp 命令将html/vhosts目录从源服务器同步到目标服务器。
3.使用perl 命令将conf文件的所有源环境信息替换成目标环境信息 perl -p -i -e "s/test1/test2/g" ./*.conf
4.遍历所有conf文件,读取是否存在相应ip或者端口信息,有则用目标环境的相关信息替换,生成新的conf文件