百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

我不是网管 - Debian 上安装 Apache Tomcat

lipiwang 2024-10-23 13:56 13 浏览 0 评论

Apache Tomcat 是一个免费和开源的 web 服务器,广泛用于托管用 Java 编程语言编写的 web 应用程序。它是 Jakarta Servlet 和 Jakarta 表达式语言 (以前是 Java Servlet 和 Java 表达式语言) 和其他 Java websocket 技术的实现。

Apache Tomcat 并不完全是类似 Apache 或 Nginx 意义上的 web 服务器。它是一个应用服务器,提供一个纯 Java HTTP 生态系统和基于 Java 的逻辑来服务 Java 代码。

在本指南中,我们将学习如何在 Debian 11 (Bullseye)上逐步安装 Apache Tomcat。

(1) 安装 OpenJDK

因为 Tomcat 是建立在 Java 之上的,所以第一步就是安装 OpenJDK 提供的 Java。我们将安装最新的 LTS 版本 OpenJDK 11

要安装 OpenJDK 11,请更新软件包列表

$ sudo apt update

然后执行以下命令安装 OpenJDK 11

$ sudo apt install openjdk-11-jdk -y

需要确认安装的 Java 版本,使用此命令

$ java -version

(2) 下载安装 Apache Tomcat

安装完 Java 之后,下一步是下载并安装 Apache Tomcat,在撰写本指南时,Apache Tomcat 的最新版本是 v10.0.18

访问官方 Apache Tomcat 下载页面,获取最新的二进制文件,或者使用如下的 wget 命令。

$ wget https://downloads.apache.org/tomcat/tomcat-10/v10.0.18/bin/apache-tomcat-10.0.18.tar.gz

接下来,在 /opt 目录中创建一个目录。

$ sudo mkdir /opt/tomcat

接下来,在 /opt /tomcat 路径中使用 tar 命令提取二进制文件

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

(3) 为 Tomcat 创建一个新的用户和组

使用 root 用户测试 web 应用程序通常不是一个好主意,因为该用户很容易被攻击者利用,从而导致系统破坏。

考虑到这一点,我们将创建一个可以访问 /opt /tomcat 目录的非 root 用户。

因此,创建一个名为 tomcat 的组。

$ sudo groupadd tomcat

接下来,创建 tomcat 用户,并将用户添加到 tomcat 组中,以 /opt /tomcat 作为主目录

$ sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

(4) 配置用户权限

接下来,我们将分别使用 Chown 和 Chomd 命令给 /opt /tomcat 目录设置用户和权限

$ sudo chown -R tomcat: /opt/tomcat
$ sudo sh -c 'chmod +x /opt/tomcat/bin/*.sh'

(5) 为 Apache Tomcat 创建 systemd 文件

我们需要使 Apache Tomcat 作为一个可以启动、停止和启用的系统服务在后台运行。默认情况下,Tomcat 不附带 systemd 单元文件,因此,我们将手动创建它,如下所示。

$ sudo vi /etc/systemd/system/tomcat.service

粘贴下面定义 systemd 服务文件的代码块

[Unit]
Description=Tomcat webs servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
RestartSec=10
Restart=always
Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.awt.headless=true -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
[Install]
WantedBy=multi-user.target

保存更改并退出文件,然后重新运行 systemd 生成器并重新加载所有单元文件。

$ sudo systemctl daemon-reload

需要确认 Java 默认路径,使用此命令

$ sudo update-java-alternatives -l

这与 systemd 服务文件中指定的路径一致,这意味着我们找到了正确的路径。

(6) 启用并启动 Tomcat 守护进程

准备好 Tomcat 的 systemd 文件后,启动 Apache Tomcat 守护进程,并使其在系统启动时启动。

$ sudo systemctl daemon-reload
$ sudo systemctl start tomcat
$ sudo systemctl enable tomcat

然后验证 Apache Tomcat 是否正在运行

$ systemctl status tomcat

从输出中,我们可以看到 Tomcat 守护进程正在运行,这意味着我们的配置没问题。

(7) 添加 Tomcat Admin 用户并配置角色

我们需要配置一个管理用户来访问 Tomcat web 页面上的服务器状态、主机管理器和管理器应用程序部分。否则,我们将在浏览器上遇到错误。

为此,我们将编辑 Tomcat 用户配置文件

$ sudo vi /opt/tomcat/conf/tomcat-users.xml

在 </tomcat-users> 标签之前粘贴以下代码行。随意指定自己的用户名和密码值。

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

保存更改并关闭配置文件

(8) 管理 Apache Tomcat 的远程访问

默认情况下,只能从主机系统访问 Tomcat 的 web 界面。因此,我们需要通过手动编辑 context.xml 配置文件来配置对 Tomcat Manager 的远程访问。

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

向下滚动并注释这些行

<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

保存文件并退出。接下来,我们需要允许远程访问 Host Manager。因此,编辑主机管理器的 context.xml 文件。

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

同样注释这些行

<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

保存更改并退出配置文件。要应用所做的所有更改,请重新启动 Tomcat。

$ sudo systemctl restart tomcat

(9) 访问 Apache Tomcat

Tomcat 现在已经完全配置好了,可以远程访问。还剩下最后一步。如果正在运行 UFW 防火墙,请考虑开放端口 8080,这是 Apache Tomcat 监听的默认端口。

$ sudo ufw allow 8080
$ sudo ufw reload

最后,要访问 Tomcat 的 web 界面,请启动浏览器并转到以下地址。

http://server-ip-addres:8080
or
http://youdomain.com:8080

这将把您带到 Tomcat web 服务器的默认主页,如图所示。

要访问服务器状态页面,请单击服务器状态。弹出窗口提示用户凭据。提供步骤 6 中指定的 Admin 登录凭证,并单击 Sign in。

类似地,当您访问 Tomcat 应用程序管理器时,会提示您输入相同的凭据,该应用程序管理器可以通过单击默认 web 界面上的管理器应用程序访问。

单击主机管理器将带您进入虚拟主机管理器部分,如图所示。

我的开源项目

  • course-tencent-cloud(酷瓜云课堂 - gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 - github 仓库)

相关推荐

前端入门——css 网格轨道详细介绍

上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...

Islands Architecture(孤岛架构)在携程新版首页的实践

一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...

HTML中script标签中的那些属性

HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...

CSS 中各种居中你真的玩明白了么

页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...

CSS样式更改——列表、表格和轮廓

上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...

一文吃透 CSS Flex 布局

原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...

css实现多行文本的展开收起

背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...

css 垂直居中的几种实现方式

前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...

WordPress固定链接设置

WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...

面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿

前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...

3种CSS清除浮动的方法

今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...

2025 年 CSS 终于要支持强大的自定义函数了?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...

css3属性(transform)的一个css3动画小应用

闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...

CSS基础知识(七)CSS背景

一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...

CSS 水平居中方式二

<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...

取消回复欢迎 发表评论: