微服务后端部署+前端部署实践

我的微服务项目断断续续也有一年了,还没上过线,之前尝试过很多次,总是遇见各种问题,最后跌跌撞撞还是部署上去了。

一、前言

与其说这是知识分享,不如说是我的部署掉坑记录,所以很多坑都是独属于我的项目的,可能对其他人的参考性不大,所以这必然不会是一篇普适性强的的教学博客,而是纪录博客。这篇博客的主要作用是为了方便我自己以后参考。

我的这个微服务项目本来刚开始架构的时候设计了非常多的模块,但是随着写着写着,发现可以没必要一步到位,先定义最基本的模块就行,其他非必要模块可以后面慢慢加,毕竟作为一个初学者,一步到位还是有点困难的。所以最后通过断断续续的精简,最后就留了3个模块,两个微服务

common模块用于存放公共方法及内容;
gateway模块作为网关;
system模块作为业务模块;

原本定义的权限验证服务,文件上传服务,远程调用feigin模块,第三方接入模块,订单模块,商品模块,以及多个业务模块等等,全被我精简删除了。
其中在部署的时候,只需要部署两个微服务即可,即gateway模块和system模块

二、先说一下我在部署过程中遇到的问题吧。

1、由于项目中集成了spring cloud gateway,所以就会出现spring cloud gateway所依赖的spring-boot-starter-webflux依赖会与spring-web依赖冲突。
所以需要注释掉spring-web依赖(我这里是只需要注释system模块中的spring-web即可)
2、然后由于使用了spring-boot-starter-webflux依赖,所以想要在接口中获取请求体,原本的HttpServletRequest就无法使用了,需要更换为ServletWebExchange才行。
3、首先要明确一点,如common模块这种没有启动类的辅助模块,是不用部署的。
那么其他依赖该common模块的微服务,进行jar包部署的时候,是如何调用到common模块的内容的呢?答案就是,在需要部署的微服务的pom文件中依赖该common模块,如下:

<dependency>
    <groupId>cn.ycl</groupId>
    <artifactId>ycl-common-core</artifactId>
    <scope>compile</scope>
</dependency>

然后,如果pom文件中的build写的没错,将会生成携带 所有依赖 的jar包,一般来说都是几十M,如果你生成的jar包是几十k,那就肯定是build写错了,导致install生成jar包的时候没有带上所有依赖。

(我前期部署的时候就是build写的不对,生成的jar包一直是几十k大小,用命令部署的时候老是提示找不到依赖。
当时我没注意jar包的大小,陷入了牛角尖,老是想不通common模块不部署,依赖也没在线上服务器,线上部署的微服务是怎么调用到线下本地的common中的代码的?
最后还把本地的几百M的依赖仓库复制粘贴到了服务器,通过一系列操作,改写build,定义读取依赖的位置,最后还整的部署成功了!!!!
但是在之后开发中,引入新的依赖后,就需要再次将新的依赖复制粘贴到对应的依赖仓库文件夹中,简直太笨挫了,这显然是不能这么部署的,所以重新进行了第二次部署。尴尬)。

3、pom文件对于微服务部署非常重要,需要清楚在哪些模块加build,以及build中的内容是什么。
首先是,不能在非微服务模块(比如common模块)及父模块中写build(是的,我前期每一个模块中的pom文件中都写了),否则会造成打包后的jar有问题。
在这里插入图片描述

其次是,build中必须写明微服务的启动类的路径,否则部署时会报找不到main方法的classNotDefund错误,例如我的build是这么写的:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <configuration>
                        <mainClass>cn.ycl.system.SystemApplication</mainClass>
                    </configuration>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

三、按照一般流程部署即可

以上是我部署过程中遇到的问题,那么按照一般流程,在写好build,更改了配置文件中的服务器ip地址后,就可以进行打包了。

打包步骤就两个,直接在idea右侧的父模块的LifeCycle中依次进行clean、install,即可。

将install后生成的jar包,比如我的system和gateway模块的jar包,复制粘贴到服务器中(我使用宝塔进行部署的,可以了解下我之前的部署非微服务项目的博客):从零开始,Java个人项目部署上线,并能在公网访问

复制粘贴完成后,输入如下命令:nohup java -jar xxxx.jar &
每个需要部署的jar包都执行一下上面的命令即可。

然后可以通过生成的nohup.out日志文件查看启动状态,在jar包同级目录,输入如下命令查看:
tail -f nohup.out(可以实时查看最后10行日志文件内容)
或者使用less nohup.out查看,可以上下分页查看,舒服。

当然,前提是你开启了服务器对应的端口,如redis的6379,rabbitmq的15672、5672,mysql的3306等。还是推荐查看我以前的博客:
从零开始,Java个人项目部署上线,并能在公网访问

四、前端部署

这是我之前从来没有接触过但是非常好奇的领域,还好百度强大,也挺简单

基础还是上面提到的我之前的博客,在宝塔上完成。

1、第一步肯定是打包生成dist文件夹啦

在前端项目的控制台通过命令npm run build进行打包,就会生成dist文件夹(别忘了改请求后端的ip改成服务器的ip)

2、在宝塔中创建一个网站:
在这里插入图片描述

3、根据你前面建网站所写的路径,将dist文件夹放在对应目录,比如我的就是放在/www/wwwroot/yuanchangliang文件夹下。

然后。。。。就好了,就是这么快,这么简单,这是我之前没有预料的的,亏我之前还那么好奇前端的部署。果然不了解的事物都是神秘而伟大的,了解后也就那样。

所以写完后看下来,发现确实如开头所言,对其他人的参考性不强,不过是我自娱自乐的记录博客,给我自己看的。这次微服务部署过程中,我收获最多的就是关于common模块与微服务部署的关系清晰了起来,更加理解微服务和普通spring boot项目的区别,以及每个build的作用,以及部署过程中可能遇到的错误,这种感觉棒棒的,不足为外人道也

在这里插入图片描述

最后的最后,我必须吐槽一句,前端好难的,写的我崩溃了!!!!!!!!!!!!!

我的项目地址:http://39.101.204.247/#/login
账号密码:yuanchangliang/ycl123

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三七有脾气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值