部署分布式微服务
本篇文章教会你从零部署spring-cloud微服务的项目
部署
这是一个已经开发完成的spring-cloud的项目
对服务进行打包
可以直接在总的项目下
通过maven对项目进行打包 这样系统就会帮助你对各个微服务进行打包
打包完成之后 将打好的jar包 通过 scp 命令或者其它的工具传送到部署的服务器
传送到服务器之后 通过 java -jar 的方式启动jar包即可
linux常见启动jar包的方式
方式一
java -jar xxx.jar
最常用的启动jar包命令,特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
方式二
java -jar xxx.jar &
&代表在后台运行 ,ctrl+c 后程序也会继续运行
方式三
nohup java -jar xxx.jar &
nohup 即 no hang up 不挂断 ,关闭SSH客户端连接,程序不会中止运行
缺省情况下该作业的所有输出被重定向到nohup.out的文件中,如何让输出的内容重定向到指定的文件呢?
方式四
nohup java -jar xxx.jar >aaa.log &
将日志输入到指定的文件
方式五
nohup java -jar xxx.jar > springboot.log 2>&1 &
nohup 和 &
使用&
后台运行程序:
- 结果会输出到终端
- 使用
Ctrl + C
,程序免疫 - 关闭
session
,程序关闭
使用nohup
运行程序:
- 结果默认会输出到
nohup.out
- 使用
Ctrl + C
,程序关闭 - 关闭
session
,程序免疫
常见问题
1. maven 的结构问题
父项目中只引入当前子项目的模块
子项目在引入子子项目的模块
子项目的父模块就是其父模块 不可越级 以免造成依赖的问题
2. maven 打成打jar包只有几kb
在总的项目的pom文件中加上如下的配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
3. 项目导包的时候配置文件和xml没有打入进去jar包
加入一下的配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.yaml</include>
<include>**/*.yml</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.yaml</include>
<include>**/*.yml</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
4. 引入的jar包 在maven仓库中没有
使用mvn install 命令 将项目中引入的jar安装到本地仓库
mvn install:install-file -DgroupId=com.jd.blockchain -DartifactId=jdchain-samples -Dversion=1.6.4.RELEASE -Dpackaging=jar -Dfile=E:\JDChain\jdchain-samples-master\sdk-samples\target\sdk-samples-1.6.4.RELEASE.jar
5. 打包的时候 依赖工程找不到
对于本项目 使用的构建工具是maven,项目分了很多模块,并且模块之间还存在一定的依赖,比如说一个项目common是提供各项目通用的工具类,公共的类等
例子:项目backend-master,有common、infrastructure、service等其中service下面的模块都依赖于common,将来需要上线部署的也是service和infrastructure项目,所以两个项目是要进行打包,也就是这个打包操作,让我浪费了好多时间,这里都是我亲身经历的血泪史。
当使用Maven对service项目直接进行package时,提示依赖于common的jar包找不到。因为直接对service打包,common并没有被打包,依赖关系无法保持。这时你要做的就是,首先对项目common进行install,如图
注意!注意!这里有一个巨坑,我已经义无反顾的跳进去一次了,大家一定不要再往里面跳了:Common打包出来的应该是不可执行的jar包,所以不要在Common的pom中定义spring-boot-maven-plugin插件,因为这个Spring-boot插件会在Maven的package后进行二次打包,目的为了生成可执行jar包,如果common中定义了这个插件,会报错提示没有找到main函数。这时你就可以去打包service项目了,当然打包的时候可能还是不行,这里还有一个小坑,如果还是不能进行打包的话,那么就install一下root项目,也就是总目录下的pom文件对应的install操作,这样再打包service项目基本上就没有问题了。最简单的方式就在直接对backend-master进行package和install
件,会报错提示没有找到main函数。这时你就可以去打包service项目了,当然打包的时候可能还是不行,这里还有一个小坑,如果还是不能进行打包的话,那么就install一下root项目,也就是总目录下的pom文件对应的install操作,这样再打包service项目基本上就没有问题了。最简单的方式就在直接对backend-master进行package和install