昨天整一个idea远程部署,搞得头破血流的,整理一下,免得下次受苦。
几个常用资源
- tomcat
http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.17/bin/apache-tomcat-9.0.17.tar.gz
- jdk
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
- mysql
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
服务端tomcat配置
在tomcat安装目录/bin/catalina.sh 脚本中添加一下命令,注意双引号之间是传递给JVM的参数,一个-D就是一个KV设置,保险起见每行后面留个空格,因为不知道换行符会不会生效。
CATALINA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1099 #idea默认jmx端口
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.3.68 #与本机域名或者ip保持一致即可
-agentlib:jdwp=transport=dt_socket,address=15833,suspend=n,server=y" #jdwp调试端口15833
export CATALINA_OPTS
用以下命令运行tomcat,不要用startup脚本
./catalina.sh run &
idea deploy设置
菜单栏Tools->Deployment->Configure->左上角+按钮:
输入部署的别名,比如Test,点击OK
按照上图的说明填写对应的资料。
如果是ubuntu系统,SFTP协议是默认启用的,账号密码和SSH登录的一样是主机用户,填完点击Test SFTP connection测试一下。这里踩了一坑,还自己搭FTP服务器,慢的要死。
idea 运行设置
菜单栏Run->Edit Configurations->左上角+按钮->Tomcat Server->remote:
按照图中的说明填写对应的资料,Tomcat Server Settings中的设置,就使用前面的deploy设置即可。
这里的Application Server设置也踩了一坑,因为是部署到远端的tomcat,我以为是要填写或者映射到服务器tomcat的路径,差点就搭一个smb服务出来。实际上这里是要本机的tomcat环境,用来解决项目编译依赖的,选择你本机安装的tomcat目录即可。
遇到的问题
防火墙设置
tomcat运行起来之后,默认是在8080端口,但是访问云主机,是无法打开测试页面的,这是因为云主机的防火墙拦截了,要手动打开你需要的端口。
除了8080以外,还有jdwp端口,rmi等你需要的端口都要打开,不用再关掉。出连接错误了,就看看是不是防火墙设置问题。
tomcat重装后启动失败
我买的是阿里云主机,其他的大概也一样。云主机有一个随机的id和一个固定的内部ip,它是通过/etc/hosts来配置的。在云主机上部署tomcat不知道为啥要去解析id对应的主机,如果解析失败就无法启动。如果报这个错误,用以下命令恢复主机映射即可。
echo "172.17.x.x iZXXXZ" >> /etc/hosts
ip地址是你云主机的内部地址,iZXXXZ是报错的主机id。就是这玩意折腾了我半宿,最后找阿里云客服给的解决方案。
idea部署失败
配置完后使用run直接部署服务或者debug,在本地的虚拟机上是可以的,但是在云主机上,就回报java rmi 连接超时,查看防火墙的端口1099是开放的,换Idea的rmi端口也不行。
这个没找到解决办法,只能在部署、调试的时候把tcp端口都打开,完事再关掉了。如果是正式上线,就想办法手动拷贝吧。