如何在 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,设置用户和角色,并浏览管理用户界面。
先决条件
- 一台具有 sudo 非 root 用户和防火墙的 Ubuntu 20.04 服务器,您可以按照 Ubuntu 20.04 初始服务器设置 进行设置。
第 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,请按照 如何添加域 上的指南进行操作。