介绍
Apache Tomcat 是一个 Web 服务器和 servlet 容器,用于为 Java 应用程序提供服务。 Tomcat 是由 Apache 软件基金会发布的 Java Servlet 和 JavaServer Pages 技术的开源实现。 本教程涵盖了 Ubuntu 16.04 服务器上最新版本 Tomcat 8 的基本安装和一些配置。
先决条件
在开始阅读本指南之前,您应该在您的服务器上设置一个具有 sudo
权限的非 root 用户。 您可以通过完成我们的 Ubuntu 16.04 初始服务器设置指南 来了解如何执行此操作。
第 1 步:安装 Java
Tomcat 要求在服务器上安装 Java,以便可以执行任何 Java Web 应用程序代码。 我们可以通过使用 apt-get 安装 OpenJDK 来满足这个要求。
首先,更新您的 apt-get 包索引:
sudo apt-get update
然后使用 apt-get 安装 Java Development Kit 包:
sudo apt-get install default-jdk
现在 Java 已经安装好了,我们可以创建一个 tomcat
用户,用来运行 Tomcat 服务。
第 2 步:创建 Tomcat 用户
出于安全考虑,Tomcat 应该以非特权用户身份运行(即 不是根)。 我们将创建一个新的用户和组来运行 Tomcat 服务。
首先,新建一个tomcat
组:
sudo groupadd tomcat
接下来,创建一个新的 tomcat
用户。 我们将使该用户成为 tomcat
组的成员,主目录为 /opt/tomcat
(我们将在其中安装 Tomcat),外壳为 /bin/false
(所以没有人可以登录该帐户):
sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
现在我们的 tomcat
用户已经设置好了,让我们下载并安装 Tomcat。
第三步:安装Tomcat
安装 Tomcat 8 的最佳方式是下载最新的二进制版本,然后手动配置。
在 Tomcat 8 下载页面 找到最新版本的 Tomcat 8。 在撰写本文时,最新版本是 8.5.5,但如果可用,您应该使用更高的稳定版本。 在 Binary Distributions 部分下,然后在 Core 列表下,将链接复制到“tar.gz”。
接下来,切换到服务器上的 /tmp
目录。 这是一个下载临时项目的好目录,比如 Tomcat 压缩包,解压 Tomcat 内容后我们不需要它:
cd /tmp
使用 curl
下载您从 Tomcat 网站复制的链接:
curl -O http://apache.mirrors.ionfish.org/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.tar.gz
我们将 Tomcat 安装到 /opt/tomcat
目录。 创建目录,然后使用以下命令将存档解压缩到该目录:
sudo mkdir /opt/tomcat sudo tar xzvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
接下来,我们可以为我们的安装设置适当的用户权限。
第 4 步:更新权限
我们设置的 tomcat
用户需要能够访问 Tomcat 安装。 我们现在就设置它。
切换到我们解压 Tomcat 安装的目录:
cd /opt/tomcat
授予 tomcat
组对整个安装目录的所有权:
sudo chgrp -R tomcat /opt/tomcat
接下来,授予 tomcat
组对 conf
目录及其所有内容的读取权限,以及对目录本身的 execute 访问权限:
sudo chmod -R g+r conf sudo chmod g+x conf
使 tomcat
用户成为 webapps
、work
、temp
和 logs
目录的所有者:
sudo chown -R tomcat webapps/ work/ temp/ logs/
现在设置了适当的权限,我们可以创建一个 systemd 服务文件来管理 Tomcat 进程。
第 5 步:创建 systemd 服务文件
我们希望能够将 Tomcat 作为服务运行,因此我们将设置 systemd 服务文件。
Tomcat 需要知道 Java 的安装位置。 此路径通常称为“JAVA_HOME”。 查找该位置的最简单方法是运行以下命令:
sudo update-java-alternatives -l
Outputjava-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64
正确的 JAVA_HOME
变量可以通过获取最后一列的输出(以红色突出显示)并将 /jre
附加到末尾来构建。 鉴于上面的示例,此服务器的正确 JAVA_HOME
将是:
JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre
您的 JAVA_HOME
可能不同。
有了这条信息,我们就可以创建systemd服务文件了。 通过键入以下命令在 /etc/systemd/system
目录中打开一个名为 tomcat.service
的文件:
sudo nano /etc/systemd/system/tomcat.service
将以下内容粘贴到您的服务文件中。 如有必要,修改 JAVA_HOME
的值以匹配您在系统上找到的值。 您可能还想修改 CATALINA_OPTS
中指定的内存分配设置:
/etc/systemd/system/tomcat.service
[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh User=tomcat Group=tomcat UMask=0007 RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
完成后,保存并关闭文件。
接下来,重新加载 systemd 守护进程,让它知道我们的服务文件:
sudo systemctl daemon-reload
通过键入以下内容启动 Tomcat 服务:
sudo systemctl start tomcat
通过键入以下内容仔细检查它是否启动时没有错误:
sudo systemctl status tomcat
第 6 步:调整防火墙并测试 Tomcat 服务器
现在 Tomcat 服务已经启动,我们可以测试以确保默认页面可用。
在我们这样做之前,我们需要调整防火墙以允许我们的请求到达服务。 如果您遵循先决条件,您当前将启用 ufw
防火墙。
Tomcat 使用端口 8080
来接受常规请求。 通过键入以下内容允许到该端口的流量:
sudo ufw allow 8080
修改防火墙后,您可以通过在 Web 浏览器中转到您的域或 IP 地址后跟 :8080
来访问默认启动页面:
Open in web browserhttp://server_domain_or_IP:8080
除了其他信息之外,您还将看到默认的 Tomcat 启动页面。 但是,例如,如果您单击 Manager App 的链接,您将被拒绝访问。 我们可以接下来配置该访问。
如果您能够成功访问 Tomcat,那么现在是启用服务文件以便 Tomcat 在引导时自动启动的好时机:
sudo systemctl enable tomcat
第 7 步:配置 Tomcat Web 管理界面
为了使用 Tomcat 自带的 manager web app,我们必须添加一个登录到我们的 Tomcat 服务器。 我们将通过编辑 tomcat-users.xml
文件来做到这一点:
sudo nano /opt/tomcat/conf/tomcat-users.xml
您需要添加一个可以访问 manager-gui
和 admin-gui
(Tomcat 附带的 Web 应用程序)的用户。 您可以通过在 tomcat-users
标记之间定义用户来实现,类似于下面的示例。 确保将用户名和密码更改为安全的:
tomcat-users.xml — 管理员用户
<tomcat-users . . .> <user username="admin" password="password" roles="manager-gui,admin-gui"/> </tomcat-users>
完成后保存并关闭文件。
默认情况下,较新版本的 Tomcat 将对 Manager 和 Host Manager 应用程序的访问限制为来自服务器本身的连接。 由于我们在远程机器上安装,您可能希望删除或更改此限制。 要更改这些 IP 地址限制,请打开相应的 context.xml
文件。
对于 Manager 应用程序,键入:
sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml
对于主机管理器应用程序,键入:
sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml
在里面,注释掉 IP 地址限制以允许从任何地方进行连接。 或者,如果您只想允许访问来自您自己的 IP 地址的连接,您可以将您的公共 IP 地址添加到列表中:
Tomcat webapps 的 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>
完成后保存并关闭文件。
要使我们的更改生效,请重新启动 Tomcat 服务:
sudo systemctl restart tomcat
第 8 步:访问 Web 界面
现在我们已经创建了一个用户,我们可以在 Web 浏览器中再次访问 Web 管理界面。 再次,您可以通过在浏览器中的端口 8080 上输入服务器的域名或 IP 地址来访问正确的界面:
Open in web browserhttp://server_domain_or_IP:8080
您看到的页面应该与您之前测试时给出的页面相同:
让我们看一下 Manager App,可通过链接或 http://server_domain_or_IP:8080/manager/html
访问。 您将需要输入您添加到 tomcat-users.xml
文件中的帐户凭据。 之后,您应该会看到如下所示的页面:
Web 应用程序管理器用于管理您的 Java 应用程序。 您可以在此处启动、停止、重新加载、部署和取消部署。 您还可以在您的应用程序上运行一些诊断程序(即 发现内存泄漏)。 最后,有关您的服务器的信息可在此页面的最底部找到。
现在让我们看一下主机管理器,可通过链接或 http://server_domain_or_IP:8080/host-manager/html/
访问:
在 Virtual Host Manager 页面中,您可以添加虚拟主机来为您的应用程序提供服务。
结论
Tomcat 安装完成! 您现在可以自由部署自己的 Java Web 应用程序了!
目前,您的 Tomcat 安装正常,但完全未加密。 这意味着所有数据(包括密码等敏感项目)都以纯文本形式发送,互联网上的其他方可以截获和读取这些数据。 为了防止这种情况发生,强烈建议您使用 SSL 加密您的连接。 您可以按照 本指南 了解如何加密与 Tomcat 的连接。