# 自动化部署 nginx-tomcat+springboot **Repository Path**: freeqiao/deployment ## Basic Information - **Project Name**: 自动化部署 nginx-tomcat+springboot - **Description**: 自动部署脚本 java版本 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2019-12-26 - **Last Updated**: 2024-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java版部署系统 #### 项目介绍 由于现在处于项目初期,架构很简单,nginx+tomcat/springboot 项实现多节点部署。 因为使用jenkins 自动构建,发布系统感觉比较麻烦,个人不太会写shell,决定用java实现自动化部署 #### 技术实现核心思路 1. nginx 保留第一个节点,其余节点摘除,生成nginx配置文件,重载reload 2. 将其余节点升级,升级完成测试成功后,第一个节点摘除,其余节点填充生成nginx,nginx重载 3. 第一个节点升级,成功后所有节点挂载在nginx重新生成nginx配置,nginx重载 4. 关于配置这块需要说明一下 nginx:head建议修改 server_name www.* 为自己的域名或ip地址, 其余默认即可,需要定制化请参考nginx配置 目前分为三个角色:当前发布机器环境(拥有部署包),nginx负载服务器(切换配置),多个tomcat/springboot(待升级节点) 系统所有操作,都是通过ssh命令执行,所以三个角色都需要配置ssh信息,也方便了多服务器远程发布(虽然本机可以直接执行命令,但是偷懒还是这么写了) ssh安全性大家自己斟酌,我反正都放在生产环境局域网运行,jenkins构建上传包到部署服务器,直接执行发布脚本 #### 系统配置

{
  "backPath":"/root/back",#备份目录建
  "mustReload":false,#是否强制升级 也可以通过启动命令 追加-s参数强制升级部署
  "type":"tomcat", #部署类型 tomcat/springboot,默认是tomcat 分别对应(tomcatNodes、springBootNodes)
  "uploadFile":"/root/ROOT.war", #部署的文件
  "nginx":{
     "sshInfo":{              #nginx服务器  shh连接配置
          "host":"127.0.0.1",
          "passwd":"root",
          "user":"root"
       },
    "configFile":"/etc/nginx/conf.d/server.conf",  #代码生成nginx配置文件,建议"项目.conf"命名,
    "head":"server {\n     listen         80;\n    server_name   www.*;\n    client_max_body_size       20m;\n    access_log  /var/log/nginx/admin_access.log ;\n    error_log  /var/log/nginx/admin_error.log  ;\n    location /{\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass backend;\n   }\n}" 
     # nginx中反向代理配置可以根据项目定义 结尾处 "proxy_pass backend;"是定制化配置请勿随意修改
  },
  "sshInfo":{                #本机服务器  shh连接配置
    "host":"ip",
    "passwd":"密码",
    "user":"账户"
  },
  "tomcatNodes":[
    {
      "checkUrl":"http://127.0.0.1:9080/checkTime",   #检查服务是否启动
      "homePath":"/usr/local/tomcat9080",   #部署的tomcat节点目录
      "nginxProxyPass":"127.0.0.1:9080", #
      "sshInfo":{        #tomcat节点服务器  shh连接配置
        "host":"ip",
        "passwd":"密码",
        "user":"账户"
      },
      "name":"ROOT.war"  #部署到tomcat/webapps/项目文件名称
    },
    {   #第二个节点
      "checkUrl":"http://127.0.0.1:8080/checkTime",
      "homePath":"/usr/local/tomcat8080",
      "nginxProxyPass":"127.0.0.1:8080",
      "sshInfo":{
        "host":"ip",
        "passwd":"密码",
        "user":"账户"
      },
      "name":"ROOT.war"
    }
  ],
   "springBootNodes":[
       {
         "checkUrl":"http://127.0.0.1:9080/checkTime",   #检查服务是否启动成功
         "homePath":"/usr/local/server9080",   #部署jar包目录
         "nginxProxyPass":"127.0.0.1:9080", #
         "sshInfo":{        #节点服务器  shh连接配置
           "host":"ip",
           "passwd":"密码",
           "user":"账户"
         },
         "name":"server.jar",  #部署到tomcat/webapps/项目文件名称
         "param":"--server.port=8000" #spring boot 定制启动参数 默认无
       },
       {   #第二个节点
         "checkUrl":"http://127.0.0.1:8080",
         "homePath":"/usr/local/server8080",
         "nginxProxyPass":"http://127.0.0.1:8080/checkTime",
         "sshInfo":{
           "host":"ip",
           "passwd":"密码",
           "user":"账户"
         },
         "name":"ROOT.war",
         "param":"--spring.profiles.active=pro2" #spring boot 定制启动参数
       }
     ]
}

单节点tomcat,所有角色都在本地部署配置demo如下

{
  "backPath":"/root/back",
  "mustReload":false,
  "type":"tomcat",
  "nginx":{
     "sshInfo":{
        "host":"127.0.0.1",
        "passwd":"root",
        "user":"root"
     },
    "configFile":"/etc/nginx/conf.d/server.conf",
    "head":"server {\n     listen         80;\n    server_name   _;\n    client_max_body_size       20m;\n    access_log  /var/log/nginx/server_access.log ;\n    error_log  /var/log/nginx/server_error.log  ;\n    location /{\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http://backend;\n   }\n}"
  },
  "sshInfo":{
    "host":"127.0.0.1",
    "passwd":"root",
    "user":"root"
  },
  "tomcatNodes":[
    {
      "checkUrl":"http://127.0.0.1:8080/jzxc-rest/checkTime",
      "homePath":"/opt/tomcat-server",
      "nginxProxyPass":"127.0.0.1:8080",
      "sshInfo":{
        "host":"127.0.0.1",
        "passwd":"root",
        "user":"root"
      },
      "name":"jzxc-rest.war"
    }
  ],
  "uploadFile":"/root/jzxc-rest.war"
}

### 使用说明 系统参考配置都在config.json放在deployment-0.0.1-jar-with-dependencies.jar同级目录即可 运行命令 java -jar deployment-0.0.1-jar-with-dependencies.jar 如果想强制升级加参数-s: java -jar deployment-0.0.1-jar-with-dependencies.jar -s 在jenkins 使用:可以在构建后模块选择Publish Over SSH , Exec command 输入
   
    source /etc/profile
    java -jar deployment-0.0.1-jar-with-dependencies.jar
    
### 建议 nginx配置文件名建议:项目名.conf 防止生成覆盖其它配置