最近在搞持续部署,涉及到的系统大部分都是 Java 项目,但是使用的应用服务器中间件不尽相同,主要分为以下几种:weblogic、Tomcat、东方通TongWeb、宝兰德BES,本篇文章记录一下安装 Tomcat 9 的操作,并解决安装过程中遇到的一些问题。
选择 Tomcat 版本
选择 Tomcat 版本是一个很重要的操作,因为 Tomcat 的不同版本对环境有不同的要求,特别是对 Java 版本的要求,具体可以看官网给出的版本要求
基于我的 Java 版本是 1.8.0_411,所以我可以选择的 Tomcat 版本就是9。
其实最开始我没有看版本要求的时候是安装过10的版本,后来启动的时候报错,具体错误信息如下:
Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
通过搜索发现是 Java 版本不支持的特性参数导致的,因此我才将版本切换成 Tomcat 9。
安装 Tomcat
1. 配置 Java 环境
安装和配置 Java 环境的操作博客有,不再重复说明,检查方式就是:
java -version
2. 下载 Tomcat
直接到官网下载指定版本就行,下载 tar.gz 的包。
执行下载命令:
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.89/bin/apache-tomcat-9.0.89.tar.gz
3. 解压并安装 Tomcat
将 Tomcat 包解压到指定目录,比如 /opt下面:
tar -zxvf apache-tomcat-9.0.89.tar.gz -C /opt/
然后重命名解压后的目录名称:
mv apache-tomcat-9.0.89/ tomcat
4. 创建 tomcat 用户
创建 tomcat 用户的操作不是必须的,如果可以,使用 root 用户运行也是没问题的。
sudo groupadd tomcat
sudo useradd -g tomcat -s /bin/bash -m tomcat
sudo passwd tomcat
给予 tomcat 用户目录权限:
chown -R tomcat:tomcat /opt/tomcat
5. 启动 Tomcat
切换到 tomcat 用户:
su tomcat
然后启动服务:
sh /opt/tomcat/bin/startup.sh
可以看到如下输出:
tomcat@weblogic:/opt/tomcat/bin$ sh /opt/tomcat/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr/jvm/jdk1.8.0_411/jre
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
但是这种输出不一定表示正常,此时应该检查一下 8080 端口是否正常监听,只有端口正常监听才算正常启动,如果没有监听端口,可以去查看日志,日志文件为 /opt/tomcat/logs/catalina.out
安装后操作
登录 Tomcat
启动完成之后可以访问默认的 8080 端口,进入 Tomcat 页面:
此时点击“Manager App”可以进入管理页面,但是会提示如下内容:
这里我是有两个问题:
- 当前IP不是本地IP,因此不允许访问管理页面(因为我不是在本地访问,而是进行了端口转发访问)
- 没有设置用户信息,需要配置用户信息
先解决第二个问题,因为第二个问题是刚部署都会遇到的问题,需要创建用户信息,方案里面也说到了,就是去编辑 conf/tomcat-users.xml 文件,添加一个管理用户就行,比如我这里创建的角色和用户:
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat@123" roles="manager-gui"/>
此时如果你是本地访问,那么重启 Tomcat 之后在次进入管理页面,就会让你输入账号密码,此时就可以正常登录。
如果你不是本地访问,那么此处还是会报错,意思是你的IP不是本地的,没有权限访问管理页面,此时需要修改文件为 webapps/manager/META-INF/context.xml,在里面加入可访问IP的匹配模式.
只需要改下面这个字段,这是改之前的内容:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
这是改之后的,就是添加规则:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.\d+\.\d+\.\d+|100\.\d+\.\d+\.\d+" />
我这里加了192开头和100开头的IP地址,此时再次重启服务,就可以登录管理页面了。
📘 提示
这种访问没有权限的错误提醒不仅仅是管理页面会遇到,其他的应用也会遇到,都是使用相同的方式,去每个应用下面的 context.xml 文件中添加可访问的IP规则。
设置成系统服务
手动启动没有问题之后,可以将 Tomcat 设置成系统服务,方便管理。
使用 root 创建系统服务文件:
vi /etc/systemd/system/tomcat.service
内容如下(这里需要根据实际修改JAVA_HOME路径):
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/jvm/jdk1.8.0_411"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
然后启动服务:
systemctl daemon-reload
systemctl start tomcat
systemctl status tomcat
#设置成自启动
systemctl enable tomcat
部署应用
上传 war 包部署
直接登录管理页面操作,上面war包就行
部署完成就可以看到应用状态
war 包的名称就是应用的前缀,此时可以通过前缀和应用本身的路由访问应用,比如我的应用的 web.xml 内容是:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello-world</url-pattern>
</servlet-mapping>
</web-app>
此时访问应用前缀加上路由就可以访问应用:
使用服务器上目录或 war 包部署
除了手动上传 war 包部署,还可以直接使用服务器上面的 war 包或者目录进行部署,并且可以指定 context,也就是前缀,使用前面上传的 war 包再部署一个应用也是可以的。
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://tendcode.com/subject/article/install-tomcat9/
许可协议:署名-非商业性使用 4.0 国际许可协议