Alibaba Cloud Linux生产环境Tomcat部署指南
1. 项目概述
在Alibaba Cloud Linux上部署Tomcat生产环境是Java Web应用开发中的基础操作。作为阿里云专为云环境优化的操作系统,Alibaba Cloud Linux与Tomcat的组合能够提供稳定的Web服务运行环境。不同于开发环境的简单配置,生产环境部署需要考虑安全性、性能优化、日志管理等多方面因素。
我曾为多个电商项目部署过Tomcat集群,发现许多开发者在初次接触生产环境部署时容易忽略关键配置。本文将基于Alibaba Cloud Linux 3.2104 LTS版本和Tomcat 9.0.85,详细介绍从零开始搭建生产级Tomcat环境的完整流程。
2. 环境准备
2.1 系统要求检查
首先通过SSH连接到ECS实例后,执行以下命令检查系统版本:
cat /etc/alinux-release uname -r理想情况下,系统应该是Alibaba Cloud Linux 3.2104 LTS及以上版本,内核版本5.10以上。如果系统版本较旧,建议先进行升级:
sudo yum update -y2.2 Java环境安装
生产环境推荐使用OpenJDK 11 LTS版本,执行以下命令安装:
sudo yum install -y java-11-openjdk-devel安装完成后验证Java版本:
java -version javac -version注意:不要使用默认的yum安装方式获取Tomcat,官方仓库中的版本往往不是最新的,且缺少灵活的配置选项。
3. Tomcat安装与配置
3.1 安全下载与安装
创建专用用户和组来运行Tomcat服务:
sudo groupadd tomcat sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat从Apache官网下载最新稳定版(当前为9.0.85):
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz验证文件完整性:
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz.sha512 sha512sum -c apache-tomcat-9.0.85.tar.gz.sha512解压并设置权限:
sudo tar -xzvf apache-tomcat-9.0.85.tar.gz -C /opt/tomcat --strip-components=1 sudo chown -R tomcat:tomcat /opt/tomcat sudo chmod -R u+x /opt/tomcat/bin3.2 生产环境关键配置
- 服务启动脚本(/etc/systemd/system/tomcat.service):
[Unit] Description=Apache Tomcat 9 Servlet Container After=syslog.target network.target [Service] Type=forking User=tomcat Group=tomcat Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh Restart=on-failure [Install] WantedBy=multi-user.target- 内存配置(/opt/tomcat/bin/setenv.sh):
export CATALINA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"- 连接器优化(/opt/tomcat/conf/server.xml):
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="500" minSpareThreads="50" acceptCount="1000" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/css,application/javascript"/>4. 安全加固措施
4.1 基础安全配置
- 删除默认应用:
rm -rf /opt/tomcat/webapps/*- 修改管理密码(/opt/tomcat/conf/tomcat-users.xml):
<role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="生产环境专用用户名" password="强密码" roles="manager-gui,admin-gui"/>- 限制管理界面访问(/opt/tomcat/webapps/manager/META-INF/context.xml):
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1|你的管理IP"/>4.2 SSL证书配置
使用Let's Encrypt免费证书:
sudo yum install -y certbot sudo certbot certonly --standalone -d yourdomain.com配置Tomcat的server.xml:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeyFile="/etc/letsencrypt/live/yourdomain.com/privkey.pem" certificateFile="/etc/letsencrypt/live/yourdomain.com/cert.pem" certificateChainFile="/etc/letsencrypt/live/yourdomain.com/chain.pem" type="RSA" /> </SSLHostConfig> </Connector>5. 运维监控设置
5.1 日志管理配置
- 修改日志格式(/opt/tomcat/conf/logging.properties):
1catalina.org.apache.juli.AsyncFileHandler.level = FINE 1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter- 配置logrotate(/etc/logrotate.d/tomcat):
/opt/tomcat/logs/*.log { daily missingok rotate 30 compress delaycompress notifempty copytruncate create 640 tomcat tomcat }5.2 健康检查接口
创建健康检查Servlet(WEB-INF/classes/HealthCheckServlet.java):
@WebServlet("/health") public class HealthCheckServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { resp.setContentType("application/json"); resp.setStatus(HttpServletResponse.SC_OK); resp.getWriter().println("{\"status\":\"UP\"}"); } }配置阿里云SLB健康检查:
sudo yum install -y jq curl -s http://localhost:8080/health | jq '.status == "UP"'6. 常见问题排查
6.1 启动失败排查流程
- 检查Java环境:
which java echo $JAVA_HOME- 查看详细日志:
journalctl -u tomcat --no-pager -n 50 tail -n 100 /opt/tomcat/logs/catalina.out- 端口冲突检查:
sudo netstat -tulnp | grep java6.2 性能问题优化
- 线程转储分析:
sudo -u tomcat jstack <pid> > thread_dump.log- 内存分析:
sudo -u tomcat jmap -heap <pid>- GC日志配置(setenv.sh追加):
export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/tomcat/logs/gc.log"7. 自动化部署方案
7.1 使用Ansible部署
创建playbook文件(deploy_tomcat.yml):
- hosts: webservers become: yes tasks: - name: Install OpenJDK 11 yum: name: java-11-openjdk-devel state: present - name: Create Tomcat user user: name: tomcat shell: /bin/false home: /opt/tomcat system: yes group: tomcat - name: Download Tomcat get_url: url: https://downloads.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz dest: /tmp/apache-tomcat-9.0.85.tar.gz - name: Extract Tomcat unarchive: src: /tmp/apache-tomcat-9.0.85.tar.gz dest: /opt/tomcat remote_src: yes owner: tomcat group: tomcat extra_opts: [--strip-components=1]7.2 CI/CD集成示例
在Jenfile中添加部署阶段:
pipeline { agent any stages { stage('Deploy to Alibaba Cloud') { steps { sh 'mvn clean package' sshagent(['alibaba-cloud-credentials']) { sh ''' scp target/*.war root@your-server:/opt/tomcat/webapps/ROOT.war ssh root@your-server "systemctl restart tomcat" ''' } } } } }8. 高可用架构设计
8.1 负载均衡配置
使用阿里云SLB时的注意事项:
- 健康检查路径设置为
/health - 检查间隔建议15秒
- 超时时间设置为5秒
- 不启用会话保持(由应用层处理)
8.2 会话共享方案
- 使用Redis存储会话(context.xml配置):
<Manager className="org.apache.catalina.session.PersistentManager"> <Store className="org.apache.catalina.session.RedisSessionStore" host="your-redis-endpoint" port="6379" password="your-redis-password" database="0" timeout="2000"/> </Manager>- 需要添加依赖:
wget https://repo1.maven.org/maven2/redis/clients/jedis/4.3.1/jedis-4.3.1.jar -P /opt/tomcat/lib/ wget https://repo1.maven.org/maven2/org/apache/commons/commons-pool2/2.11.1/commons-pool2-2.11.1.jar -P /opt/tomcat/lib/9. 备份与恢复策略
9.1 配置备份方案
- 每日增量备份脚本(/usr/local/bin/backup_tomcat.sh):
#!/bin/bash BACKUP_DIR="/backup/tomcat/$(date +%Y%m%d)" mkdir -p $BACKUP_DIR rsync -a /opt/tomcat/conf $BACKUP_DIR/ rsync -a /opt/tomcat/bin $BACKUP_DIR/ mysqldump -u root -p your_app_db > $BACKUP_DIR/db_backup.sql- 添加到crontab:
0 3 * * * /usr/local/bin/backup_tomcat.sh9.2 灾难恢复演练
恢复测试流程:
- 新建测试服务器
- 安装基础环境(Java、Tomcat)
- 从备份恢复配置:
rsync -a /backup/tomcat/20240101/conf /opt/tomcat/ rsync -a /backup/tomcat/20240101/bin /opt/tomcat/- 验证服务启动
- 检查应用功能
10. 版本升级指南
10.1 滚动升级方案
- 准备新版本目录:
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.86/bin/apache-tomcat-9.0.86.tar.gz tar -xzvf apache-tomcat-9.0.86.tar.gz -C /opt/tomcat-new --strip-components=1- 迁移配置:
cp -rp /opt/tomcat/conf /opt/tomcat-new/ cp -rp /opt/tomcat/webapps /opt/tomcat-new/ cp -rp /opt/tomcat/lib /opt/tomcat-new/- 切换服务:
systemctl stop tomcat mv /opt/tomcat /opt/tomcat-old mv /opt/tomcat-new /opt/tomcat systemctl start tomcat10.2 回滚机制
回滚到旧版本:
systemctl stop tomcat mv /opt/tomcat /opt/tomcat-failed mv /opt/tomcat-old /opt/tomcat systemctl start tomcat