# 自动化部署 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 防止生成覆盖其它配置