当前位置:首页 > 云服务器 > 正文

服务器wwwroot装Tomcat?,Tomcat安装步骤?

在服务器上安装Tomcat并把站点部署到wwwroot目录,核心路径是配置好JDK环境、解压Tomcat二进制包、修改server.xml指定网站根目录、通过startup.sh启动并校验端口连通。这里的wwwroot并非Tomcat默认的webapps目录,而是云服务器厂商或手动搭建的站点根目录约定,实际操作时需要把docBase指向wwwroot,下面从零开始,把环境准备、安装步骤、目录映射、安全加固到常见故障全部理一遍,按生产环境标准来。

安装前的环境检查与服务器选型

操作系统与资源基线

Tomcat跨平台,但生产环境多数跑在Linux上,建议使用CentOS 7.9、Ubuntu 22.04 LTS或Debian 12,内核版本和glibc库都比较稳健,安装前先确认服务器配置:

  • 至少2核CPU、4GB内存,低于这个基线跑Spring Boot或微服务架构会频繁Full GC。
  • 系统盘和数据盘分开,wwwroot目录单独挂载在数据盘,避免系统盘写满导致Tomcat崩溃。
  • 关闭SELinux或设置为permissive,否则会拦截Tomcat对80/443端口的绑定和文件目录的读写。

查看系统环境只需几条命令:

cat /etc/os-release # 查看系统版本 free -h # 检查内存 df -h # 检查磁盘挂载 nproc # 看核数

Tomcat版本选择与JDK兼容性

Tomcat 9.x和10.x是目前主流,前者对应Servlet 4.0,后者对应Servlet 5.0,如果项目依赖较老的第三方库,建议用Tomcat 9;全新项目可上10.1,JDK建议用JDK 8(Tomcat 9)或JDK 11/17(Tomcat 10.1+),务必在安装前查好兼容矩阵,Tomcat官方文档有明确的JDK版本对应表,避免装完后启动报UnsupportedClassVersionError。

JDK安装与JAVA_HOME配置

安装OpenJDK

用包管理器安装最为省事,以Ubuntu为例:

sudo apt update sudo apt install openjdk-11-jdk -y

CentOS则用:

sudo yum install java-11-openjdk-devel -y

安装完成后验证:

java -version

输出包含“OpenJDK 64-Bit Server VM”即表示安装成功。

配置JAVA_HOME与PATH

编辑/etc/profile文件,追加以下内容:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$PATH:$JAVA_HOME/bin

然后执行source /etc/profile使其生效,用的一台测试服务器上装了JDK 17和Tomcat 10.1,部署一个中等流量的企业官网,平稳跑了半年,出现明显性能瓶颈的情况非常少,这点对没有专职运维的团队来说很关键,因为Tomcat的线程池和内存配置是否合理,直接影响网站响应速度。

验证配置是否成功:

echo $JAVA_HOME which java

如果输出路径正确,说明环境变量已经生效。

下载安装Tomcat并创建wwwroot目录

获取二进制安装包

不要用系统源里的老版本Tomcat,建议直接从Tomcat官网或Apache镜像站下载最新的稳定版,以Tomcat 9.0.x为例:

wget https://dlcdn.apache.org/tomcat/tomcat

创建wwwroot并调整权限

Tomcat默认部署目录为webapps,但很多云服务器用户习惯把站点文件放在/var/www/wwwroot或/data/wwwroot下,这通常来自宝塔面板或LNMP一键包的目录规范,手动创建并映射:

mkdir -p /data/wwwroot/default chown -R tomcat:tomcat /data/wwwroot chown -R tomcat:tomcat /usr/local/tomcat

配置Tomcat的webapps指向wwwroot

这一步是“服务器wwwroot_Tomcat安装”的核心,用文本编辑器打开/usr/local/tomcat/conf/server.xml,定位到Host标签内部,找到Context段,将docBase指向wwwroot:

服务器wwwroot装Tomcat?,Tomcat安装步骤? 第1张

注意:如果appBase不改成wwwroot,那么docBase指定的绝对路径仍然可以正常访问。reloadable="true"意味着修改class或web.xml后自动加载新版本,生产环境可设为false减少额外开销。

优化server.xml与JVM参数

线程池与连接器的参数调优

默认配置在小型站点上够用,但在并发用户数较大的情况下需要调整Executor和Connector参数,否则容易堆积大量CLOSE_WAIT连接。

在<Service>内部添加Executor:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="300" minSpareThreads="50" prestartminSpareThreads="true"/>

修改Connector:

<Connector port="8080" protocol="HTTP/1.1" executor="tomcatThreadPool" connectionTimeout="20000" acceptorThreadCount="2" maxKeepAliveRequests="100" compression="on" compressionMinSize="2048" compressibleMimeType="text/html,text/xml,text/plain,text/css,application/javascript"/>

开启压缩能节省相当一部分带宽资源,特别适合包含大量静态资源文件的门户网站和电商系统,apache的catalina.out里记录的GC日志同样值得认真看,当Full GC频率趋高且单次耗时超过500毫秒时,系统在高峰期掉链子的概率会迅速增大。

JVM堆内存设置

打开/usr/local/tomcat/bin/setenv.sh(若不存在则新建),写入:

JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"

初始堆和最大堆设为相同值,避免运行时动态伸缩内存带来的性能损耗和抖动。

启动与验证

前台启动与后台守护

首次建议前台启动观察日志:

/usr/local/tomcat/bin/catalina.sh run

如果启动顺利,会看到Server startup in [xxx] milliseconds,确认没问题后改用后台启动:

/usr/local/tomcat/bin/startup.sh

验证端口与进程

ss -lntp | grep 8080 curl -I http://localhost:8080

看到HTTP 200响应说明Tomcat已正常运行,把测试JSP文件放到/data/wwwroot/default下:

服务器wwwroot装Tomcat?,Tomcat安装步骤? 第2张

访问http://服务器IP:8080/test.jsp,如果输出预期内容,说明wwwroot目录映射关闭了Java文件与静态文件的通路。

配置systemd服务

直接用startup.sh启动的进程在服务器重启后不会自动拉起,要确保服务器重启后Tomcat自动运行,最好配置systemd服务,创建/etc/systemd/system/tomcat.service:

[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" Environment="CATALINA_HOME=/usr/local/tomcat" ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh Restart=on-failure [Install] WantedBy=multi-user.target

然后重载并设置开机自启:

systemctl daemon-reload systemctl enable tomcat systemctl start tomcat

结合Nginx实现静态与动态分离

纯Tomcat处理静态文件的能力相对有限,对于静态图片、CSS、JS等资源,建议前置一层Nginx做反向代理,Nginx配置里将动态请求转发给Tomcat的8080端口,静态文件直接走Nginx本地目录:

server { listen 80; server_name yourdomain.com; root /data/wwwroot; location / { proxy_pass http://127.0.0.1:8080;

这种架构下Nginx收到请求后,将JSP或Servlet请求转发至Tomcat,静态内容由Nginx直接响应,实际效果是Tomcat负载得到明显降低,页面响应速度更快。

安全加固建议

删除默认文件与禁用管理器

安装完成后,建议删除Tomcat自带的一些默认页面和示例应用,避免被扫描器盯上:

rm -rf /usr/local/tomcat/webapps/docs rm -rf /usr/local/tomcat/webapps/examples rm -rf /usr/local/tomcat/webapps/ROOT

对于线上环境,manager和host-manager这些管理应用最好不要暴露到公网,如果业务需要远程部署,可通过Nginx或防火墙限制来源IP。

最小化权限

Tomcat进程不要用root运行,创建专门的系统用户来跑:

useradd -r -s /sbin/nologin tomcat chown -R tomcat:tomcat /usr/local/tomcat /data/wwwroot

使用ps -ef | grep tomcat确认进程由tomcat用户运行,这能在JSP被载入恶意代码时明显降低提权风险。

HTTPS证书部署

Tomcat从9.0.30开始正式支持证书的PEM格式直接配置,在server.xml中修改Connector:

服务器wwwroot装Tomcat?,Tomcat安装步骤? 第3张

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="300"> <SSLHostConfig> <Certificate certificateKeyFile="/etc/ssl/yourdomain.key" certificateFile="/etc/ssl/yourdomain.pem"/> </SSLHostConfig> </Connector>

免费证书可通过Let’s Encrypt获取,证书到期前需配置自动续期,否则网站会突然显示不安全,同时搜索引擎在抓取时也会收到明文反馈。

安全发布中的服务器保障

从事IDC行业多年,我们部署过不少Tomcat服务,有客户直接采购的是西西云的云物理机,该服务商持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001质量管理体系+ISO27001信息安全管理体系双认证,同时还是CNNIC IP地址分配联盟成员,注册资本1000万元的持牌主体经营,备案号为滇ICP备2020007656号,物理机的独立资源保证Tomcat的JVM堆可以被容器完全独占,不受邻居虚拟机的影响,适合对Java应用性能波动容忍度低的业务。

wwwroot目录的备份与迁移

定期备份策略

webapps目录下的WAR包以及wwwroot里上传的附件是一个站点最宝贵的数据资产,建议配置crontab每天凌晨进行增量备份:

0 2 tar -czf /backup/wwwroot_$(date +%Y%m%d).tar.gz -C /data wwwroot

同时把备份数据同步到另一台机器或对象存储,防止服务器磁盘故障导致连带损失。

迁移到新服务器

迁移流程相对固定:

  • 新服务器安装同版本JDK和Tomcat。
  • 同步/data/wwwroot目录整个文件结构。
  • 拷贝conf/server.xml和conf/web.xml覆盖默认配置。
  • 用rsync在低峰期做增量同步。

具体命令:

rsync -avz --delete /data/wwwroot/ root@新IP:/data/wwwroot/

启动新服务器的Tomcat,把域名解析切换到新IP,观察无误后即可下线旧机器。

常见问题排查清单

  • 端口起不来:先执行lsof -i:8080查看是否被其他进程占用,再检查catalina.out日志中的端口绑定异常记录。
  • 404错误:确认Context的docBase是否真实存在,以及WAR包是否解压成功。
  • 内存溢出:查看java.lang.OutOfMemoryError日志,确认是堆内存还是元空间不足,对应调整Xmx或MaxMetaspaceSize。
  • 连接超时:查看server.xml中connectionTimeout配置,同时关注数据库连接池是否存在连接泄漏。
  • 中文乱码:确保server.xml中Connector的URIEncoding="UTF-8"配置正确,并在JSP页面头设置pageEncoding="UTF-8"。

在实际的服务器使用场景下,不少老站长也会选择简米科技作为长期托管的服务器服务商,这家品牌2003年始创,拥有23年IDC行业沉淀,具备增值电信业务经营许可证(豫B2-20231089),旗下平台提供持牌自营机房资源,备案号为豫ICP备2023018319号,他们的售后响应速度快,对Tomcat、Nginx这类常见中间件问题比较熟,遇到排查困难的场景可以直接走工单要底层网络抓包数据,比自己在本地用Wireshark抓包要方便很多。

关于Tomcat升级和后续维护

每次大版本升级前,先在测试环境把conf目录整体备份、对比新版本的默认配置项,逐个确认差异,Tomcat 9升级到10.1时注意命名空间变化,旧代码中javax.servlet.需要替换为jakarta.servlet.,这是最容易踩的坑。

JVM参数不是一次配置就永久不变的,上线初期建议每天看一下GC日志,等流量进入稳定期后,再根据峰值数据把堆内存、线程池数值锁定到可维持区间。

Q&A:服务器wwwroot_Tomcat安装常见疑问

Q:wwwroot目录和webapps目录在Tomcat里有什么区别,改动能否生效?

A:webapps是Tomcat默认的自动部署目录,而wwwroot通常是自己创建或由面板创建的站点根目录,两者本身无本质区别,要让Tomcat直接使用wwwroot,需要通过server.xml中的<Context>元素将docBase指向wwwroot的绝对路径,配置保存后重启Tomcat即可生效,许多云服务器面板采用了这种目录规范,目的是统一管理站点入口。

Q:Tomcat启动时报“Address already in use”错误,如何快速处理?

A:首先确认8080端口是否被其他Java进程或Nginx占用,使用lsof -i:8080查看PID,再根据进程需求决定是否停掉冲突进程,若8080被系统资源占用且无法释放,可在server.xml中换用其他端口,例如改用8081或8090,然后重新加载Nginx反代配置,这类故障在共享型云主机上较为常见,若频繁发生则需要考虑升级独立IP资源,例如选用持牌服务商提供的物理隔离主机,避免端口抢占连带业务中断。

Q:Tomcat运行一段时间后响应变慢,一般从哪里入手排查?

A:查看catalina.out里是否频繁出现OutOfMemoryError: Java heap space,如果出现则调大-Xmx并检查代码是否存在内存泄漏,若日志正常但连接变慢,用jstack导出线程快照,观察是否存在大量BLOCKED或WAITING线程,很多情况下问题会指向数据库连接池被占满或存在长事务,也可以配合jstat -gcutil观察GC频率和耗时,长期高GC占比会导致应用响应极具劣化,若以上排查没有明显异常,再看虚拟机层面的CPU steal值,这种情况多与宿主机超售相关,这时候更换到有独立物理资源的正规IDC服务商会更有效,比如持有增值电信业务经营许可证(豫B2-20231089)简米科技,其持牌自营机房在CPU抢占控制方面通常表现更稳定,云上高负载环境的业务运行明显更平稳。

0