前言
不知不觉来到大三,今年的J2EE课程要求开发基于手机和平板的Web端应用,最后展示需要多台手机平板同时进行。那么对我们而言,配置一台支持远程连接的服务器非常重要,我也希望将整个配置过程中遇到的重要地方记录下来,以供以后参考或分享给他人
起始环境
- 服务器来源:阿里云ECS
- 系统环境:Ubuntu16.04 64位
- JDK:1.8.0_181
- 已完成Tomcat等组件安装
- 内容:配置Tomcat,配置MySQL
配置Tomcat
基础参数
- Tomcat版本:apache-tomcat-9.0.12
- Tomcat路径:/home/server/apache-tomcat-9.0.12
详细过程
基础配置
IDEA路径配置
- !!!
- !!!
-
!!!
注意Mapped as路径的配置为war所在的路径,可为绝对路径,也可为相对路径!
端口映射HTTP
- 作用:修改访问端口为HTTP默认端口80,可省略访问端口号如:8080
- 步骤:
- 打开配置文件server.xml
/home/server/apache-tomcat-9.0.12# vim conf/server.xml
- 修改server.xml
在server.xml中寻找一个Connector,最初状态其属性port为8080,同时应含有一个属性为protocol其值包含HTTP,将8080改为80
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
- 保存退出
基于IDEA远程部署
- 作用:在使用IDEA完成编码后,运行Web项目使得IDEA自动将Web项目部署到远程服务器上
- 前言:网络上关于远程部署的客户端也就是IDEA配置教程特别多,而且也基本一致,本文不做赘述
-
原理分析:
IDEA的Remote Tomcat Server远程部署功能是基于Java的RMI功能,关于RMI不做赘述,我们只需要知道这个名字就行。但需要说明的是,RMI实际上有三个随机端口,对我们远程部署来说,需要使用其中的两个端口。对于IDEA而言,其Remote Tomcat Server配置需指定JMX端口(对应远程RMI端口),那么我们需要在远程服务器上指定并安全组开放RMI端口,使得IDEA能访问远程服务器RMI服务。
然而,包括官方教程在内几乎所有的的网络教程都到此为止,对有些人有用,对我们没用。这里我们需要回到上一段我提到的RMI在这个过程中需要开放两个端口,都是随机端口,那么仅对第一个RMI端口进行了指定与安全组开放,则第二个RMI端口仍然随机开放,但我们却没有在安全组内对其开放使得外网能访问该端口,客户端IDEA便会出现Connection Refused
异常。
于是,我们现在知道了,需要对两个随机端口进行指定并安全组开放 - 步骤:
-
安全组开放端口
RMI端口开放 - 配置
$Tomcat$/bin/catalina.sh
,在脚本代码前加入以下代码,建议刚好在代码前。
export CATALINA_OPTS="-Dcom.sun.management.jmxremote=
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=<你的服务器公网IP>"
- 重启Tomcat服务
-
注:
- 这里与大多数教程不一样的地方在于第三行,我们同时指定了额外的端口
Dcom.sun.management.jmxremote.rmi.port=1099
- 该额外端口与第二行端口均为1099,这里必须使两者相等,我试过很多组合并同时开放端口,都无法连接。这里以我目前的测试结果而言,唯有同时让两个端口被指定并且一致才能成功在IDEA上进行连接。因为RMI我暂时并用不到,故并不会去深究其机理,能用就够。
- 这里与大多数教程不一样的地方在于第三行,我们同时指定了额外的端口
问题解决
无法关闭tomcat服务器
-
描述:使用
sudo ./bin/catalina.sh stop
命令关闭,得到报错,且查看进程情况tomcat服务8005端口未开启。
SEVERE: Catalina.stop:
java.net.ConnectException: Connection refused (Connection refused)
-
原因:tomcat服务8005端口未开启,导致catalina无法经由端口访问tomcat关闭服务,进而
Connection refused
。此外,在多次测试中,8005端口有时会开启成功有时开启失败,导致该报错并非一定出现。 -
解决方案:
分析:网络上对于该问题的解决方案在我少量的阅读下,感觉上大多数方案均为更改非常重要的代码。其中有修改$JAVA_HOME$/jre/lib/security/Java.security/securerandom.source
配置项等方案,本着尽量不修改原生配置项的原则,我从tomcat没有成功在8005端口开启着手,得到了一个亲测能够解决的方案。
方案:首先通过startup.sh再次启动tomcat服务,再通过catalina.sh stop关闭(或者,等待tomcat启动完成亦可)
sudo ./bin/startup.sh
sudo ./bin/catalina.sh stop
-
注:
- 如果通过
sudo ./bin/startup.sh
也无法开启tomcat服务,则请忽略该方法 - 还有其他的问题是在tomcat服务8005端口已开启的情况下,发生
Connection refused
异常,我暂时没遇到。但有个可能有用的方案:解决方案 - 查看tomcat服务是否开启的命令:
netstat -an --ip
-
./bin/startup.sh
与./bin/catalina.sh start
功能一致
./bin/shutdown.sh
与./bin/catalina.sh stop
功能亦一致
原因在于startup.sh
与shutdown.sh
相当于是封装了上述后者的功能
- 如果通过
配置MySQL
基础参数
- MySQL版本:MySQL 5.7.23-0
- 路径:Ubuntu安装好后有全局变量配置,不需要了解安装路径
基础配置
数据库远程连接
- 作用:能使位于其他主机上的相关软件如IDEA能通过网络访问服务器上的MySQL服务,简化开发期间操作(其实就是不愿在服务器上手写SQL代码,自动完成都没有)
- 步骤:
-
开放ECS端口
在服务器对应的安全组加入如下内网入方向规则
安全组配置 - 开放MySQL服务端口至公网
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
上图有两个文件,按顺序查看并寻找bind-address
项,从127.0.0.1
改至0.0.0.0
,保存并重启MySQL。通过netstat -an --ip | grep 3306
查看当前网络活动,当出现下述项,:3306
前IP为0.0.0.0
时,表示设置成功
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
- 开放MySQL远程连接用户
本处建议新建供远程连接使用的用户而不是直接修改root
用户信息
grant all privileges on *.* to 'username'@'%' identified by 'password' with grant option;
flush privileges;
其中username
与password
自填希望使用的远程用户名与密码,当成功执行后,进入MySQL查看用户信息,此时应可以看到host
为%
的用户
select user, host from mysql.user
查看用户表结果
-
成功完成服务器配置,接下来以IDEA为例截图演示成功连接结果
成功连接远程MySQL服务器
结语
配环境真的很难,还需要耐心与细心,尽量要保证不中途放弃,才能在最后配置出成功的运行环境。欢迎大家关注或在下评论,指出我的问题或与我讨论
网友评论