一、创建一个系统用户
以 root 用户运行 Tomcat 有一个安全风险。我们将会创建一个系统用户和用户组,其主目录为/opt/tomcat。我们将会使用这个用户来运行 Tomcat 服务。想要这么做,输入下面的命令:
sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
二、下载 Tomcat
使用wget来下载 Tomcat zip 文件到/tmp目录:
VERSION=9.0.45
wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz -P /tmp
一旦下载完成,解压 tar 文件到/opt/tomcat目录:
sudo tar -xf /tmp/apache-tomcat-9.0.45.tar.gz -C /opt/tomcat/
前面创建的系统用户必须对 tomcat 安装目录有访问权限。修改目录归属到用户和用户组 tomcat:
sudo chown -R tomcat: /opt/tomcat
在 Tomcat bin目录下的 shell 脚本必须可执行:
sudo sh -c 'chmod +x /opt/tomcat/bin/*.sh'
这些脚本将会被用来启动,停止,以及其他对 Tomcat 的管理操作。
三、创建 SystemD 单元文件
与使用 shell 脚本来启动和停止 Tomcat 服务器相比,我们将会将它作为服务来运行。
打开你的文本编辑器,并且在/etc/systemd/system/目录下创建一个 tomcat.service 单元文件。
sudo nano /etc/systemd/system/tomcat.service
粘贴下面的配置文件:
[Unit]
Description=Tomcat 9 servlet container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat9/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat9
Environment=CATALINA_BASE=/opt/tomcat9
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/urandom'
ExecStart=/opt/tomcat9/bin/startup.sh
ExecStop=/opt/tomcat9/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
如果你的 Java 安装路径不一样,请修改JAVA_HOME
环境变量。
保存并且关闭文件,通知 systemd 一个新的单元文件存在:
sudo systemctl daemon-reload
启用并且启动 Tomcat 服务:
sudo systemctl enable --now tomcat
检查服务状态:
sudo systemctl status tomcat
输出应该显示 Tomcat 服务器已经启用,并且运行了:
● tomcat.service - tomcat9
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-04-22 20:45:57 CST; 14min ago
Process: 7422 ExecStart=/opt/tomcat9/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 7446 (java)
Tasks: 33 (limit: 2219)
Memory: 206.0M
CGroup: /system.slice/tomcat.service
└─7446 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat9/conf/logging.pr>
...
你可以 像其他 systemd 服务一样 启动,停止和重启 Tomcat:
sudo systemctl start tomcat
sudo systemctl stop tomcat
sudo systemctl restart tomcat
四、配置防火墙
如果你的服务器被防火墙保护,并且你想从外面访问你的Tomcat,你需要打开8080端口。
使用下面的命令打开必要的端口:
sudo ufw allow 8080/tcp
五、配置 Tomcat 网页管理界面
正在此时,你应该通过一个浏览器在8080端口访问 Tomcat。网页管理界面不能访问,因为我们还没有创建一个用户。
Tomcat 用户和角色被定义在 tomcat-users.xml。这个文件是一个带有注释和示例的模板,展示如何创建一个用户和角色。
在这个例子中,我们将会创建一个用户“admin-gui” 和 “manager-gui” 角色。这个 “admin-gui”角色允许用户访问/host-manager/htmlURL 来创建,删除和其他对虚拟主机的管理。这个“manager-gui”角色允许用户部署和解除部署 web 应用,而不用通过/host-manager/html界面重启整个容器。
打开tomcat-users.xml文件,创建一个新用户,像下面这样:
sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
<tomcat-users>
<!--
Comments
-->
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="admin_password" roles="admin-gui,manager-gui"/>
</tomcat-users>
确保你将用户名和密码修改得更加安全。
默认情况下,Tomcat 网页管理界面被配置仅仅从 localhost 访问 Manager 和 Host Manager 应用。想要从远程 IP 访问网页界面,你需要移除这些限制。
这可能会有一些安全隐患,我们不推荐在生产系统中这么做。
想要从任何地方都能访问网页界面,打开配置的两个文件,注释或者移除注释的部分。
对于 Manager:
sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml
对于 Host Manager:
sudo nano /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
如果你只想从指定的 IP 访问网页界面,不要注释这一段,而是将你的公网 IP 地址加进去。(如果想在其它地方访问,则注释掉…)
假如说你的公网 IP 是41.41.41.41,并且你想允许从那个 IP 访问网页界面:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|41.41.41.41" />
</Context>
被允许的 IP 列表以|来分隔。你可以添加一个简单的 IP 地址,或者使用正则表达式。
一旦完成,重启 Tomcat 服务,使应用生效:
sudo systemctl restart tomcat
六、测试 Tomcat 安装
打开你的浏览器,输入:http://<your_domain_or_IP_address>:8080
Tomcat 网页应用管理在:
http://<your_domain_or_IP_address>:8080/manager/html
Tomcat 虚拟主机管理在:
http://<your_domain_or_IP_address>:8080/host-manager/html
七、IDEA远程部署tomcat9
- 1.找到tomcat的bin目录下的catalina.sh
vim /opt/tomcat/bin/catalina.sh
添加以下内容
JAVA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=你的服务器地址"
export JAVA_OPTS
此处有坑,如果是windows复制过去的,请删除**-Dcom前的回车**
- 2.修改完后记得重启tomcat并在防火墙开放对应端口
firewall-cmd --list-ports # 查看已开放的端口
firewall-cmd --zone=public --add-port=1099/tcp --permanent # 开放1099端口
firewall-cmd --reload # 重启防火墙
如果你用的是阿里云,记得在阿里云的安全管理组中开放对应的端口,血泪教训!
- 3.bug报错
Error running 'tomcat remote run': Unable to connect to the 10.132.12.25:1099, reason: java.rmi.ConnectException: Connection refused to host: 10.132.12.25; nested exception is: java.net.ConnectException: Connection timed out: connect
请检查1099端口是否开放(阿里云安全组是否开放),或者后台是否占用kill掉
4.IDEA报Unable to connect to the xxx.xx.xx.xx:1099
请检查catalina.sh是否有误(如回车,空格)
JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=你的服务器ip"
export JAVA_OPTS
# 直接关闭防火墙
service firewalld stop
# 修改防火墙允许的端口号
firewall-cmd --add-port=8080/tcp --permanent
# 重新加载防火墙
firewall-cmd --reload
# 查看防火墙 是否有8080端口
firewall-cmd --list-all
吐槽一下:
1. tomcat启动关闭
报错提示权限有问题,可以将tomcat.service里面的(User=tomcat、Group=tomcat)改为root,让root去执行service(安全方面我就不晓得了哈,我无所畏惧)
2.端口问题
1099、8080防火墙是否允许,阿里云的安全组是否添加
3.
原文来自:(如何在 Ubuntu 20.04 上安装 Tomcat 9.0)https://zhuanlan.zhihu.com/p/143981355
8.访问
浏览器地址输入服务器ip即可