Linux系统的Tomcat部署后端项目(服务器和本地都一样)

avatar
作者
筋斗云
阅读量:0

1、直接运行jar包

将你的后端项目包为jar包,然后上传到一个你自定义的文件路径,比如我的就是放在/usr/local/myweb 目录下,就要进入这个目录下进行操作

然后先尝试运行一下,看能不能跑通

java -jar 你的文件名.jar

如果成功运行并且跑通,则将这个服务挂到后台,现在只要关闭控制台jar包就会停止

先中断服务

ctrl+c

再输入这个命令,这条命令会把运行日志写到outlog.log中

nohup java -jar demo.jar >outlog.log &

这样就实现了jar包部署了!!!

结束进程:

通过执行ps auxwww | grep 文件名.jar通过查找进程关键字 找到进程PID。执行kill -9 PID 结束进程

2、war包部署(和一些注意点)

war包部署在配置好Tomcat后就比较容易了

首先将war包上传到服务器中的Tomcat下的webapps,如果Tomcat此时是在运行状态,它会自动解压war包(也可以配置它不自动解压),重启一下Tomcat,就可以看到war包被解压了,此时说明你的项目已经部署上去了。

(在服务器上面部署比较麻烦,最好是在本地自己安装一个Tomcat,把项目丢到webapps下,本地跑一下看能不能跑通,可以就说明没问题。但是注意要记得修改一些配置,如项目发送请求时的url、nginx的配置文件中的Server模块的配置,如反向代理的url,本地是localhost,服务器可能是你的IP或者域名+端口号。等跑通了再修改为服务器的配置,然后再上传部署到服务器,这样就减少了麻烦)

到这里前端nginx配置没问题,url发送没问题,Tomcat配置也没问题,本地也跑起来了,那么上传到此就已经部署完成了

注意点:

还有一个值得注意的点,项目在开发的时候用的Tomcat是什么版本,你在服务器安装的时候也最好是哪个版本。如果不是,会出现一些很无法理解的问题。

例如,如果是你的项目有问题,你的运行日志会出现报错。但是假如你的项目没问题(也就是你直接用打成jar包运行,项目的接口可以访问到,就是说明你的项目没问题)也按照上面的操作进行了部署(正确部署war包的操作),但是打成war包后放到Tomcat后,Tomcat也运行了,但是访问自己项目的接口就是访问不到,报了404这很可能是你自己的Tomcat的问题。因为jar自带Tomcat,它运行没问题,你自己配的Tomcat的却跑不通就很可能是你Tomcat配置有问题。

首先检查一下Tomcat的配置文件,例如我的在/usr/local/Tomcat/conf/server.xml,这个文件。里面的很多东西都不需要怎么改。最好是上网查一下每一个标签的意思以及作用,以免自己不知道怎么根据自己项目的需求来改,也可以确保你自己的配置没问题。最常改的是以下几个地方:

<Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443"                maxParameterCount="1000"                />

这个模块里面的port,也就是你的Tomcat启动占用的端口号,默认8080.

还有一个:Host模块里面的context

<Host name="localhost"  appBase="webapps"             unpackWARs="true" autoDeploy="true"> ​         <!-- SingleSignOn valve, share authentication between web applications              Documentation at: /docs/config/valve.html -->         <!--         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />         --> ​         <!-- Access log processes all example.              Documentation at: /docs/config/valve.html              Note: The pattern used is equivalent to using pattern="common" -->         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                prefix="localhost_access_log" suffix=".txt"                pattern="%h %l %u %t &quot;%r&quot; %s %b" />                           <Context path="/demo" docBase="/demo" debug="0" reloadable="true" />       </Host>

也就是它:

<Context path="/demo" docBase="/demo1" debug="0" reloadable="true" />

这个需要说一下:也很重要

Context的path属性来指定url最终访问的是哪个应用,而docBase指明该应用的具体物理存放地址。

什么意思呢?

例如现在我的一个项目叫demo1,里面有一个接口映射/test的请求:你的前端请求发送到url就需要这样去请求:http://IP:8080/demo/test,也就是要请求要加上你配的配置的path路径再+请求的接口。

同理,如果你path直接这样写:

<Context path="" docBase="/demo2" debug="0" reloadable="true" />

你直接访问:http:IP:8080/test 这个url就是访问demo2中的/test接口

所以就可以知道,path是访问项目的url需要带的前缀,也就是虚拟目录路径

docBase就是你项目真实存在服务器上的目录位置,可以是相对路径,也可以是绝对路径

一个Host标签内可以有很多个context标签,一个context就对应一个你的项目。同时也注意docBase不要写你的项目.war,我也是网上找的教程里面有这样写的,然后访问报404了。

回归正题

如果你server.xml配置没问题,然后jar包运行可以访问接口,war包却不可以,Tomcat不仅没有报错,看日志还给你提示这个:

看到了它说你的项目部署完成!!!然后高高兴兴的去访问一下:报了404

明明已经启动了,日志也没报错,Tomcat配置也没配错,前端页面可以展示(说明nginx前端部署没问题)我由于也配了反向代理,所以看一下反向代理的有没有出错

好的,那我就去看一下nginx,我把带/api/的请求转发给了后端,要注意的点我其他文章说了:

server {     listen       80;//这里改成你自己需要监听的端口号,默认80,其他端口号配完记得防火墙要开启对应端口     //location 后面加什么根据自己的需求加,如/ 就是匹配到http://ip:端口号/ 这个访问路径      server_name  localhost;//这个不改也可以,改也可以写你的ip或者域名     location / {         root   /usr/local/nginx/html/static; //设置这个访问路径的根目录,         index  index.html index.htm //在这个根目录下去寻找index.html                                     //index 表示访问这个地址的首页     } ​     location /api/{//这个需要与后端约定好,请求接口要怎么发,一般为/api/  标识这个请求是请求后端接口的         proxy_pass   http://localhost:8080/;   //写你后端服务的访问路径         //!!!!!!!!!!!!!!!!注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!         //需要注意的是,写 http://localhost:8080/ 与 http://localhost:8080 这两个转发到后端是不一样的         //如请求后端的/login 接口         // 前端发起http://localhost:8080/api/login         // 第一种端口后面带 / 的转发到后端是 http://localhost:8080/login         //而第二种端口后面不带 / 的转发到后端是 http://localhost:8080/api/login 如果是这个,后端的接口就应该配为/api/login,而不是直接/login      } ​ ​ }

我发现都没问题!!!

用postman发送请求测试一下,现在我的一个项目叫demo1,里面有一个接口映射/test的请求,Tomcat的server.xml的context这样配置:

<Context path="/demo" docBase="/demo1" debug="0" reloadable="true" />

我分别发送了:

http://IP:8080/demo/test 这一个请求,正常来说应该访问成功,可惜404.

再发送一个 http://IP:8080/test 这个按正常来讲肯定404,结果就是404.

那我再修改一下context:

<Context path="" docBase="/demo1" debug="0" reloadable="true" />

我分别发送了:

http://IP:8080/demo/test 这个按正常来讲肯定404,结果就是404.

再发送一个 http://IP:8080/test 这一个请求,正常来说应该访问成功,可惜404.

到此我很不理解为什么访问不成功,找了网上很多教程都是不适用的,就这样三天,每天找问题用几小时,还是找不出来

到了现在,再次用了一天的时间找这个问题,不断的分析,怎么发送请求都不可以,最后经过我的坚持与努力,终于找到了。就是Tomcat版本与你项目开发时用的Tomcat版本不一样。等我配了一个和我开发时一模一样的Tomcat时,对上面发的请求正常应该访问到的接口都访问到了,也不报404了。

所以,Tomcat版本和你开发时的Tomcat版本一样是最好的

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!