递增更新web项目及远程控制更新(方便分布式部署代码的更新)

1:首先需要用到的技术工具:python,ftp(两个软件的安装程序可以参考官网)注意版本(这边python还需要安装一个扩展包)

https://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/(python扩展包下载地址)

2:第一步先把需要解压缩到指定目录的tar.gz的包复制到其中一台服务器,放置于特定的文件夹下,(怎么打tar.gz递增包这个可以参考http://www.itkeyword.com/doc/6679723549668741761)


我这边就放置于桌面,后面的路径会与其相关

然后就是更新本机的两个服务(由于这边做了一个真实,一个测试,两个同时更新)代码如下(用python写的):脚本名:update.py


import os
import tarfile
from ftplib import FTP
import socket
import struct
import time




user_home  = 'C:\Users\Administrator\Desktop\update'#建议写成相对路径方便使用
resin_home = 'E:\www'
web_home_8080   = '%s\\resin-8080\webapps\sxzyc_v2' %(resin_home)
web_home_8082   = '%s\\resin-8082\webapps\sxzyc_v2' %(resin_home)
file_name  = '%s\sxzyc_v2.tar.gz' %(user_home)
logs_home_8080  = 'E:\www\\resin-8080\logs';
logs_home_8082  = 'E:\www\\resin-8082\logs';
log_home_8080  = 'E:\www\\resin-8080\log';
log_home_8082  = 'E:\www\\resin-8082\log';
def stopNginxAndResin():
    os.system("net stop WWW_8080")#停止服务
    os.system("net stop WWW_8082")


def extractFile_8080(): 
    os.system("echo 'starting extract sxzyc file 8080...'");
    tar = tarfile.open(file_name)#解压文件
    tar.extractall(path=web_home_8080)#到指定路径
    tar.close()


def extractFile_8082(): 
    os.system("echo 'starting extract sxzyc file 8082...'");
    tar = tarfile.open(file_name)
    tar.extractall(path=web_home_8082)
    tar.close()
    
def updateSourceCode():
    os.system("echo 'update sxzyc source code....'");
    extractFile_8080()
    extractFile_8082()


    
def startNginxAndResin():
    time.sleep(2)
    os.system("net start WWW_8080")
    os.system("net start WWW_8082")


        


def deleteFiles():
    os.system("echo 'deleteFiles ....'");
    os.system("del %s\sxzyc.log" %(logs_home_8080));
    os.system("del %s\sxzyc.log" %(logs_home_8082));
    print "del %s\*.log" %(log_home_8080)
    print "del %s\*.log" %(log_home_8082)
    os.system("del %s\*.log" %(log_home_8080));
    os.system("del %s\*.log" %(log_home_8082));
    
if __name__ == "__main__":
stopNginxAndResin()
time.sleep(1)
deleteFiles()
time.sleep(1)
updateSourceCode()
startNginxAndResin()


这上面的代码就可以直接更新,并且重启服务,就可以避免繁杂的操作


然后我们在另外一台服务器安装ftp(用于传输文件)脚本名synchronization.py
需要在接收服务器安装ftp并且创建一个用户和命名,指定一个文件夹(参考如下)指定的路径必须正确(就是这台服务器待会需要更新的脚本里面指定的路径)






import ftplib
import hashlib
import os
from ftplib import FTP


ftp_server   = "11.22.22.33"#接收服务器ip
ftp_port     = "21"#ftp端口
ftp_user     = "update"/#
ftp_password = "update"


filePath = 'C:\Users\Administrator\Desktop\update\sxzyc_v2.tar.gz'
serverPath = ''


cmd_stor = "STOR %s" %(os.path.split(filePath)[1])
print(cmd_stor)
ftp = FTP(ftp_server, ftp_user, ftp_password)
ftp.getwelcome()
ftp.storbinary(cmd_stor, open(filePath, 'rb'))
ftp.close()                    


然后将第一台服务器写的Update.py脚本copy一份到改服务器上(注意具体项目路径具体修改)

最后一步就是点击第一台服务器上的脚本远程执行改台服务器update脚本(第一次麻烦一点,以后就可以不用连接第二台服务器,在第一台服务器上就可以直接更新两台服务的的应用)


代码如下(脚本名 operation.py)



# -*- coding: utf-8 -*-
import wmi
import json
import time
import socket
logfile = 'logs_%s.txt' % time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime())


#远程执行.py文件
def call_remote_bat(ipaddress,username,password):
    try:
        #用wmi连接到远程服务器
        
        conn = wmi.WMI(computer=ipaddress, user=username, password=password)
        filename=r"C:\Users\Administrator\Desktop\update\update.py"   #此文件在远程服务器上
        cmd_callbat=r"cmd /c call %s"%filename
        conn.Win32_Process.Create(CommandLine=cmd_callbat)  #执行bat文件
        print "执行成功!"
        return True
    except Exception,e:
        print "aaa!"
        log = open(logfile, 'a')
        log.write(('%s, call bat Failed!\r\n') % ipaddress)
        log.close()
        return False
    return False


if __name__=='__main__':
    call_remote_bat(ipaddress="11.22.22.33", username="administrator", password="root")

这样就完成了两台服务器的应用更新工作(方便分布式部署的更新,不用连续上几个服务器)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值