Apache Tomcat是Java Servlet,JavaServer Pages,Java Expression Language和Java WebSocket技术的开源实现。

它是当今世界上使用最广泛的应用程序和Web服务器之一。Tomcat易于使用,并具有强大的生态系统。本教程介绍如何在Ubuntu 20.04安装Tomcat 10。

Tomcat 10需要Java SE 8或更高版本。我们将安装OpenJDK 11,这是Java平台的开源实现。

以root用户或具有sudo权限的用户运行命令sudo apt update && sudo apt install openjdk-11-jdk安装Java。

安装完成后,运行命令Java --version检查是否安装正确。命令将会打印Java的版本。

以root运行Tomcat,具有安全风险。我们将创建普通用户运行Tomcat,配并将Tomcat用户的家目录设置为/opt/tomcat

运行useradd命令sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat

sudo apt update
sudo apt install openjdk-11-jdk
java -version
sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
openjdk version "11.0.5" 2019-10-15 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode, sharing)

下载Tomcat

Tomcat二进制发行可从Tomcat下载页面下载。在撰写本文时,最新的Tomcat版本是10.0.27。

在继续下一运行步之前,请检查Tomcat 10下载页面以查看是否有较新的版本。然后将运行wget命令将Tomcat tar.gz文件下载到Linux的临时目录/tmp

下载完成后,解压缩tar.gz文件到/opt/tomcat目录。

VERSION=10.0.27

wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz -P /tmp

sudo tar -xf /tmp/apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/

Tomcat会定期进行更新。为了更好地控制版本和更新,我们将创建一个名为latest符号链接,该链接指向Tomcat的安装目录。

运行chmod命令使bin目录中的shell脚本具有可执行权限,这些脚本用于启动和停止Tomcat。

将/opt/tomcat目录的所有权更改为tomcat用户和tomcat组,使tomcat用户可以访问 /opt/tomcat目录。运行命令sudo chown -R tomcat: /opt/tomcat

sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest

sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'
sudo chown -R tomcat: /opt/tomcat

创建Systemd服务单元

我们将其设置为服务运行,而不是手动启动和停止Tomcat服务器。

打开您喜欢的文本编辑器,创建文件tomcat.service在/etc/systemd/system/目录。在本教程中我们将使用vim创建文件

完成后,保存文件并退出vim。然后运行systemctl daemon-reload命令重新加载配置文件。

运行命令sudo systemctl enable --now tomcat启动Tomcat服务并自动启动。systemctl restart tomcat命令重启tomcat服务。

sudo vim /etc/systemd/system/tomcat.service

sudo systemctl daemon-reload
sudo systemctl enable --now tomcat
sudo systemctl restart tomcat
sudo systemctl status tomcat
[Unit]
Description=Tomcat 10 servlet container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
/etc/systemd/system/tomcat.service
● tomcat.service - Tomcat 10 servlet container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-01-15 20:38:07 UTC; 30s ago
  Process: 3957 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
  ...

配置防火墙

如果您Ubuntu 20.04正在运行防火墙服务UFW,并且您想从外部网络访问tomcat服务,则需要打开端口8080。运行sudo ufw allow 8080/tcp命令打开80端口。

通常,在生产环境中运行Tomcat时,应使用反向代理。最佳做法是只允许从内部网络访问端口8080

如果已经配置Nginx的反向代理,请运行最后两个ufw命令打开端口80和443。

sudo ufw allow 8080/tcp
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp

配置Tomcat Web

至此,您应该能够使用Web浏览器访问Tomcat。由于我们尚未创建用户,因此无法访问Tomcat管理界面。

我们可以在tomcat-users.xml文件中定义Tomcat用户和角色。继续使用vim编辑文件tomcat-users.xml。

创建tomcat Web用户manager-gui和admin-gui,如下所示。确保密码更改为更安全的密码。

sudo vim /opt/tomcat/latest/conf/tomcat-users.xml
<tomcat-users>
<!--
    Comments
-->
   <role rolename="admin-gui"/>
   <role rolename="manager-gui"/>
   <user username="admin" password="admin_password" roles="admin-gui,manager-gui"/>
</tomcat-users>
/opt/tomcat/latest/conf/tomcat-users.xml

默认情况下,Tomcat Web配置为仅允许从本地主机访问。如果您需要外部网络访问Web界面。

请打开/opt/tomcat/latest/webapps/manager/META-INF/context.xml文件并注释以下行。

通常,不建议从任何地方允许访问,因为这会带来安全风险。

<Context antiResourceLocking="false" privileged="true" >
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
/opt/tomcat/latest/webapps/manager/META-INF/context.xml

如果您只想从指定IP访问Tomcat Web,则无需注释这些xml片段,而是将您的外网IP添加到列表中。

允许的IP地址列表是用竖线|分隔的列表。您可以添加单个IP地址或使用正则表达式。

假设您的公开IP为41.41.41.41,而您只想仅从IP访问Tomcat Web。完成后,重新启动Tomcat服务以使更改生效。

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|41.41.41.41" />
</Context>
/opt/tomcat/latest/webapps/manager/META-INF/context.xml
sudo systemctl restart tomcat

测试安装

打开浏览器,输入URL ttp://<your_domain_or_IP_address>:8080。Tomcat Web允许您部署,取消部署,启动,停止和重新加载应用程序。

可以打开URL http://<your_domain_or_IP_address>:8080/manager/html找到它。

结论

我们已经向您展示了如何在Ubuntu 20.04安装Tomcat 10以及如何访问Tomcat管理界面。

有关Apache Tomcat的更多信息,请访问官方文档页面。如果您遇到问题或有反馈,请在下面发表评论。