背景
运维系统的好处就是可以将复杂的事情简单化!就好比说去部署一个应用,要下载配置启动设置开机自启等等一系列操作,但是我们可以利用工具去帮我们执行这一系列的东西~只需要手指轻轻一点就完成
一、思路
部署应用其实就去去下载服务软件,然后按照自己的需求去修改配置文件,从而达到我们想要的服务。
那么我们意见部署的思路就是:
当系统连接上服务器后,让后台发送shell,让服务器执行指定的shell就可以完成下载了。但是要达到我们需要的服务效果,还需要对配置文件进行修改。
二、实现
1.连接websocket与ssh后,点击一键部署按钮,将部署信号发送给webscoekt服务端,
html:
<button class="btn btn-success" style="float: right" id="sendApache">一键部署</button>
js:
$('#sendApache').click(function () {
//如果未连接到websocket
if (!window.s) {
$('#showmess').prepend('没有连接主机');
} else {
window.s.send('Apache');//通过websocket发送数据
}
});
后台:
如果接收回来的信息是部署信号,就让让服务器执行部署指令:
for shell in request.websocket:
if shell.decode('utf-8') == 'Apache':
print(shell.decode('utf-8'))
addactionshell = models.batchaction()
addactionshell.hostaddress = hostip
addactionshell.username = request.session['username']
addactionshell.actionshell = '部署Apache'
addactionshell.starttime = time.strftime("%Y%m%d%H%M%S")
addactionshell.save()
for i in range(hostnum):
message = f'主机{hostip[i]}Apache部署中...等待执行结果!'
request.websocket.send(message.encode('utf-8'))
try :
cmd = 'yum install httpd -y;systemctl start httpd; systemctl enable httpd;firewall-cmd --permanent --add-service=http;firewall-cmd --reload;'
b[i], c[i], d[i] = a[i].exec_command(cmd)
output = '-' * 97 + f'{hostip[i]}执行结果' + '-' * 90 + c[i].read().decode('utf-8') + d[i].read().decode('utf-8')
request.websocket.send(output.encode('utf-8'))
print('Apache部署成功')
except:
print('Apache部署失败')
shellscrpmess = '-' * 97 + f'{hostip[i]}执行结果' + '-' * 94 +'部署失败!'
request.websocket.send(shellscrpmess.encode('utf-8'))
效果:
三、结束
抛砖引玉到这里~没有把一键部署做的太详细(比如说可以设置应用常见的配置),我个人觉得,有一个批量执行bashshell与批量执行shell脚本就足以满足大部分的批量部署,特别是应该善于运用shell脚本帮我们做事。但是对于不会shell脚本来说,这个一键功能就显得特别重要,以后也会继续完善这个一键部署的功能的!