当前位置:首页 > Linux > 正文

如何在linux安装tomcat

下载Tomcat压缩包,解压至目标目录,赋予执行权限,配置环境变量,通过startup.sh脚本

在Linux系统中安装Apache Tomcat是一项常见且重要的任务,尤其对于开发和部署Java Web应用而言,以下将围绕这一主题展开全面讲解,涵盖准备工作、多种安装方式、配置优化、安全管理及故障排除等内容,帮助读者系统化掌握整个流程。


前置条件与环境准备

确保系统已更新至最新状态

执行以下命令更新软件源并升级现有软件包:

sudo apt update && sudo apt upgrade -y   # Debian/Ubuntu系
# 或
sudo yum update -y                     # CentOS/RHEL系

此步骤可避免因依赖库版本过旧导致的兼容性问题。

安装OpenJDK(必需组件)

Tomcat运行依赖JRE/JDK环境,推荐使用OpenJDK 17 LTS版本:
| 操作系统类型 | 安装命令 |
|——————–|————————————————————————–|
| Debian/Ubuntu | sudo apt install openjdk-17-jdk |
| CentOS/RHEL | sudo yum install java-17-openjdk-devel |
| Alpine Linux | apk add openjdk17 |

安装完成后通过java -version验证安装结果,若提示未找到命令则需检查PATH或重新安装。

创建专用用户组(最佳实践)

为提升安全性,建议创建独立用户和组来运行Tomcat服务:

sudo groupadd tomcatusers
sudo useradd -s /bin/false -g tomcatusers tomcatuser

此举可限制Tomcat进程权限,降低被攻击风险。


主流安装方案对比与实施

方案一:官方二进制压缩包(推荐)

适用场景:快速部署、灵活控制版本、无需编译环境。

操作步骤

  1. 下载安装包
    访问Apache Tomcat官网,选择Binary Distributions → Core下的tar.gz文件(如apache-tomcat-11.0.0.tar.gz)。

  2. 解压并移动至目标目录

    wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.0/bin/apache-tomcat-11.0.0.tar.gz
    sudo mkdir /opt/tomcat
    sudo tar xzf apache-tomcat-.tar.gz -C /opt/tomcat --strip-components=1

    注意--strip-components=1用于去除顶层目录名,直接解压内容到父目录。

  3. 设置所有权与权限

    sudo chown -R tomcatuser:tomcatusers /opt/tomcat
    sudo chmod -R u+x /opt/tomcat/bin/.sh  # 赋予脚本执行权限
  4. 配置环境变量(可选但推荐)
    编辑~/.bashrc/etc/profile添加:

    export CATALINA_HOME=/opt/tomcat
    export PATH=$CATALINA_HOME/bin:$PATH

    生效配置:source ~/.bashrc

  5. 启动测试

    cd $CATALINA_HOME/bin
    ./startup.sh

    成功标志:控制台输出Server startup in ... ms且无报错。

方案二:源码编译安装(适合定制需求)

优势:支持深度定制功能模块,适用于企业级特殊需求。

关键步骤

  1. 安装构建工具链:

    sudo apt install build-essential libssl-dev zlib1g-dev   # Ubuntu示例
  2. 克隆源代码仓库:

    git clone https://github.com/apache/tomcat.git
    cd tomcat/
  3. 执行构建命令:

    ant clean && ant && ant stage-install

    注意:首次构建耗时较长(约30分钟),需保证网络畅通以下载依赖。

  4. 后续操作参考二进制包方案,区别在于安装路径变为build/stage/目录。

方案三:包管理器安装(便捷但版本滞后)

部分Linux发行版提供预置仓库:
| 发行版 | 命令示例 | 备注 |
|————–|——————————————-|————————–|
| Ubuntu/Debian| sudo apt install tomcat9 | 仅支持旧版 |
| CentOS | sudo yum install tomcat | EPEL源可能不可用 |
| Arch Linux | sudo pacman -S community/tomcat | 社区维护版本 |

如何在linux安装tomcat  第1张

警告:此类方式安装的版本通常较新稳定版落后多个小版本,不建议生产环境使用。


核心配置与服务管理

修改主配置文件server.xml

位于$CATALINA_HOME/conf/目录下,重点调整项:
| 元素 | 作用 | 示例修改 |
|———————|——————————|—————————|
| <Connector port="8080"> | HTTP连接器端口 | 改为port="80"需配合防火墙 |
| maxThreads="200" | 最大并发请求数 | 根据服务器性能调高至500+ |
| connectionTimeout="20000" | 连接超时时间(ms) | 长连接场景可调大 |

管理启动脚本

默认提供三个脚本:
| 脚本名称 | 功能 | 使用方法 |
|—————-|——————–|——————————|
| startup.sh | 前台启动 | ./startup.sh |
| shutdown.sh | 正常关闭 | ./shutdown.sh |
| catalina.sh | 多功能控制器 | ./catalina.sh run/stop |

转为后台守护进程

# 方法一:使用nohup + &组合
nohup ./startup.sh & > /dev/null 2>&1
# 方法二:创建Systemd服务(推荐)
sudo tee /etc/systemd/system/tomcat.service <<EOF
[Unit]
Description=Apache Tomcat Web Application Server
After=network.target
[Service]
Type=forking
User=tomcatuser
Group=tomcatusers
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk"
ExecStart=$CATALINA_HOME/bin/startup.sh
ExecStop=$CATALINA_HOME/bin/shutdown.sh
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat

防火墙与端口放行

若需对外暴露8080端口:

# UFW (Ubuntu)
sudo ufw allow 8080/tcp
# firewalld (CentOS)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

安全加固措施

风险点 解决方案
以root身份运行 禁止!始终使用普通用户(如前述tomcatuser)
敏感目录遍历 conf/web.xml中禁用DIR listing:<init-param>...<value>false</value>
未授权访问管理界面 修改manager-gui角色权限,仅允许特定IP登录
SQL注入破绽 启用CSRF防护,过滤非规字符
日志泄露 定期轮转日志文件,限制日志级别为INFO而非DEBUG

验证与排错指南

基础功能测试

浏览器访问http://<主机IP>:8080应显示Tomcat默认首页,若出现空白页,检查以下三点:

  • 查看日志文件logs/catalina.out寻找异常堆栈信息
  • 确认Java版本是否符合要求(至少Java 8)
  • 检查文件权限:ls -l $CATALINA_HOME/webapps应具有读写权限

部署WAR包测试

将生成的app.war放入webapps/目录,观察是否自动解压为app/文件夹,若失败,检查:

  • WAR包命名是否符合规范(不含特殊字符)
  • 磁盘剩余空间是否充足
  • 应用自身的WEB-INF/web.xml是否存在语法错误

相关问答FAQs

Q1: 启动Tomcat时报”Address already in use”怎么办?

A: 这是由于目标端口已被占用,解决方法:

  1. 查找占用进程PID:netstat -tulnp | grep 8080
  2. 终止冲突进程:sudo kill -9 <PID>
  3. 或修改Tomcat监听端口(见前文server.xml配置)

Q2: 如何实现开机自启?

A: 采用Systemd方案的用户只需执行:

sudo systemctl enable tomcat

非Systemd环境可将启动命令加入/etc/rc.local,注意末尾添加exit 0

0