记录一次基于windows的集群自动部署方案

 在一次项目实施过程中,第一次接触到小集群的部署项目,针对持续迭代的集成测试环境、系统测试环境,使用shell+bat脚本实现。

 ps:不用jenkins的原因是内网环境,同时代码管理使用的是CVS工具,所以没有采用。

 一、环境介绍

 

记录一次基于windows的集群自动部署方案

 

 

 二、编写shell脚本(linux)

  前端服务器的中间件是nginx,核心操作就是更换前端资源文件,并重启nginx服务

  在服务器上,新建一个reload.sh文件,笔者放置的路径是/usr/local/,

#!/bin/bash

# 设置工作路径
dir=/usr/local/

if [ -e ${dir}/dist.zip ];then
    cd ${dir}/ffms
    echo '************ 输出前端资源目录下文件,并删除 ************'
    ls
    rm -rf ${dir}/ffms/*
    # 复制刚刚上传的文件,并赋权限
    echo '************复制刚刚上传的前端文件,并赋权限************'
    chmod -R 750 dist.zip
    unzip dist.zip
    mv dist/* .
    ls ${dir}/ffms
    
    # 重启nginx 
    echo '************ 重启nginx ************'
    nginx -s reload
else
    echo '文件不存在'
fi

后端的中间件是tomcat,脚本的核心操作就是kill对应的进程,同时替换资源包,并启动

#!/bin/bash

# 设置工作路径
dir=/usr/local/tomcat

if [ -e ${dir}/forex.war ];then
    cd ${dir}
    ps -ef | grep tomcat
    ps -ef | grep tomcat | grep -v grep | awk '{print "kill -9 "$2}' | sh 
    slepp 5
    ps -ef | grep tomcat
    echo '********* 删除原来的war包刚刚上传到webapps *********'
    ls ${dir}/forex.war
    rm -rf ./webapps/forex*
    mv ${dir}/forex.war ./wenapps
    # 启动tomcat
    echo '********* 启动tomcat *********'
    nohup ./bin/startup.sh & 
    slepp 15 
    ps -ef | grep tomcat 
else
    echo '文件不存在'
fi

 

 三、配置公钥登录

 公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
 1、客户端生成RSA公钥和私钥
 2、客户端将自己的公钥存放到服务器
 3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端
 4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
 5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

 客户端生成RSA公钥和私钥(打开windows cmd 执行如下脚本):

ssh-keygen -t rsa

 一直回车后回在 用户目录下的.ssh文件夹下面生成公钥和私钥

记录一次基于windows的集群自动部署方案

 

 

 将id_res.pub上传至远程服务器,并将公钥追加到指定文件下(如果不存在,需要创建路径和文件)

cat id_res.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

chmod 700 ~/.ssh

 PS:权限不设置也会报错的,不能直接设置为777 

 

 四、编写bat脚本(windows)

PS:注意一定要用双引号,单引号会报 【sh: -c: line 0: unexpected EOF while looking for matching `】

rem 创建备份目录
set dd="%date:~8,2%"
set mm="%date:~5,2%"
set yy="%date:~0,4%"
set Thh="%TIME:~0,2%"
set Tmm="%TIME:~3,2%"
set folder="%yy%-%mm%-%dd%-%Thh%-%Tmm%"
md C:\\users\\lxs\\work\\war\\%folder%

pause 1

rem 移动原来的文件到备份文件夹
move C:\\users\\lxs\\work\\war\\forex.war C:\\users\\lxs\\work\\war\\%folder%\\
move C:\\users\\lxs\\work\\war\\dist.zip C:\\users\\lxs\\work\\war\\%folder%\\

rem 移动打包好的前后端文件到工作目录
move 代码路径\\target\\forex.war C:\\users\\lxs\\work\\war\\forex.war
move 代码路径\\target\\dist.zip C:\\users\\lxs\\work\\war\\dist.zip

rem 上传文件,并执行脚本
scp -p22 C:\\users\\lxs\\work\\war\\forex.war root@ip:/usr/local
ssh -t root@ip:/usr/local "source /etc/profile && bash /usr/local/restart.sh"    

scp -p22 C:\\users\\lxs\\work\\war\\dist.zip root@ip:/usr/local
ssh -t root@ip:/usr/local "source /etc/profile && bash /usr/local/reload.sh"    

 

上一篇:批量删除当前目录下的所有模块指定远程分支


下一篇:work消息模型