前后端分离项目部署到Linux虚拟机
最近做了一个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,那么这两者的防火墙可能
会阻挡住互相的访问。
前后端分离项目部署到Linux虚拟机的更多相关文章
- nginx+vue+uwsgi+django的前后端分离项目部署
Vue+Django前后端分离项目部署,nginx默认端口80,数据提交监听端口9000,反向代理(uwsgi配置)端口9999 1.下载项目文件(统一在/opt/luffyproject目录) (1 ...
- Docker环境下的前后端分离项目部署与运维
本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...
- Django前后端分离项目部署
vue+drf的前后端分离部署笔记 前端部署过程 端口划分: vue+nginx的端口 是81 vue向后台发请求,首先发给的是代理服务器,这里模拟是nginx的 9000 drf后台运行在 9005 ...
- 云计算:Ubuntu下Vue+Springboot前后端分离项目部署(多节点)
一.机器准备 首先准备三台机器: 我是一台WINDOWS系统主机,在WINDOWS里的 VMware 中安装两台Ubuntu系统虚拟机 如果你的虚拟机只有 CentOS,可以参考这篇文章:https: ...
- Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡
数据库准备 建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本 -- 菜单 CREATE TABLE `sys_menu` ( `menu_id` bigin ...
- Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- Docker环境下的前后端分离项目部署与运维(七)Redis高速缓存
Redis高速缓存 利用内存保存数据,读写速度远超硬盘:可以减少I/O操作,降低I/O压力. 发红包.抢红包的数据可以存在高速缓存中,加快处理速度,不需要经过数据库 淘宝首页一些优惠活动商品等热数据可 ...
- Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术
Docker Swarm技术 docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群) Swarm ...
- Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker
安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...
随机推荐
- VUE3 之 使用标签实现动画与过渡效果 - 这个系列的教程通俗易懂,适合新手
1. 概述 巴纳姆效应告诉我们: 人们更容易相信笼统的.常见的人格描述,并觉得特别适合自己,认为该描述真实地反映了自己的人格面貌. 这也是所有算命先生的小把戏,算命先生通常把话说的很笼统,很通用,基本 ...
- Qt:QJsonValue
0.说明 QJsonValue类用于操作JSON中的各种数据. JSON是用于存储结构化数据的格式,JSON中的数据可以是六种类型: 基本类型 存储类型 bool QJsonValue::Bool d ...
- Python:GUI库tkinter(三)
这一章是对前两章的总结: Python:GUI库tkinter(一) Python:GUI库tkinter(二) 前两章是对控件的介绍,第一章可以知道各控件使用时的具体参数,第二章以具体的例子展示了每 ...
- ACM训练,大理石在哪儿?
int p = lower_bound(a, a+num, x) - a; //在已排序数组a中查找大于或等于x的第一个位置 lower_bound( )返回的是一个迭代器,-a相当于减去a的首地址, ...
- 网络标准之:永远是1.0版本的MIME
目录 简介 MIME详解 MIME头 MIME-Version Content-Type Content-Disposition Content-Transfer-Encoding Encoded-W ...
- Vue基础知识的巩固与学习
生命周期的解析和应用: Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue 的生命周期.通俗说就是 Vue 实 ...
- 编写第一个GET、POST接口[renren-fast框架系列(1)]
配置好 renren-fast 脚手架,学习完 Spring MVC 架构后,我需要具体调试 renren-fast 的接口,比如要新增某个接口. 什么是前后端分离 运行 renren-fast 项目 ...
- Python:pyglet学习(1):想弄点3D,还发现了pyglet
某一天,我突然喜欢上了3D,在一些scratch教程中见过一些3D引擎,找了一个简单的,结果z轴太大了,于是网上一搜,就发现了pyglet 还是先讲如何启动一个窗口 先看看官网: Creating a ...
- 理解并手写 apply() 函数
apply()函数,在功能上类似于call(),只是传递参数的格式有所不同. dog.eat.call(cat, '鱼', '肉'); dog.eat.apply(cat, ['鱼', '肉']); ...
- mysql5.7.35数据库迁移
最近开发使用的测试环境的服务器使用的一台惠普E7300CPU\4G内存\160G西数硬盘配置,数据量近达20G!虽然作为测试数据库但也算是重要角色,一旦出现将严重影响工作.计划迁移至另一台做有RAID ...