服务器上部署Tomcat服务器
在服务器上部署Tomcat需先下载官方二进制包,解压至目标目录;配置环境变量(如JAVA_HOME和CATALINA_HOME);通过bin/startup.sh(Linux/macOS)或startup.bat(Windows)启动服务;默认监听8080端口,可通过conf/server.xml修改;部署应用可将WAR包放入webapps目录,Tomcat会自动解压运行;建议设置防火墙规则、启用HTTPS并调整JVM参数以保障安全与性能。
服务器上如何部署Tomcat——从零构建高可用、可审计、可运维的生产级Servlet容器
Apache Tomcat 不仅是Java Web应用的事实标准运行时,更是企业级中间件架构中承上启下的关键枢纽,但现实中,90%以上的线上故障并非源于代码缺陷,而是源于非标准化部署:root权限启动、默认端口暴露、管理界面未关闭、日志无轮转、JVM参数未调优……本文摒弃“能跑就行”的临时思维,以金融级系统运维视角,完整呈现一套经百台节点验证的Tomcat生产部署范式——涵盖环境基线校验、最小权限隔离、配置原子化管理、网络层纵深防御、可观测性嵌入及自动化演进路径,全程可复制、可审计、可回滚。
环境基线:不止于JDK,更要验证运行时契约
Tomcat 10.1+ 强制要求 JDK 17+(LTS),且需为 server JRE 或完整JDK(非headless版),执行前务必确认:
✅ `java -version` 输出含 `17.0.x` 且非 `openjdk version "17.0.x"` 后带 `+xx-xxx` 的预发布标识;
✅ `java -XX:+PrintFlagsFinal -version | grep UseG1GC` 返回 `true`(G1 GC为现代生产首选);
✅ 系统最大文件句柄数 ≥ 65536(`ulimit -n`,否则高并发下连接耗尽)。
Ubuntu 22.04 安装OpenJDK 17并固化环境变量(避免shell会话级失效):
sudo apt update && sudo apt install -y openjdk-17-jdk-headless sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1 echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' | sudo tee -a /etc/profile.d/java.sh source /etc/profile.d/java.sh # 验证:echo $JAVA_HOME && $JAVA_HOME/bin/java -version
安全获取与最小化解压
切勿使用zip包(Windows换行符易致startup.sh执行失败),从Apache官方CDN下载SHA-512校验后的tar.gz包:
cd /opt
sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.26/bin/apache-tomcat-10.1.26.tar.gz
sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.26/bin/apache-tomcat-10.1.26.tar.gz.sha512
sha512sum -c apache-tomcat-10.1.26.tar.gz.sha512 # 校验通过再解压
sudo tar -xzf apache-tomcat-10.1.26.tar.gz
sudo mv apache-tomcat-10.1.26 tomcat
sudo chown -R root:root /opt/tomcat
sudo find /opt/tomcat -type f -exec chmod 644 {} \;
sudo find /opt/tomcat -type d -exec chmod 755 {} \;
核心安全加固:三道防线不可妥协
- 权限隔离:创建无shell、无home目录的专用用户
sudo useradd -r -s /sbin/nologin -d /opt/tomcat tomcat
sudo chown -R tomcat:tomcat /opt/tomcat - 配置最小化:
▸
conf/server.xml:关闭AJP(除非明确需要Apache HTTPD反向代理),启用HTTP/2支持,强制重定向HTTPS:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" ... redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" ... />▸conf/tomcat-users.xml:生产环境必须清空全部内容,禁止任何形式的本地管理账户; ▸conf/web.xml:设置<init-param><param-name>listings</param-name><param-value>false</param-value></init-param>禁用目录浏览。 - JVM深度调优(写入
bin/setenv.sh):
export CATALINA_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.security.egd=file:/dev/./urandom"
生产就绪服务化:systemd + 健康检查
在/etc/systemd/system/tomcat.service中增加ExecReload与HealthCheck:
[Service] ... ExecReload=/opt/tomcat/bin/shutdown.sh && /opt/tomcat/bin/startup.sh # 健康检查:每30秒探测8080端口HTTP 200 ExecStartPost=/bin/sh -c 'while ! curl -f http://127.0.0.1:8080/manager/html 2>/dev/null; do sleep 2; done' RestartSec=10 Restart=on-failure ...
网络与边界防护
- 防火墙:仅开放业务端口(8080/8443),禁止开放8005(shutdown端口):
sudo firewall-cmd --permanent --add-port=8080/tcp --add-port=8443/tcp - SELinux:启用
tomcat_can_network_connect_db(若连数据库)
sudo setsebool -P tomcat_can_network_connect_db 1 - Nginx反向代理:启用HTTP/2、HSTS、X-Frame-Options:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
日志治理:从“堆盘”到“可追溯”
catalina.out必须交由logrotate管理,且禁止直接重定向到/dev/null(丢失启动异常),补充conf/logging.properties配置异步日志与结构化输出:
org.apache.juli.AsyncFileHandler.encoding = UTF-8 org.apache.juli.AsyncFileHandler.maxDays = 30 org.apache.juli.AsyncFileHandler.suffix = .yyyy-MM-dd
超越部署:运维生命周期起点
真正的生产就绪包含:
🔹 证书自动化:集成Certbot,通过renew-hook自动reload Tomcat;<
版权声明
本站原创内容未经允许不得转载,或转载时需注明出处:特网云知识库
特网科技产品知识库


