如何在Ubuntu20.04上安装ApacheTomcat10

来自菜鸟教程
跳转至:导航、​搜索

如何在 Ubuntu 20.04 上安装 Apache Tomcat 10

介绍

Apache Tomcat 是一个 Web 服务器和 servlet 容器,用于为 Java 应用程序提供服务。 它是 Jakarta Servlet、Jakarta Server Pages 和 Jakarta EE 平台的其他技术的开源实现。

在本教程中,您将在 Ubuntu 20.04 上部署 Apache Tomcat 10。 您将安装 Tomcat 10,设置用户和角色,并浏览管理用户界面。

先决条件

第 1 步 — 安装 Tomcat

在本节中,您将在服务器上设置 Tomcat 10。 首先,您将下载其最新版本并为其设置单独的用户和适当的权限。 您还将安装 Java 开发工具包 (JDK)。

出于安全考虑,Tomcat 应该在单独的非特权用户下运行。 运行以下命令创建一个名为 tomcat 的用户:

sudo useradd -m -d /opt/tomcat -U -s /bin/false tomcat

通过提供 /bin/false 作为用户的默认 shell,您可以确保无法以 tomcat 身份登录。

您现在将安装 JDK。 首先,通过运行更新包管理器缓存:

sudo apt update

然后,通过运行以下命令安装 JDK:

sudo apt install default-jdk

提示继续安装时回答 y。

安装完成后,检查可用 Java 安装的版本:

java -version

输出应该与此类似:

Outputopenjdk version "11.0.14" 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)

要安装 Tomcat,您需要 Tomcat 10 的最新 Core Linux 版本,您可以从 下载页面 获得该版本。 选择最新的 Core Linux 版本,以 .tar.gz 结尾。 在撰写本文时,最新版本是 10.0.20。

首先,导航到 /tmp 目录:

cd /tmp

通过运行以下命令,使用 wget 下载存档:

wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.20/bin/apache-tomcat-10.0.20.tar.gz

wget 命令从 Internet 下载资源。

然后,通过运行提取您下载的存档:

sudo tar xzvf apache-tomcat-10*tar.gz -C /opt/tomcat --strip-components=1

由于您已经创建了一个用户,您现在可以通过运行以下命令授予 tomcat 对提取安装的所有权:

sudo chown -R tomcat:tomcat /opt/tomcat/
sudo chmod -R u+x /opt/tomcat/bin

这两个命令都会更新 tomcat 安装的设置。 要了解有关这些命令及其作用的更多信息,请访问 Linux 权限基础和如何在 VPS 上使用 Umask。

在此步骤中,您安装了 JDK 和 Tomcat。 您还为它创建了一个单独的用户并设置了对 Tomcat 二进制文件的权限。 您现在将配置用于访问 Tomcat 实例的凭据。

第 2 步 — 配置管理员用户

要访问 Manager 和 Host Manager 页面,您将在 Tomcat 的配置中定义特权用户。 您将需要删除 IP 地址限制,这会禁止所有外部 IP 地址访问这些页面。

Tomcat 用户在 /opt/tomcat/conf/tomcat-users.xml 中定义。 使用以下命令打开文件进行编辑:

sudo nano /opt/tomcat/conf/tomcat-users.xml

在结束标记之前添加以下行:

/opt/tomcat/conf/tomcat-users.xml

<role rolename="manager-gui" />
<user username="manager" password="manager_password" roles="manager-gui" />

<role rolename="admin-gui" />
<user username="admin" password="admin_password" roles="manager-gui,admin-gui" />

用您自己的密码替换突出显示的密码。 完成后,保存并关闭文件。

在这里,您定义了两个用户角色,manager-gui 和 admin-gui,它们分别允许访问 Manager 和 Host Manager 页面。 您还定义了两个具有相关角色的用户,manager 和 admin。

默认情况下,Tomcat 配置为限制对管理页面的访问,除非连接来自服务器本身。 要使用您刚刚定义的用户访问这些页面,您需要编辑这些页面的配置文件。

要取消对 Manager 页面的限制,请打开其配置文件进行编辑:

sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml

注释掉Valve定义,如图:

opt/tomcat/webapps/manager/META-INF/context.xml

...
<Context antiResourceLocking="false" privileged="true" >
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.Csr>
</Context>

保存并关闭文件,然后对 Host Manager 重复:

sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

您现在已经定义了两个用户,manager 和 admin,稍后您将使用它们来访问管理界面的受限部分。 您现在将为 Tomcat 创建一个 systemd 服务。

第 3 步 — 创建 systemd 服务

您现在将创建的 systemd 服务将使 Tomcat 在后台安静地运行。 systemd 服务也会在出现错误或失败时自动重启 Tomcat。

Tomcat 本身就是一个 Java 应用程序,它需要存在 Java 运行时,您在步骤 1 中随 JDK 一起安装了它。 在创建服务之前,您需要知道 Java 的位置。 您可以通过运行以下命令来查看它:

sudo update-java-alternatives -l

输出将与此类似:

Outputjava-1.11.0-openjdk-amd64      1111       /usr/lib/jvm/java-1.11.0-openjdk-amd64

注意 Java 所在的路径,列在最后一列中。 您暂时需要路径来定义服务。

您将 tomcat 服务存储在 /etc/systemd/system 下名为 tomcat.service 的文件中。 通过运行创建文件以进行编辑:

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

添加以下行:

/etc/systemd/system/tomcat.service

[Unit]
Description=Tomcat
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

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

RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

如果 JAVA_HOME 的突出显示值与您之前记下的不同,请修改它。

在这里,您定义了一个服务,该服务将通过执行它提供的启动和关闭脚本来运行 Tomcat。 您还设置了一些环境变量来定义其主目录(与以前一样为 /opt/tomcat)并限制 Java VM 可以分配的内存量(在 CATALINA_OPTS 中)。 失败后,Tomcat 服务会自动重启。

完成后,保存并关闭文件。

重新加载 systemd 守护程序,以便它知道新服务:

sudo systemctl daemon-reload

然后,您可以通过键入以下内容来启动 Tomcat 服务:

sudo systemctl start tomcat

然后,查看它的状态,确认它启动成功:

sudo systemctl status tomcat

输出将如下所示:

Output● tomcat.service - Tomcat
     Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-03-11 14:37:10 UTC; 2s ago
    Process: 4845 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 4860 (java)
      Tasks: 15 (limit: 1132)
     Memory: 90.1M
     CGroup: /system.slice/tomcat.service
             └─4860 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties ...

按q退出命令。

要启用 Tomcat 随系统启动,请运行以下命令:

sudo systemctl enable tomcat

在此步骤中,您确定了 Java 所在的位置并启用 systemd 以在后台运行 Tomcat。 现在,您将通过 Web 浏览器访问 Tomcat。

第 4 步 — 访问 Web 界面

现在 Tomcat 服务正在运行,您可以配置防火墙以允许连接到 Tomcat。 然后,您将能够访问其 Web 界面。

Tomcat 使用端口 8080 来接受 HTTP 请求。 运行以下命令以允许到该端口的流量:

sudo ufw allow 8080

在浏览器中,您现在可以通过导航到服务器的 IP 地址来访问 Tomcat:

http://your_server_ip:8080

您将看到默认的 Tomcat 欢迎页面:

您现在已经验证了 Tomcat 服务正在运行。

按下右侧的 Manager App 按钮。 系统将提示您输入您在上一步中定义的帐户凭据。

您应该会看到如下所示的页面:

Web 应用程序管理器用于管理您的 Java 应用程序。 您可以从此处启动、停止、重新加载、部署和取消部署它们。 您还可以在您的应用程序上运行一些诊断程序(例如,查找内存泄漏)。 有关您的服务器的信息可在此页面的最底部找到。

现在,看看 Host Manager,可以通过在主页上按下它的按钮来访问:

在这里,您可以添加虚拟主机来为您的应用程序提供服务。 请记住,未分配 admin-gui 角色的用户无法访问此页面,例如 manager。

结论

您在 Ubuntu 20.04 服务器上安装了 Tomcat 10,并将其配置为可以使用管理帐户远程访问。 您现在可以使用它来部署基于 Jakarta EE 技术的 Java 应用程序。 您可以通过访问官方文档了解更多关于Java应用程序的信息。

目前,您的 Tomcat 安装正常,但其流量未加密。 这意味着所有数据(包括密码等敏感项目)都以纯文本形式发送,互联网上的其他方可以截获和读取这些数据。 为防止这种情况发生,您可以将域名添加到您的服务器并在其上安装 TLS 证书 ,本教程使用 Apache 或 Nginx 保护 Tomcat 10。 有关加密的更多信息,请参阅 Let's Encrypt 简介。 要将域添加到 DigitalOcean Droplet,请按照 如何添加域 上的指南进行操作。