如何在Ubuntu20.04上安装ApacheTomcat10

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

如何在 Ubuntu 20.04 上安装 Apache Tomcat 10

介绍

Apache Tomcat 是一个 Web 服务器和 servlet 容器,用于为 Java 应用程序提供服务。 它是 Jakarta ServletJakarta Server PagesJakarta 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 步 — 配置管理员用户

要访问 ManagerHost 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-guiadmin-gui,它们分别允许访问 ManagerHost Manager 页面。 您还定义了两个具有相关角色的用户,manageradmin

默认情况下,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

您现在已经定义了两个用户,manageradmin,稍后您将使用它们来访问管理界面的受限部分。 您现在将为 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,请按照 如何添加域 上的指南进行操作。