官方网站 云服务器 专用服务器香港云主机28元月 全球云主机40+ 数据中心地区 成品网站模版 企业建站 业务咨询 微信客服 控制版面

服务器上部署Tomcat服务器

admin 1周前 (07-26) 阅读数 432 #专用服务器
在服务器上部署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 {} \;

核心安全加固:三道防线不可妥协

  1. 权限隔离:创建无shell、无home目录的专用用户
    sudo useradd -r -s /sbin/nologin -d /opt/tomcat tomcat
    sudo chown -R tomcat:tomcat /opt/tomcat
  2. 配置最小化: ▸ 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>禁用目录浏览。
  3. 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中增加ExecReloadHealthCheck

[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;<

版权声明
本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主 如果涉及侵权请尽快告知,我们将会在第一时间删除。
本站原创内容未经允许不得转载,或转载时需注明出处:特网云知识库

热门