这个话题的文章已经有很多人写,但每个人起点/途径/目的都可能不一样。
先介绍我写这篇博客的场景:
- 起点:Ubuntu 20.04 LTS x86-64 Server
- 途径:直接从apt仓库安装软件包,并大体按照Debian推荐的方式来配置
- 目的:可作开发自测环境(支持远程调试、支持一键WAR包部署),兼模拟生产环境(开启APR、开启SSL)
安装过程
注:下文中提到的Shell命令均不带sudo,请酌情添加sudo,或改通过用户root来执行
安装JDK
可直接从apt仓库安装OpenJDK,或下载Oracle JDK并解压到"/usr/lib/jvm"
apt-get update
apt-get install openjdk-11-jdk
设置环境变量JAVA_HOME(为了运行Tomcat)
# 编辑"/etc/profile.d/lib-home-path.sh"(重启后生效)
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.11
# 或者编辑"/etc/default/tomcat9"
JAVA_HOME=/usr/lib/jvm/jdk-11.0.11
安装Tomcat
apt-get install tomcat9
注:如果是在WSL2中安装tomcat9,安装是注册systemd服务会失败,导致无法使用像service tomcat start
这样的命令来启/停tomcat9。这个问题可通过启用systemd来解决,见WSL 2 - Enabling systemd
支持远程调试
# 编辑"/etc/default/tomcat9"
JAVA_OPTS="${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,address=0.0.0.0:8000,server=y,suspend=n"
验证远程调试启用成功
Tomcat启动后,通过命令`netstat -tlpn | grep -s :8080`检查8000端口是否被占用
避免在其他主机`telnet <ip> <port>`去检查,因为这样检查一次8000端口对应的进程就会退出
关于远程调试如何使用,请参见博文如Eclipse远程debug,或另行搜索
启用APR
安装Tomcat Native
apt-get install libtcnative-1
配置Tomcat Native(为了让Tomcat支持APR方式连接)
# 编辑"/var/lib/tomcat9/lib/setenv.sh"
export LD_LIBRARAY_PATH=/usr/lib/x86-64-linux-gnu
# 并通过`chmod +x setenv.sh`确保执行权限
使用APR
<!-- 编辑 server.xml, 设置useAprConnector="true",protocol="HTTP/1.1" -->
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" useAprConnector="true"/>
<Connector ... protocol="HTTP/1.1"></Connector>
<!-- 或者直接设置protocol="...Http11AprProtocol" (APR不可用时会报错)-->
<Connector ... protocol="org.apache.coyote.http11.Http11AprProtocol"></Connector>
验证APR正在使用中
执行`service tomcat9 start`启动Tomcat。查看启动日志,如果ProtocolHandler名称带apr字样,说明APR正在使用中(名称如http-apr-0.0.0.0-8080,https-openssl-apr-0.0.0.0-8443)
一键部署WAR包
安装Tomcat 的 Application Manager, Host Manager 两个webapp
apt-get install tomcat9 tomcat9-admin
注册Application Manager用户
<!-- 编辑"/var/lib/tomcat9/tomcat-users.xml" -->
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="manager" password="changeit" roles="manager-gui"/>
<user username="deployer" password="changeit" roles="manager-script"/>
</tomcat-users>
设置Application Manager允许被访问的客户端IP
<!-- 编辑"/usr/share/tomcat9-admin/manager/META-INF/context.xml",根据需要调整allow的值,或者注释掉该RemoteAddrValve -->
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
顺便改下webapp ROOT目录的所有者,否则通过Application Manager无法把ROOT卸掉
chown -R tomcat:tomcat /var/lib/tomcat9/webapps/ROOT
在开发机上使用maven-tomcat7-plugin来快速部署war包到此Tomcat
<!-- 编辑%UserProfile%\.m2\settings.xml 或 $HOME/.m2/settings.xml -->
<servers>
<server>
<id>tomcat-wsl</id>
<username>deployer</username>
<password>changeit</password>
</server>
</servers>
<!-- 编辑webapp项目的pom.xml -->
<build>
<finalName>${project.artifactId}##${project.version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<server>tomcat-wsl</server>
<path>/${project.artifactId}##${project.version}</path>
</configuration>
</plugin>
</plugins>
</build>
一键部署WAR包(其实至少要敲两个键:方向上+回车,而且至少要等到第二次部署时)
mvn tomcat7:deploy
开启SSL
开启SSL的方法,可以参见另一篇博客OpenSSL自签名SSL证书相关脚本的Tomcat章节
夜深了,先写到这