zoukankan      html  css  js  c++  java
  • 记录一次基于linux的集群自动部署方案

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

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

     一、环境介绍

     二、编写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文件夹下面生成公钥和私钥

     将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"    
  • 相关阅读:
    从一个简单的例子谈谈package与import机制
    java 中public 类
    java 内部类
    使用Maven运行Java main的3种方式
    递归删除目录下.svn文件
    react-redux的connect()方法
    react 调用 function 的写法 及 解决 react onClick 方法自动执行
    react 路由传参
    react-redux 和 redux-saga 小结
    百度地图 放大或缩小后 中心点偏移(中心点不是在放大前的点)
  • 原文地址:https://www.cnblogs.com/leixs/p/14816647.html
Copyright © 2011-2022 走看看