部署spring boot + Vue遇到的坑(权限、刷新404、跨域、内存)
部署spring boot + Vue遇到的坑(权限、刷新404、跨域、内存)
项目背景是采用前后端分离,前端使用vue,后端使用springboot。
工具
工欲善其事必先利其器,我们先找一个操作Linux系统的工具极力推荐FinalShell。

一眼看过去是不是感觉很方便,对内存、CPU的监控也可以实时看到,访问目录更是方便,对于Linux小白来说简直是神兵利器。
好了,我要开始入坑了。
问题一:权限不够
把vue包放到tomcat->webapps->ROOT目录下。
启动tomcat:cd到tomcat的bin目录下面,然后执行./startup.sh命令。
出现第一个问题:-bash: ./startup.sh: Permission denied ,说是权限不够。
百度之后,执行此命令:chmod u+x *.sh 再次执行就OK了
问题二:刷新404
我先测试Vue包是否正常,于是启动tomcat,可以成功访问页面,但是刷新时出现了404。
解决404,在tomcat->webapps->ROOT目录下创建WEB-INF目录,在WEB-INF目录下面建web.xml文件

文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" metadata-complete="true">
<display-name>Router for Tomcat</display-name>
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
</web-app>
重启tomcat,再次刷新,不会再出现404。
问题三:端口占用&跨域
启动java -jar xxx.jar 和tomcat 发现有一个会起不来,因为端口被占用了,springboot打出的jar包,内置了tomcat服务器,如果和外部的服务器端口设置一样,就会出现端口冲突,如果不一样,启动是可以启动,但是却会出现跨域问题。
是解决端口冲突还是跨域问题你们怎么选呢,我就解决端口冲突吧。
后来想到一个办法,既然jar包不行,那就war包吧
1、把这里改成war包
<packaging>war</packaging>
2、排除内置tomcat容器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3、修改Application类,让它继承SpringBootServletInitializer,如下。
@SpringBootApplication
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} }
改成:
@SpringBootApplication
public class Application extends SpringBootServletInitializer { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
问题四:配置docbase
打完war包,访问接口时要加项目名称,为了让前端不再改代码,就在tomcat->bin->server.xml中加上如下配置:
<Context path="" docBase="/webapps/项目名称" reloadable="true" />
好,重启tomcat,发现页面访问不到了,猜测是因为改了docbase路径,才导致的,于是把Vue文件放到项目路径下面,
重启tomcat,可以访问,但是刷新页面404又出现了,就是加了web.xml文件也不行。
头疼了好半天,行吧,不折腾了,我去折腾前端去,“前端小姐姐,把你的url路径上都加上项目名称”
前端小姐姐:“好的”。
“卧槽,这么好说话”。
折腾完之后,把之前的配置再改回去。
去掉了docbase的配置,Vue文件还是放在ROOT下面。
好了,重启tomcat,访问项目,完美解决,心里高兴了好一会儿,卧槽,牛逼呀,给自己点个赞。
问题五:内存不够
我怕是高兴的太早了。
因为项目的更新,我做的反复操作就是,./shutdown.sh和./srartup.sh。反复的关闭tomcat和打开tomcat。
用着用着发现启动不了了,启动的时候,报了一个内存不够的错误(当时没截图,现在不想折腾去重现这个问题了,这里就简单描述一下)。
一看FinalShell,卧槽,内存占用完了(现在的图是后来截的,所有显示的是内存还够)。

当时已经用到了15.4G,卧槽,瞬间崩溃,头都大了没找到原因。最后看一下哪些进程占用了内存吧,
查看所有进程
ps -ef
查看tomcat进程
ps -ef | grep tomcat
发现有好三个tomcat进程,而且都是同一个tomcat,因为服务器部署了几个tomcat,看路径可以看出是同一个。但是不对呀,我每次都是先关闭tomcat,再打开,不可能会出现这么多进程呀。
猜想不会是./shutdown.sh只会关闭tomcat不会杀死进程吧,卧槽,上网一搜有的说可以直接杀死进程,有的说不行,不管怎样都要解决呀。
问了度娘,度娘给我两种方案,
一种是直接杀死进程,kill -s 9 PID ,杀死PID的进程,法相确实是,杀死了两个,发现内存瞬间降下来了 。
但是我每次关闭tomcat之后,再杀进程,那也太麻烦了。
于是用了第二种方案。
第一步 :vim修改tomcat下bin/catalina.sh文件,添加点东西,主要是记录tomcat的pid,如下:
#设置记录CATALINA_PID。
#该设置会在启动时候bin下新建一个CATALINA_PID文件
#关闭时候从CATALINA_PID文件找到pid,kill。。。同时删除CATALINA_PID文件
if [ -z "$CATALINA_PID" ]; then
CATALINA_PID=$PRGDIR/CATALINA_PID
fi
第二步 vim tomcat的shutdown.sh文件,在最后一行加上-force:

问题六:tomcat启动
好,启动tomcat,访问正常,解决完毕,收工,关闭FinalShell,第一次再Linux上部署项目出现的问题都一步一步解决了,但是怎么感觉事情没那么简单。
果然,关闭FinalShell之后,项目访问不了了。卧槽,无情 ,是不是要这样折腾我。上网搜了之后发现:
1、启动tomcat服务
方式一:直接启动 ./startup.sh
方式二:作为服务启动 nohup ./startup.sh &
方式三:控制台动态输出方式启动 ./catalina.sh run 动态地显示tomcat后台的控制台输出信息,Ctrl+C后退出并关闭服务
2、解释
通过方式一、方式三启动的tomcat有个弊端,当客户端连接断开的时候,tomcat服务也会立即停止,
通过方式二可以作为linux服务一直运行 通过方式一、方式二方式启动的tomcat,其日志会写到相应的日志文件中,而不能动态地查看tomcat控制台的输出信息与错误情况,
通过方式三可以以控制台模式启动tomcat服务,
直接看到程序运行时后台的控制台输出信息,不必每次都要很麻烦的打开catalina.out日志文件进行查看,这样便于跟踪查阅后台输出信息。tomcat控制台信息包括log4j和System.out.println()等输出的信息。
最后nohup ./startup.sh &这样启动,完美解决。小夜的第一次Linux部署项目之旅就此结束了,一路上也是坎坎坷坷,一步一个坑,但是也都一个一个解决了。
部署spring boot + Vue遇到的坑(权限、刷新404、跨域、内存)的更多相关文章
- Spring Boot 2.x(九):遇到跨域不再慌
什么是跨域 首先,我们需要了解一下一个URL是怎么组成的: // 协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址 http: + // + www.baidu.com + :8080/ ...
- 一文搞定Spring Boot + Vue 项目在Linux Mysql环境的部署(强烈建议收藏)
本文介绍Spring Boot.Vue .Vue Element编写的项目,在Linux下的部署,系统采用Mysql数据库.按照本文进行项目部署,不迷路. 1. 前言 典型的软件开发,经过" ...
- 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了
折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...
- Docker Gitlab CI 部署 Spring Boot 项目
目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...
- Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目
在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...
- 两个开源的 Spring Boot + Vue 前后端分离项目
折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...
- Linux云服务部署Spring boot项目
Linux云服务部署Spring boot项目 背景: 之前经过两个周的时间,做了一个简单的博客网站,网址:点击进入,在本地可以正常使用以后,想着部署到服务器上,给大家伙看个乐呵,于是有了这篇部署文章 ...
- springboot(十六):使用Jenkins部署Spring Boot
jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...
- spring boot + vue + element-ui全栈开发入门——开篇
最近经常看到很多java程序员朋友还在使用Spring 3.x,Spring MVC(struts),JSP.jQuery等这样传统技术.其实,我并不认为这些传统技术不好,而我想表达的是,技术的新旧程 ...
随机推荐
- 生产环境项目问题记录系列(二):Docker打包镜像Nuget包因权限问题还原失败
docker打包镜像遇到一个因为nuget权限验证问题导致镜像打包失败的问题,公司Nuget包用的是tfs管理的,tfs有权限验证,结果导致nuget还原失败,原有的NuGet.config文件如下: ...
- win10 cnpm安装完之后一直说不是内部命令的原因
找到cnpm的默认安装路径 一般默认的是 D:\Program Files\nodejs\node_modules 然后添加环境变量中 win10是在系统环境变量中切记不是在用户变量中.保存之后,重新 ...
- php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期
<?php //本周一 echo date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)); // ...
- IDEA 学习笔记之 Scala项目开发
Scala项目开发: 由于直接下载Scala plugin太慢,老是中断,所以手动下载: https://plugins.jetbrains.com/ 手动安装Scala plugin: 新建Scal ...
- B-概率论-贝叶斯决策
目录 贝叶斯决策 一.贝叶斯决策理论 二.贝叶斯公式 2.1 从条件概率公式推导贝叶斯公式 2.2 从全概率公式推导贝叶斯公式 三.贝叶斯公式应用 更新.更全的<机器学习>的更新网站,更有 ...
- [转] Java 无界阻塞队列 DelayQueue 入门实战
原文出处:http://cmsblogs.com/ 『chenssy』 DelayQueue是一个支持延时获取元素的无界阻塞队列.里面的元素全部都是"可延期"的元素,列头的元素是最 ...
- Python+Django+ansible playbook自动化运维项目实战☝☝☝
Python+Django+ansible playbook自动化运维项目实战☝☝☝ 一.入门引导 DevOPSDevOps(英文Development和Operations的组合)是一组过程.方法 ...
- vi/vim编辑器使用方法详解
vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对Unix及li ...
- nginx::certbot制作免费证书
环境 Ubuntu8.04apt-get update apt-get install software-properties-common add-apt-repository ppa:certbo ...
- MyBatis 之源码浅读
环境简介与入口 记录一下尝试阅读Mybatis源码的过程,这篇笔记是我一边读,一遍记录下来的,虽然内容也不多,对Mybatis整体的架构体系也没有摸的很清楚,起码也能把这个过程整理下来,这也是我比较喜 ...