Lab——项目部署指北
当编写完项目代码后,我们可以以多种方式构建和运行Spring项目,包括以下几种方式:
- 直接在IntelliJ IDEA中运行应用程序
- 使用Maven生成可执行的JAR文件,JAR文件既可以在命令行上运行,也可以部署到云上
- 使用Maven生成可执行的WAR文件,WAR文件可以部署到传统的Java应用服务器当中
- 制作Docker容器镜像,在任何可以支持容器的地方进行部署
- 依托于持续集成/持续部署工具进行自动化Java项目部署
通常来讲选择什么部署方案以我们实际开发工作场景为准,我们事件组有两个项目项目需要进行部署,一个是标注系统,我们需要把标注系统部署到阿里云上。供标注人员标注使用;
另一个是展示系统,展示系统是在内网开发的,不可以部署到云上,但在笔记本电脑中一定要保存一个可以稳定运行的版本。综上考虑我们选择使用Maven生成可执行的JAR文件以及依托于持续集成/持续部署工具进行自动化Java项目部署这两种部署方式。
🤖使用Maven生成可执行的JAR文件:部署到云服务器上
1.构建可执行JAR文件
将Spring应用程序构建成可执行的JAR包相当简单,我们通过如下Maven 命令生成一个可执行的JAR文件: mvn package -Dmaven.test.skip=true
,或者直接使用Maven插件中的:Maven→Lifecycle
→package给项目打包;构建成功后生成的JAR文件会被放在Target目录之下,生成的JAR文件的名称是由pom.xml
文件里条目确定的。
❗ 在打包系统之前请按顺序注意以下问题:
- 把测试数据库(eventdb)变成正式数据库(event_official)
- 请确保项目可以正常启动后再打包
- 请把application.properties文件中ee.sys.root条目换成部署到服务器该文件的位置(通常来讲我们不需要修改服务器上的application.properties文件)
- 具体操作流程如下所示:
- 使用全局替换命令
ctrl+shift+r
把测试数据库替换成正式数据库 - 执行 mvn clean 项目构建前进行清理工作
- 执行
mvn package -Dmaven.test.skip=true
命令进行打包操作
- 使用全局替换命令
2.部署上云
成功打包成Jar之后我们需要把jar包上传到阿里云服务器上。
- 具体的操作流程如下所示:
- 将target下的 event_extraction.jar文件复制到服务器上
- 找到在服务器上部署的项目的端口号(使用
**ps -ef|grep java**
命令) - 杀掉这个端口号(使用
**kill ***
** 命令) - 查看端口号是否被杀掉(使用
**ps -ef|grep java**
命令) - 打开服务器,找到EE系统的路径
- 把打包好的jar文件上传上去 (如果需要更改Lucene:替换idx文件)
- 启动服务器系统 (使用
nohup java -jar XXX.jar >> Log.log 2>&1 &
命令**)** - 查看端口号看是否部署成功(使用
**ps -ef|grep java**
命令) - 把本地项目中的eventdb.official 换成eventdb(防止本地误操作)
🤖使用Maven生成可执行的JAR文件,部署到电脑上
🤖敏捷开发实践——持续集成持续部署
依托阿里云云效平台,使用云效Flow自动进行项目部署:
- 开发人员能够根据定制好的发布策略,自主发布,最好不进行或少进行人工配置或干预。
- 运维资源规划和资源管理:
- 正式项目部署资源(lucene、eventdb_official或eventdb_official_twin)
- 测试环境部署资源(lucene、eventdb)
- 正式环境与测试环境分别需要不同的部署脚本(deploy.sh)
自动化部署实践流程:
- 项目构建(云效平台自动打包项目到云效平台制品仓库当中)
- 执行云效流水线(下载云效平台制品仓库中的jar包到配置好的ECS云服务器当中)
- 执行自定义delpoy.sh脚本(自动执行脚本进行项目部署)
维护云效平台自动化部署:
- 主机部署流程中的部署脚本
- ECS服务器上的部署脚本(deploy.sh)
在上述需要维护的部署脚本当中有阿里云主机当中项目存放的文件夹,部署脚本所在的位置等信息
上述部署脚本当中会对端口号进行检查,查看端口是否被其他程序占用。尝试启动程序并打印日志,如果启动程序失败会把失败信息写入
踩坑日记:
- 当需要在Linux服务器上部署一个测试系统和一个正式系统时记得要把jar包的名字设置成不一样的,否则在使用deploy.sh脚本启动的时候会把两个系统全部kill掉!导致部署失败
- 可以自动执行某个分支的远程代码更新后,自动将代码更新到某个远程分支上
转载自:https://juejin.cn/post/7359965074633342986