eden icon indicating copy to clipboard operation
eden copied to clipboard

IDEA 部署项目到远程 Tomcat

Open OldBeLight opened this issue 7 years ago • 1 comments

IDEA 部署项目到远程 Tomcat

环境

Centos 6.5

tomcat 7

IntelliJ IDEA 2017.1.5

按着教程来

我按照下面的文章几乎一步不漏地执行了相应操作:

参考:http://blog.csdn.net/tianjun2012/article/details/52795202

为什么说是几乎,是因为他文章里提到了,如果服务器的外网地址需要在 /etc/hosts 做映射,然而这里没有详细说明怎么去做映射,我自己也不知道怎么操作,于是仅跳过了这一步

然而当我准备部署时,IDE 报错如下:

还有一个教程,大同小异,该报错还得报错。

参考:http://blog.lanyus.com/archives/197.html

错误,因为错过的细节

去网上搜索,参考如下文章的解释,IDEA 部署默认是需要开启一个叫做 JMX 的功能,但是 Tomcat 默认关闭了此功能。所以要么打开 JMX 功能,要么不使用 JMX 功能。

网上搜索怎么开启 JMX,发现确实是一个很繁琐的操作,tan90°

不使用 JMX 功能,为啥改 host 就能做到呢?host 与 JMX 有毛关系,这一点笔者还是没明白

参考:http://blog.csdn.net/Mark_LQ/article/details/52027363

类似而不一样的错误

既然教程原文中也提到了 host 需要做什么不可描述的映射,笔者考虑可能确实与 host 有关,于是搜索这方面的信息,发现很多人都通过修改 host 而成功解决问题。

http://www.codes51.com/itwd/1482825.html

http://blog.csdn.net/wingsyy_cs/article/details/53585750

http://www.wangchao.net.cn/it/detail_129876.html

但是这个解决方法对应的报错信息和我不一样。

他们的报错信息是Unable to ping server at localhost:1099

我的报错信息是Unable to connect to the [我的主机ip地址]:1099

别人都用这个方法成功解决了问题,而我却还是不行

退而求其次

我很不容易的翻到了唯一一个和我报错信息一致的问答帖

https://stackoverflow.com/questions/14085371/tomcat-intellij-idea-remote-deploy

然而他犯错太容易找出来了,少了一对""而已,很好改过来,我的错误在哪儿我还真是找死都没找出来。还好答主还提供了另一个方案,上传 war 包

其实我已经知道有这个方法了,之前简单学习 JavaWeb 的时候我就知道把工程放到 webapp 目录下就相当于是部署到 tomcat 下了,但是现在弄 spring 这个方法行不通,我就想一定有别的办法,于是知道了有上传 war 包这个方法了。

但是网上的说法是把 war 扔 webapp 下重启服务完事,现在想起来这个说法还真的是一点都没错厚

还是这个答主细心说明要把 war 改成 ROOT.war 然后再扔 webapp 下,不然就不能访问http://youripaddress:8080

刚开始我对手动上传 war 这个方法是拒绝的,这一点都不优雅,直接在 IDE 里点一个按钮就完成上传棒多了。但是鉴于我实在是被逼无奈,怎么行就怎么来吧。经过实践,发现还是得删掉 webapp 下的 ROOT 文件夹,不然还得显示 tomcat 那个页面

总结

我还是不懂改不改 host 和 jmx 有什么关系,我甚至不知道 host 或是 jmx 到底是干啥的

我还没有尝试开启 jmx 这个办法

我还是不能使用 IDEA 一键部署项目,退而求其次采用了上传 war 的方法

愿意好好把话说清楚的人都是大好人。如果教程帖能把关于 host 的东西也说明白就好了。而最后提到的问题答主那样详细的解答与补充,真的详细到让人感动。我不能要求别人怎么样,但是我对于自己写的文章一定是涉及到每个细节,我一直力求把所有的事情都讲得明明白白。不仅是在写文中,其实生活中的每一种信息传达方式,都应该把此放在第一位

OldBeLight avatar Jul 09 '18 03:07 OldBeLight

三年后的今天我也遇到了这个问题,报错也是 Unable to connect to the [我的主机ip地址]:1099。网上已有的教程很多方法都试了,也没用。 如果报错是 Unable to ping server at localhost:1099,修改服务器上的host映射到本机后应该能解决问题。我觉得host的作用也仅限于此,对remote sever上没作用。 后来在一个教程上看到,要开启服务器防火墙的1099端口,同时还要在阿里云安全组策略里开放1099端口(如果用的是阿里云服务器的话)。这个建议启发了我。 首先我发现Linux服务器上的防火墙显示mocked状态,也就是被禁用了。但是服务器提供商应该不会这么傻,没有任何安全措施,所以估计服务器外层还有安全组策略保护(我用的是公司的服务器节点)。在远端服务器tomcat开启的情况下,我用netstat -nat在linux上查看到,目前8080、22、1099这些端口都是打开的,处于listen状态。我在本地用 telnet [ip地址] 8080 命令是可以与服务器通话的,22端口(ssh和sftp的端口)也可以通话。但是 telnet [ip地址] 1099 却没有任何响应的。当我把 catalina.sh 里jmx端口从1099改成1090后,使用 telnet 仍然无法建立通话,即使linux里显示1090端口处于listen状态。 因此我猜测,服务器供应商在安全组策略里屏蔽了所有不常用端口,只留下如22、8080这些最常用的端口可以访问。我也不太可能去叫公司有关部门给我开1099端口,于是我想能不能利用其他常用端口给jmx使用。去网上搜了常用端口表,每一个端口试一次,先更改catalina.sh里的配置,启动后再用telnet试能否通信。最后发现,http的80端口可以使用,供应商应该没屏蔽这个常用端口。于是,把idea远程连接linux服务器教程里1099端口出现的位置,换成了80端口,idea里终于部署成功了。这个服务器目前就我在用,以后估计也不会直接用80端口,现在就先用着。idea部署起来真方便。 如果jmx这里配置不成功,不能用idea远程部署。可以直接用sftp将war包传到tomcat下的webapps文件夹,启动tomcat后也能把web项目跑起来。就像楼主说的。不过有一点和楼主不同,可以不用改成ROOT.war,不用覆盖原来的ROOT文件夹,只需要修改conf/server.xml 即可。具体做法: https://blog.csdn.net/xnn_fjj/article/details/90443271 这里面的 "Contex path= " 就对应每次访问的url下的相对路径,"docBase"对应webapps文件夹里项目的绝对路径。 这种方法每次部署需要删除原来的包,上传新war包,更改docBase(如果新war包名字变了),与idea相比总体来说还是有点麻烦。

onioncc3 avatar Jul 29 '21 06:07 onioncc3