Apache Tomcat 是一个开源的 Java web 服务器和 Servlet 容器,用于托管用 Java 编写的 web 应用程序。它是 web 开发人员基于 Java 软件平台构建和维护动态网站和应用程序的首选。它是一个由 Apache 软件基金会开发的开源项目。Tomcat 使 web 服务器能够处理基于 java 的动态 web 内容。
本教程将展示如何在 Ubuntu 22.04 上安装 Apache Tomcat。
必备条件
- A server running Ubuntu 22.04.
- A valid domain name pointed with your server IP.
- A root password is configured on the server.
安装 Java JDK
Apache Tomcat 是一个基于 Java 的应用程序,因此必须在服务器上安装 Java。如果没有安装 Java,可以使用下面的命令安装它
apt install default-jdk -y
安装 Java 之后,可以使用以下命令验证 Java 版本
java -version
您将得到以下输出
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)
安装 Apache Tomcat
使用单独的用户运行 Tomcat ,使用以下命令创建 Tomcat 用户
useradd -m -d /opt/tomcat -U -s /bin/false tomcat
使用以下命令下载最新版本的 Apache Tomcat
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.20/bin/apache-tomcat-10.0.20.tar.gz
下载 Apache Tomcat 后,把下载的文件提取到 /opt 目录
tar xzvf apache-tomcat-10*tar.gz -C /opt/tomcat --strip-components=1
为 Tomcat 目录设置适当的所有权和权限
chown -R tomcat:tomcat /opt/tomcat/
chmod -R u+x /opt/tomcat/bin
创建Tomcat管理用户
默认情况下,无需任何身份验证即可访问 Tomcat。建议启用身份验证并为 Tomcat 创建一个管理用户,可以通过编辑 Tomcat 用户配置文件来添加它。
nano /opt/tomcat/conf/tomcat-users.xml
在行 </tomcat-users>
前面添加以下内容
<role rolename="admin-gui" />
<user username="admin" password="yourpassword" roles="manager-gui,admin-gui" />
保存并退出
开启 Tomcat Remote Access
默认情况下,Tomcat 被配置为只能从本地主机访问。建议启用 Tomcat 远程访问,以便从远程主机管理 Tomcat。
要从远程主机启用 manager app,请编辑以下文件:
nano /opt/tomcat/webapps/manager/META-INF/context.xml
删除以下行
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
要从远程主机启用 host manager app,请编辑以下文件:
nano /opt/tomcat/webapps/host-manager/META-INF/context.xml
删除以下行
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
保存并退出
为 Apache Tomcat 创建 Service File
创建一个服务文件,通过 systemd 管理 Tomcat 服务,使用以下命令创建它
nano /etc/systemd/system/tomcat.service
Add the following lines:
[Unit]
Description=Tomcat
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
保存并关闭该文件,然后重新加载 systemd 守护进程以应用更改
systemctl daemon-reload
接下来,使用以下命令启动 Tomcat 服务,使其能够在系统重新启动时启动
systemctl start tomcat
systemctl enable tomcat
可以使用以下命令检查 Apache Tomcat 的状态
systemctl status tomcat
输出如下
? tomcat.service - Tomcat
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-29 08:11:54 UTC; 6s ago
Process: 18959 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 18966 (java)
Tasks: 29 (limit: 4630)
Memory: 116.4M
CPU: 5.312s
CGroup: /system.slice/tomcat.service
??18966 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Dja>
Apr 29 08:11:54 ubuntu systemd[1]: Starting Tomcat...
Apr 29 08:11:54 ubuntu startup.sh[18959]: Tomcat started.
Apr 29 08:11:54 ubuntu systemd[1]: Started Tomcat.
此时,Tomcat 已启动并在端口 8080 上侦听,您可以使用以下命令检查它
ss -antpl | grep java
您将得到以下输出
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* users:(("java",pid=18966,fd=53))
LISTEN 0 100 *:8080 *:* users:(("java",pid=18966,fd=43))
配置 Nginx 作为 Tomcat 的反向代理
接下来,您需要创建一个 Nginx 作为 Apache Tomcat 的反向代理。首先,用下面的命令安装 Nginx web 服务器
apt-get install nginx -y
安装 Nginx web 服务器后,使用以下命令创建 Nginx 虚拟主机配置文件
nano /etc/nginx/conf.d/tomcat.conf
添加以下代码行
server {
listen 80;
server_name tomcat.example.com;
access_log /var/log/nginx/tomcat-access.log;
error_log /var/log/nginx/tomcat-error.log;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/;
}
}
保存并关闭该文件,然后使用以下命令验证 Nginx 是否有语法错误
nginx -t
您将得到以下输出
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
接下来,重新启动 Nginx 服务以应用更改
systemctl restart nginx
您还可以使用以下命令检查 Nginx 状态
systemctl status nginx
您应该看到以下输出
? nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-29 08:15:28 UTC; 8s ago
Docs: man:nginx(8)
Process: 19070 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 19071 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 19072 (nginx)
Tasks: 3 (limit: 4630)
Memory: 3.3M
CPU: 63ms
CGroup: /system.slice/nginx.service
??19072 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
??19073 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
??19074 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Apr 29 08:15:28 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 29 08:15:28 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.
访问 Apache Tomcat
打开您的 Web 浏览器,并使用 http://tomcat.example.compame 访问 Apache Tomcat Web 界面,如下所示:
点击 Manager App,系统将要求您进行身份验证,如下所示:
提供您的管理员用户名和密码,然后点击 Sign in 按钮,如下所示:
点击 Host Manager,如下所示:
点击 Server Status,如下所示: