当前位置: 首页 > news >正文

828华为云征文 | Flexus X实例与华为云EulerOS的Tomcat安装指南

文章目录

    • 前言
    • 安全组设置
    • 操作步骤
      • 软件安装
      • 配置软件
      • 验证Tomcat安装是否成功
    • 总结

前言

Tomcat是一个由Apache软件基金会开发并维护的免费、开源的Web应用服务器。它主要用于处理Java Servlet、JavaServer Pages(JSP)和JavaServer Pages Standard Tag Library(JSTL)等Java EE技术,同时也可以作为静态内容的Web服务器。由于其轻量级、跨平台、易于部署和配置的特点,Tomcat成为了许多开发者和企业部署Web应用程序的首选。

在本教程中,我们将指导您如何在Flexus X实例上安装和部署Tomcat。

查看镜像信息
本地连接服务器之后输入指令 lsb_release -a 查看镜像信息

从镜像信息中我们可以看到我们使用的镜像是Huawei Cloud EulerOS

安全组设置

首先我们需要在服务器的安全组入口方向开放8080端口如下图所示

操作步骤

软件安装

1.1 执行以下命令安装Java

dnf install java-1.8.0-openjdk

1.2 执行如下命令验证是否安装成功

java -version

1.3 执行如下命令安装Tomcat

dnf install tomcat

注意此时Tomcat会被安装到<font style="color:rgb(25, 25, 25);">/usr/share/tomcat</font>目录

配置软件

2.1 编辑“/etc/profile”配置环境变量

在服务器中使用vim 进行环境变量配置 <font style="color:rgb(25, 25, 25);">vim /etc/profile</font> , 在<font style="color:rgb(25, 25, 25);">profile</font>中添加

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-0.hce2.x86_64/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH

2.2 激活环境变量

当配置好环境变量后通过命令 source /etc/profile来激活环境变量

2.3 清空“/usr/share/tomcat/conf/server.xml”文件中的内容,并重新进行配置,示例代码如下

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8006" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/><Listener className="org.apache.catalina.core.AprLifecycleListener"/><GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml"/></GlobalNamingResources><Service name="Catalina"><Connector port="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxThreads="1000"minSpareThreads="20"acceptCount="1000"maxHttpHeaderSize="65536"debug="0"disableUploadTimeout="true"useBodyEncodingForURI="true"enableLookups="false"URIEncoding="UTF-8"/><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="/data/wwwroot/default" unpackWARs="true" autoDeploy="true"><Context path="" docBase="/data/wwwroot/default" debug="0" reloadable="false" crossContext="true"/><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t %s %b"/></Host></Engine></Service>
</Server>

代码讲解:

<?xml version="1.0" encoding="UTF-8"?>

这行声明了XML文件的版本和编码方式。

<Server port="8006" shutdown="SHUTDOWN">

这行定义了Tomcat服务器的端口号为8006,并且定义了一个关闭命令,当服务器接收到这个命令时会关闭。

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>

这行定义了一个监听器,用于防止JRE内存泄露。

<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>

这行定义了一个监听器,用于管理全局资源的生命周期。

<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

这行定义了一个监听器,用于防止线程局部变量泄露。

<Listener className="org.apache.catalina.core.AprLifecycleListener"/>

这行定义了一个监听器,用于处理Apache的运行时库(APR)的生命周期。

<GlobalNamingResources>

这行开始定义全局命名资源,全局命名资源是Tomcat中的命名服务,用于存储用户、角色、权限等数据。

<Resource name="UserDatabase" auth="Container"  type="org.apache.catalina.UserDatabase"  description="User database that can be updated and saved"  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"  pathname="conf/tomcat-users.xml"/>

这行定义了一个名为<font style="color:rgb(25, 25, 25);">UserDatabase</font>的资源,它是一个用户数据库,可以被更新和保存。<font style="color:rgb(25, 25, 25);">factory</font>属性指定了这个资源是由<font style="color:rgb(25, 25, 25);">MemoryUserDatabaseFactory</font>创建的,并且路径是<font style="color:rgb(25, 25, 25);">conf/tomcat-users.xml</font>

</GlobalNamingResources>

这行结束全局命名资源的定义。

<Service name="Catalina">

这行定义了一个服务,服务是一组引擎的集合,它们可以共享资源和处理请求。

<Connector port="8080"  protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="8443"  maxThreads="1000"  minSpareThreads="20"  acceptCount="1000"  maxHttpHeaderSize="65536"  debug="0"  disableUploadTimeout="true"  useBodyEncodingForURI="true"  enableLookups="false"  URIEncoding="UTF-8"/>

这行定义了一个连接器,它监听8080端口,使用HTTP/1.1协议,并且定义了连接超时时间、重定向端口、最大线程数、最小空闲线程数、接受队列大小、最大HTTP头大小等参数。

<Engine name="Catalina" defaultHost="localhost">

这行定义了一个引擎,引擎是一个服务中的容器,它负责处理请求并创建响应。<font style="color:rgb(25, 25, 25);">defaultHost</font>属性指定了默认的主机名。

<Realm className="org.apache.catalina.realm.LockOutRealm">

这行定义了一个身份验证领域,用于验证用户的凭据。

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"   resourceName="UserDatabase"/>

这行定义了一个身份验证领域,它使用<font style="color:rgb(25, 25, 25);">UserDatabase</font>资源来验证用户。

</Realm>

这行结束身份验证领域的定义。

<Host name="localhost" appBase="/data/wwwroot/default" unpackWARs="true" autoDeploy="true">

这行定义了一个主机,主机是引擎中的容器,它负责处理来自特定主引擎中的容器,它负责处理来自特定主机的请求。appBase属性指定了应用程序的根目录,unpackWARs属性指定了是否在部署时解压WAR文件,autoDeploy属性指定了是否自动部署新应用程序。

<Context path="" docBase="/data/wwwroot/default" debug="0" reloadable="false" crossContext="true"/>

这行定义了一个上下文,上下文是主机中的容器,它负责处理来自特定路径的请求。<font style="color:rgb(25, 25, 25);">docBase</font>属性指定了应用程序的目录,<font style="color:rgb(25, 25, 25);">debug</font>属性指定了调试级别,<font style="color:rgb(25, 25, 25);">reloadable</font>属性指定了是否可以重新加载应用程序,<font style="color:rgb(25, 25, 25);">crossContext</font>属性指定了是否可以在上下文之间共享数据。

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t %s %b"/>

这行定义了一个阀门,用于记录访问日志。<font style="color:rgb(25, 25, 25);">directory</font>属性指定了日志文件的目录,<font style="color:rgb(25, 25, 25);">prefix</font><font style="color:rgb(25, 25, 25);">suffix</font>属性指定了日志文件的前缀和后缀,<font style="color:rgb(25, 25, 25);">pattern</font>属性指定了日志记录的格式。

2.4 执行以下命令创建上述配置中appbase和docbase填入的目录

mkdir -p /data/wwwroot/default

2.5 执行以下命令将上述目录所属用户设置为tomcat

chown -R tomcat.tomcat /data/wwwroot/ 

2.6 新建“/usr/share/tomcat/bin/setenv.sh”文件, 输入以下内容配置JVM内存参数。

JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom -server -Xms256m -Xmx496m -Dfile.encoding=UTF-8'

2.7 启动Tomcat服务

输入指令 <font style="color:rgb(25, 25, 25);">systemctl start tomcat</font> 启动Tomcat

2.8 查看Tomcat服务状态

输入指令 <font style="color:rgb(25, 25, 25);">systemctl status tomcat</font>查看Tomcat服务状态, 如果显示active (running)则表示服务启动成功。

验证Tomcat安装是否成功

输入指令 echo Tomcat test > /data/wwwroot/default/index.jsp<font style="color:rgb(26, 32, 41);">Tomcat test</font>写入到<font style="color:rgb(26, 32, 41);">/data/wwwroot/default/index.jsp</font>文件中, 同时在浏览器中输入<font style="color:rgb(25, 25, 25);">http://<Tomcat服务公网IP>:8080</font>进行访问, 效果如下图所示

总结

在本篇博客中,我们详细介绍了如何在华为云的EulerOS镜像上安装Tomcat,这一过程不仅加深了我们对Flexus X实例的理解,也让我们对华为云提供的EulerOS镜像有了更全面的认知。此外,正值华为云828 B2B企业节期间,Flexus X实例的促销活动十分诱人,不容错过。对于那些追求高性能算力和需要自行搭建MySQL、Redis、Nginx等服务的用户来说,这个优惠机会非常宝贵。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智能监测,守护未来:QY-19 GNSS位移监测站
  • 揭秘IP地址与SSL证书:构建数字世界的信任桥梁
  • LabVIEW如何自学成为专业开发者
  • yocto传递宏(bitbake传递宏)
  • 联盟营销案例:策略与成功故事
  • 【Linux】gcc/g++ 、make/Makefile、git、gdb 的使用
  • LiveQing视频点播流媒体RTMP推流服务功能-支持大疆等无人机RTMP推流支持OBS推流一步一步搭建RTMP视频流媒体服务示例
  • 日志系统前置知识
  • C++第四十六弹---解锁多线程编程的奥秘:<thread>库深入探索
  • Django+Vue3前后端分离学习(四)(登录功能实现)
  • 景联文科技:提供高质量多模态数据标注,推动智能化转型
  • Google数字车钥匙:引领汽车互动新纪元
  • GitHub Copilot的详细介绍
  • 15 Python模块
  • IDEA Maven 源修改为国内阿里云镜像的正确方式
  • 【EOS】Cleos基础
  • Javascript设计模式学习之Observer(观察者)模式
  • java多线程
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • npx命令介绍
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 闭包,sync使用细节
  • 多线程事务回滚
  • 技术:超级实用的电脑小技巧
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 译米田引理
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​一些不规范的GTID使用场景
  • #、%和$符号在OGNL表达式中经常出现
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #define、const、typedef的差别
  • #NOIP 2014# day.1 T2 联合权值
  • #控制台大学课堂点名问题_课堂随机点名
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $NOIp2018$劝退记
  • (11)MSP430F5529 定时器B
  • (3)nginx 配置(nginx.conf)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Python) SOAP Web Service (HTTP POST)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (八)Spring源码解析:Spring MVC
  • (二)斐波那契Fabonacci函数
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET DataGridView数据绑定说明
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .Net面试题4
  • .NET企业级应用架构设计系列之技术选型
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @ModelAttribute使用详解