前后端分离项目部署到Linux虚拟机
阅读原文时间:2023年07月08日阅读:1

最近做了一个springboot+vue的前后端分离项目,把它部署到Linux虚拟机上。下面是我的步骤和遇到的问题,需要的朋友可以看下(看的时候注意要全部看完到底部,因为我习惯是把我遇到的问题放到最后面的,不是到了哪一步遇到了问题就顺便讲下)。

1.打包前后端项目

后端我使用的是idea编辑器,所以打包只要点击下图就可以了。

就生成了下面这个jar包

好,后端打包完成,接下来打包前端项目。

我前端使用的编辑器是webstorm。打包方式也很简单,只要在终端中执行:npm run build命令即可,如下图

之后便会生成一个  dist 文件夹,如下图

2.将文件放到虚拟机上

在Linux的目录下 mkdir 建一个放这两个打包文件的文件夹(我的是marble),之后用rz命令,或者 filezilla 等上传工具,找到你本地的那个后端jar和前端dist,上传到marble

如下图:

3.我这里使用nginx进行代理,把前端部署到nginx上。那你需要在你的Linux上安装一个nginx,nginx的安装我就不再赘述,没有安装朋友的可以参考这个:

https://www.cnblogs.com/qwg-/p/13054715.html

安装完成之后,别着急,需要重新配置一下nginx的配置文件。

说明:这里要讲下,前端是通过nginx代理的,后端启动jar包,前端的请求使用nginx代理发送到后端.

找到你的nginx的安装目录下的 conf/nginx.conf文件(默认的位置是:/usr/local/nginx/conf 下的nginx.conf),配置成以下即可。

稍微解释一下:

upstream javaboy.org{
server 127.0.0.1:8088;
}

这个javaboy.org只是个名字,你随便怎么起都可以,同理,下面的proxy_pass http://javaboy.org用的就是上面的这个,也就是说,我们使用nginx的默认的80端口,访问这个接口的时候,nginx就会给把请求代理到后端的那个8088接口上。这个8088是后端项目的端口

location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|html) {
#所有静态文件直接读取硬盘
root /marble/dist/;
expires 30d; #缓存30天
}

这个就是说,以 js|css|ico|png|jpg|eot|svg|ttf|woff|html 这种结尾的页面,就不用请求后端,直接前端展示。

那下面的root /marble/dist/,就是我上面说的我的前端打包成的 dist 在Linux的位置,这个要改成你自己的前端打包文件 dist 在Linux的路径。

配置完成以后记得要重新启动nginx,配置文件才会生效。

4.启动后端的jar包

这里先进入到你的jar包所在位置(我的是marble文件夹),执行命令:nohup java -jar xxx.jar &

这个命令如果不太了解的可以看下这个:https://www.cnblogs.com/qingmuchuanqi48/p/11723541.html

执行这个命令以后会有个下一行:

nohup: 忽略输入并把输出追加到"nohup.out,这个意思是说你的启动项目日志在你的jar包同级目录nohup.out文件内(执行上面的启动命令,它会自动给你创建一个nohup.out文件),你可以通过vi  nohup.out 看到你的日志。

jar包启动完成,nginx启动完成,就可以在你window的浏览器上输入:

这里说明一下,前端的IP是你的Linux的IP ,为什么不写端口,因为我们使用的是nginx默认的80端口,后面的index.html页面是因为vue项目是一个单页面应用,也就是下图的:

等项目出现页面,成功请求到后端的数据,就说明部署成功!

下面说下我遇到的问题

问题1:

我用的数据库不是我Linux上的数据库,而是我window本地mysql数据库,然后我把后端springboot的配置url 的地址换成window的IP地址

,发现报一个没有访问权限的错误,错误的截图我忘记写了,但是解决方案我记得,在数据库执行以下SQL:

GRANT ALL `user`PRIVILEGES ON *.* TO 'root'@'%'
IDENTIFIED BY '123456' WITH GRANT OPTION;

FLUSH PRIVILEGES

说明一下: user是你的用户登录的那张表的表名,后面的123456是你的root用户的密码。

问题2

假如一直登录不成功,可以尝试关闭一下你的window防火墙和Linux的防火墙,因为比如我的mysql在window,而我window浏览器需要访问Linux,那么这两者的防火墙可能

会阻挡住互相的访问。