如何在 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,请按照 如何添加域 上的指南进行操作。