华为云Linux云服务器搭建Tomcat:从零开始部署Java Web应用服务器
1. 引言:为什么选择华为云Linux服务器部署Tomcat
在云计算时代,将Java Web应用部署到云端已成为开发者和企业的主流选择。华为云弹性云服务器(Elastic Cloud Server,ECS)凭借其稳定的性能、灵活的资源伸缩能力以及高性价比,成为众多Java开发者的首选云平台之一。Tomcat作为Apache软件基金会旗下的开源Web应用服务器,以其轻量级、高性能和稳定的Servlet容器特性,在Java Web开发领域占据重要地位。本文将带领读者在华为云Linux云服务器上从零开始搭建Tomcat,涵盖环境准备、软件安装、配置优化、应用部署、安全加固和运维监控等全链路内容,帮助读者将本地开发的Java Web应用顺利发布到云端。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. 准备工作:华为云ECS弹性云服务器的选购与创建
2.1 选择云服务器规格
在华为云控制台中创建ECS实例时,需要根据应用的预期负载选择合适的规格。对于中小型Java Web应用,推荐使用以下配置:
- 计费模式:包年/包月适合长期稳定运行的生产环境;按需计费适合开发测试或短期项目。
- 规格:入门级推荐c7.large.2(2核4GB);高并发场景可选择c7.xlarge.2(4核8GB)或更高配置。
- 镜像:可选择CentOS 7.4/7.9 64bit、Huawei Cloud EulerOS(HCE)或Ubuntu 18.04/20.04 LTS。
- 系统盘:建议至少40GB,如需存储大量日志或应用文件可适当扩容。
- 弹性公网IP:选择"现在购买",线路推荐全动态BGP,带宽根据访问量选择(如5Mbit/s)。
2.2 安全组规则配置
安全组是华为云最重要的网络访问控制手段。创建ECS后,需要配置安全组入方向规则,允许外部访问Tomcat服务。默认情况下,Tomcat监听8080端口,因此必须放行TCP 8080端口。如果后续配置了HTTPS,还需要放行443端口。安全组规则配置建议如下:
- 规则1:优先级1,策略允许,类型IPv4,协议端口TCP:8080,源地址0.0.0.0/0(允许公网访问)。
- 规则2:优先级1,策略允许,类型IPv4,协议端口ICMP:全部,源地址0.0.0.0/0(允许ping测试)。
- 规则3(可选):如需SSH远程连接,需放行TCP:22端口,源地址建议限制为特定IP段以提高安全性。
2.3 远程连接工具准备
在Windows系统上,推荐使用PuTTY作为SSH远程访问工具,使用WinSCP作为文件传输工具。在Linux或macOS系统上,可直接使用系统自带的SSH命令:ssh root@你的弹性公网IP。
3. 安装JDK:Java运行环境的核心
Tomcat运行依赖Java环境,因此安装JDK是搭建Tomcat的第一步。华为云Linux服务器支持多种JDK安装方式,以下分别介绍Yum/DNF安装和手动安装两种方法。
3.1 方法一:使用Yum/DNF包管理器安装OpenJDK
这是最简便的安装方式,适用于CentOS、HCE等基于Red Hat的发行版。
# 更新yum缓存(可选)
sudo yum update -y
# 安装OpenJDK 1.8
sudo yum install java-1.8.0-openjdk -y
# 或安装完整版JDK(包含开发工具)
sudo yum install java-1.8.0-openjdk-devel -y
# 验证安装
java -version
对于Huawei Cloud EulerOS(HCE),使用dnf命令:
sudo dnf install java-1.8.0-openjdk -y
java -version
安装完成后,OpenJDK通常被安装在/usr/lib/jvm/目录下。
3.2 方法二:手动下载安装Oracle JDK
如果项目需要使用Oracle JDK,可前往Oracle官网下载Linux版本的tar.gz包,然后手动解压安装。
# 创建JDK安装目录
sudo mkdir -p /usr/local/java
# 将下载的jdk tar.gz包上传至服务器(如使用WinSCP)
# 或直接使用wget下载(需获取具体下载链接)
# 解压到指定目录
sudo tar -zxvf jdk-8u***-linux-x64.tar.gz -C /usr/local/java/
# 重命名解压后的文件夹(便于后续配置)
sudo mv /usr/local/java/jdk1.8.0_*** /usr/local/java/jdk1.8
3.3 配置JDK环境变量
无论采用哪种安装方式,都需要配置JAVA_HOME环境变量,以便系统能够找到Java命令。
# 编辑/etc/profile文件
sudo vi /etc/profile
# 在文件末尾添加以下内容(根据实际JDK路径调整)
# 对于OpenJDK,路径通常为:/usr/lib/jvm/java-1.8.0-openjdk-xxx/jre
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.xxx-xxxx
# 对于Oracle JDK,路径为:/usr/local/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 保存并退出,然后执行以下命令使配置生效
source /etc/profile
# 再次验证
java -version
echo $JAVA_HOME
4. 安装Tomcat:多种方式任你选择
Tomcat的安装同样支持多种方式,读者可根据实际需求灵活选择。
4.1 方法一:使用Yum/DNF包管理器安装Tomcat
这是最简单的安装方式,但需要注意Yum源中的Tomcat版本可能较旧。
# CentOS 7需先安装EPEL源
sudo yum install epel-release -y
# 安装Tomcat
sudo yum install tomcat -y
# 安装完成后,Tomcat被安装在/usr/share/tomcat目录
# 启动Tomcat
sudo systemctl start tomcat
# 设置开机自启动
sudo systemctl enable tomcat
4.2 方法二:手动下载安装Tomcat(推荐)
手动安装可以自由选择Tomcat版本,且便于自定义配置,是生产环境的推荐方式。
# 创建Tomcat安装目录
sudo mkdir -p /usr/local/tomcat
# 进入该目录
cd /usr/local/tomcat
# 使用wget下载Tomcat(以8.5.85版本为例)
sudo wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.85/bin/apache-tomcat-8.5.85.tar.gz
# 解压
sudo tar -zxvf apache-tomcat-8.5.85.tar.gz
# 创建软链接,方便版本升级
sudo ln -s /usr/local/tomcat/apache-tomcat-8.5.85 /usr/local/tomcat/latest
# 设置目录权限(Tomcat运行用户需有执行权限)
sudo chown -R root:root /usr/local/tomcat/latest/
sudo chmod +x /usr/local/tomcat/latest/bin/*.sh
4.3 配置Tomcat环境变量
设置CATALINA_HOME环境变量,使Tomcat命令全局可用。
# 编辑/etc/profile
sudo vi /etc/profile
# 添加以下内容
export CATALINA_HOME=/usr/local/tomcat/latest
export PATH=$PATH:$CATALINA_HOME/bin
# 使配置生效
source /etc/profile
5. 启动Tomcat并验证服务
5.1 启动Tomcat
手动安装的Tomcat通过startup.sh和shutdown.sh脚本控制启停。
# 进入Tomcat的bin目录
cd $CATALINA_HOME/bin
# 启动Tomcat
./startup.sh
# 查看启动日志
tail -f $CATALINA_HOME/logs/catalina.out
当日志中出现"Server startup in xxx ms"字样时,表示Tomcat已成功启动。
5.2 验证访问
在浏览器中输入 http://你的弹性公网IP:8080,如果看到Tomcat的默认首页(一只猫的图标),说明部署成功。如果无法访问,请按以下顺序排查:
- 确认安全组已放行8080端口。
- 确认ECS已绑定弹性公网IP。
- 确认Tomcat进程正在运行:
ps -ef | grep tomcat。 - 检查防火墙是否阻断了8080端口:
systemctl status firewalld。
6. 部署Java Web应用(WAR包)
将开发完成的Java Web应用部署到Tomcat是搭建服务器的最终目的。传统部署方式是将WAR包复制到Tomcat的webapps目录下。
6.1 部署WAR包
# 将WAR包上传至服务器(使用WinSCP或scp命令)
# 然后将WAR包复制到webapps目录
cp /path/to/your-app.war $CATALINA_HOME/webapps/
# Tomcat会自动解压WAR包并部署应用
# 查看日志确认部署成功
tail -f $CATALINA_HOME/logs/catalina.out
部署完成后,可通过 http://你的弹性公网IP:8080/应用名 访问应用。如果将WAR包命名为 ROOT.war,则应用会部署在根路径下,可直接通过 http://你的弹性公网IP:8080 访问。
6.2 使用Manager App部署
Tomcat自带的Manager App提供了Web界面的部署方式,适合开发测试环境。需要在 conf/tomcat-users.xml 中配置管理员账号。
<role rolename="manager-gui"/>
<user username="admin" password="your_password" roles="manager-gui"/>
配置完成后重启Tomcat,访问 http://你的IP:8080/manager/html 即可通过界面上传部署WAR包。
7. 配置Tomcat开机自启动
生产环境要求服务器重启后Tomcat能够自动启动。以下是两种常见的配置方法。
7.1 方法一:使用systemd服务(推荐)
创建 /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-1.8.0.xxx
Environment=CATALINA_HOME=/usr/local/tomcat/latest
Environment=CATALINA_BASE=/usr/local/tomcat/latest
ExecStart=/usr/local/tomcat/latest/bin/startup.sh
ExecStop=/usr/local/tomcat/latest/bin/shutdown.sh
User=root
Group=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后执行以下命令启用服务:
sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
sudo systemctl status tomcat
7.2 方法二:使用rc.local(传统方式)
# 编辑/etc/rc.local
sudo vi /etc/rc.local
# 在exit 0之前添加一行
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-xxx && /usr/local/tomcat/latest/bin/startup.sh
# 赋予执行权限
sudo chmod +x /etc/rc.local
8. Tomcat性能优化:让应用飞起来
在生产环境中,合理的性能优化可以显著提升Tomcat的并发处理能力和响应速度。
8.1 线程池与连接数优化
在 conf/server.xml 中配置Connector参数:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="50"
acceptCount="200"
maxHttpHeaderSize="65536"
disableUploadTimeout="true"
useBodyEncodingForURI="true"
enableLookups="false"
URIEncoding="UTF-8"/>
- maxThreads:Tomcat可创建的最大线程数,建议根据服务器CPU核心数设置(一般200-1000)。
- minSpareThreads:最小空闲线程数,建议设为50-100。
- acceptCount:请求队列的最大长度,超过此数值的请求将被拒绝。
- connectionTimeout:连接超时时间,单位毫秒。
8.2 启用NIO连接器
NIO(Non-blocking I/O)连接器比传统的BIO具有更好的并发性能:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" .../>
8.3 开启静态资源压缩与缓存
在Connector中开启Gzip压缩,减少网络传输量:
<Connector ... compression="on" compressionMinSize="1024" />
在 conf/web.xml 中配置静态资源缓存:
<mime-mapping>
<extension>js</extension>
<mime-type>application/javascript</mime-type>
</mime-mapping>
<!-- 在web-app中添加缓存控制 -->
<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType text/css</param-name>
<param-value>access plus 1 day</param-value>
</init-param>
</filter>
8.4 JVM参数调优
编辑 bin/catalina.sh,在文件开头添加JVM参数:
export JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=256m -XX:+UseG1GC"
- Xms:初始堆内存大小。
- Xmx:最大堆内存大小,建议不超过服务器物理内存的70%。
- MaxMetaspaceSize:元空间最大大小。
- UseG1GC:使用G1垃圾回收器,适合大内存应用。
9. Tomcat安全加固:保护你的Web应用
9.1 修改默认端口
将默认的8080端口改为其他端口(如8088),降低被扫描攻击的风险。
<Connector port="8088" protocol="HTTP/1.1" .../>
9.2 修改Shutdown端口和命令
Tomcat默认的shutdown端口为8005,命令为"SHUTDOWN",应予以修改:
<Server port="8006" shutdown="COMPLEX_SHUTDOWN_CMD">
9.3 禁用Manager和Host-manager应用
删除或重命名 webapps 目录下的 manager 和 host-manager 文件夹,防止未授权访问。
9.4 配置HTTPS(SSL证书)
为Tomcat配置HTTPS是生产环境的必要步骤。首先在华为云SSL证书管理服务中申请或上传证书,下载Tomcat格式的证书文件(包含 .jks 证书文件和密码文件)。
在 conf/server.xml 中添加HTTPS Connector配置:
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="200" scheme="https" secure="true"
keystoreFile="/path/to/your_certificate.jks"
keystorePass="your_keystore_password"
clientAuth="false" sslProtocol="TLS"/>
配置完成后,确保安全组已放行443端口。
9.5 目录权限最小化
设置应用程序目录权限为500,仅对必要目录开放写权限。禁用自动部署功能,仅部署经过验证的WAR包。
10. 日志管理与监控告警
10.1 Tomcat日志文件
Tomcat的日志文件位于 $CATALINA_HOME/logs/ 目录下:
- catalina.out:主日志文件,包含启动信息和运行时输出。
- localhost.log:应用部署相关日志。
- manager.log:Manager App操作日志。
- access_log:访问日志(需在server.xml中配置AccessLogValve)。
查看实时日志:
tail -f $CATALINA_HOME/logs/catalina.out
10.2 华为云云日志服务(LTS)
华为云云日志服务(Log Tank Service,LTS)可以集中采集和存储Tomcat日志。在ECS上安装ICAgent日志采集工具后,即可将 catalina.out 等日志文件上报到LTS,实现日志的搜索、分析和告警。
10.3 华为云云监控服务(Cloud Eye)
通过华为云云监控服务(Cloud Eye)监控ECS和Tomcat的运行状态。可配置以下告警规则:
- CPU使用率超过80%
- 内存使用率超过85%
- 磁盘使用率超过80%
- Tomcat进程意外退出(需配合自定义监控脚本)
11. 常见问题与故障排查
11.1 端口被占用
启动Tomcat时提示端口已被占用。解决方法:
# 查看端口占用情况
netstat -tlnp | grep 8080
# 杀死占用端口的进程,或修改server.xml中的端口号
11.2 权限不足
执行启动脚本时提示"Permission denied"。解决方法:
chmod +x $CATALINA_HOME/bin/*.sh
11.3 外部无法访问
确保安全组已放行8080端口,且ECS已绑定弹性公网IP。可尝试在服务器本地使用 curl http://localhost:8080 测试,若本地可访问但外部不可访问,则问题出在安全组或防火墙。
11.4 JDK版本不匹配
Tomcat启动失败,日志提示Java版本错误。检查 java -version 输出的版本是否满足Tomcat要求(Tomcat 8需JDK 7+,Tomcat 9需JDK 8+)。
11.5 内存溢出(OutOfMemoryError)
调整JVM堆内存参数,在 catalina.sh 中增大 -Xmx 值。同时检查应用代码是否存在内存泄漏。
12. 总结
本文完整地介绍了在华为云Linux云服务器上搭建Tomcat的全过程,从ECS的选购与创建、安全组配置、JDK安装、Tomcat安装与启动、WAR包部署,到性能优化、安全加固、日志监控和故障排查,覆盖了从零到生产环境部署的所有关键环节。华为云弹性云服务器与Tomcat的组合,为Java Web应用提供了一个稳定、高效、可扩展的运行平台。希望本文能够帮助读者顺利完成在华为云上的Tomcat部署,将优秀的Java Web应用安全、高效地呈现给最终用户。
Q&A:常见问题速答
Q1:华为云ECS上安装Tomcat必须使用root用户吗?
A1:不必须。建议创建专用用户(如tomcat)运行Tomcat服务,以提高安全性。但使用root用户操作更为简便,适合开发测试环境。
Q2:Tomcat默认端口8080被占用怎么办?
A2:修改 conf/server.xml 中的Connector端口号,改为其他未被占用的端口(如8088),同时需要在华为云安全组中放行新端口。
Q3:部署WAR包后访问出现404错误是什么原因?
A3:可能原因包括:WAR包未成功解压(检查webapps目录下是否有对应文件夹)、访问路径错误(应为 /应用名)、应用本身存在配置问题(查看catalina.out日志)。
Q4:如何查看Tomcat的实时运行日志?
A4:使用 tail -f $CATALINA_HOME/logs/catalina.out 命令可实时查看主日志输出。
Q5:Tomcat服务重启后无法自动启动怎么办?
A5:检查systemd服务配置文件(/etc/systemd/system/tomcat.service)中的JAVA_HOME和CATALINA_HOME路径是否正确,然后执行 systemctl daemon-reload && systemctl enable tomcat 重新启用服务。
Q6:华为云ECS的安全组规则修改后需要重启ECS吗?
A6:不需要。安全组规则是实时生效的,修改后立即生效,无需重启云服务器。




