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 "%r" %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了。