Tomcat后臺部署WAR包的完整流程
一、Tomcat管理后臺介紹
Apache Tomcat提供了一個基于Web的管理界面,允許管理員通過圖形化界面部署、管理Web應(yīng)用程序。這個功能主要通過兩個Web應(yīng)用實現(xiàn):
- Manager App:用于部署、啟動、停止、重新加載和刪除Web應(yīng)用程序
- Host Manager:用于管理虛擬主機
我們將重點講解如何通過Manager App部署WAR包。
二、環(huán)境準備
1. Tomcat版本要求
- 建議使用Tomcat 8.5.x、9.x或10.x版本
- 本文以Tomcat 9.0.85為例進行演示
- 下載地址:https://tomcat.apache.org/download-90.cgi
2. 系統(tǒng)環(huán)境
- 操作系統(tǒng):Windows/Linux/macOS
- Java版本:JDK 8或更高版本
- 內(nèi)存:建議至少1GB可用內(nèi)存
三、配置Tomcat管理權(quán)限
1. 配置manager-gui角色和用戶
編輯conf/tomcat-users.xml文件,添加以下內(nèi)容:
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!-- 添加管理角色 -->
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<!-- 添加管理員用戶 -->
<user username="admin" password="StrongPassw0rd!" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>
安全提示:生產(chǎn)環(huán)境中應(yīng)使用強密碼,并定期更換。
2. 配置訪問限制(可選但推薦)
編輯webapps/manager/META-INF/context.xml文件,配置IP訪問限制:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1|::1|YOUR_IP_ADDRESS" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
將YOUR_IP_ADDRESS替換為允許訪問的IP地址。
四、準備WAR包
1. 創(chuàng)建測試WAR包
創(chuàng)建一個簡單的Web應(yīng)用示例:
# 創(chuàng)建目錄結(jié)構(gòu)
mkdir -p myapp/WEB-INF/classes
mkdir myapp/images
# 創(chuàng)建web.xml
cat > myapp/WEB-INF/web.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>My Test Application</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
EOF
# 創(chuàng)建index.html
cat > myapp/index.html << 'EOF'
<!DOCTYPE html>
<html>
<head>
<title>My Test Application</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Hello from My Test Application!</h1>
<p>Deployed successfully at: <span id="time"></span></p>
<script>
document.getElementById("time").innerHTML = new Date().toString();
</script>
</body>
</html>
EOF
# 打包成WAR文件
cd myapp
jar -cvf ../myapp.war *
cd ..
2. 驗證WAR包結(jié)構(gòu)
# 查看WAR包內(nèi)容 jar -tf myapp.war
預(yù)期輸出:
index.html WEB-INF/ WEB-INF/web.xml WEB-INF/classes/
五、部署WAR包的三種方式
方式一:通過Web界面部署(推薦用于學(xué)習(xí))
- 啟動Tomcat服務(wù)器
# Linux/Mac bin/startup.sh # Windows bin\startup.bat
- 訪問管理界面
- 打開瀏覽器訪問:http://localhost:8080/manager/html
- 使用前面配置的用戶名和密碼登錄
- 部署WAR包
- 在"Deploy"部分,選擇"WAR file to deploy"
- 點擊"Choose File"選擇你的WAR文件
- 點擊"Deploy"按鈕
方式二:通過Manager API部署(推薦用于自動化)
使用curl命令通過REST API部署:
# 部署WAR包
curl -u admin:StrongPassw0rd! \
-T myapp.war \
"http://localhost:8080/manager/text/deploy?path=/myapp&update=true"
# 檢查部署狀態(tài)
curl -u admin:StrongPassw0rd! \
"http://localhost:8080/manager/text/list"
# 重新加載應(yīng)用(如果已存在)
curl -u admin:StrongPassw0rd! \
"http://localhost:8080/manager/text/reload?path=/myapp"
# 停止應(yīng)用
curl -u admin:StrongPassw0rd! \
"http://localhost:8080/manager/text/stop?path=/myapp"
# 啟動應(yīng)用
curl -u admin:StrongPassw0rd! \
"http://localhost:8080/manager/text/start?path=/myapp"
# 卸載應(yīng)用
curl -u admin:StrongPassw0rd! \
"http://localhost:8080/manager/text/undeploy?path=/myapp"
方式三:直接放置到webapps目錄(最簡單)
# 復(fù)制WAR文件到webapps目錄 cp myapp.war $CATALINA_HOME/webapps/ # Tomcat會自動解壓并部署 # 或者創(chuàng)建自動部署目錄 mkdir $CATALINA_HOME/webapps/myapp cp myapp.war $CATALINA_HOME/webapps/myapp/myapp.war
六、驗證部署結(jié)果
1. 檢查應(yīng)用狀態(tài)
# 通過Manager API檢查 curl -u admin:StrongPassw0rd! "http://localhost:8080/manager/text/list"
輸出示例:
OK - Listed applications for virtual host localhost /myapp:running:0:myapp /manager:running:0:manager /host-manager:running:0:host-manager /ROOT:running:0:ROOT
2. 訪問應(yīng)用
打開瀏覽器訪問:http://localhost:8080/myapp/
應(yīng)該能看到"Hello from My Test Application!"頁面。
3. 檢查日志
查看Tomcat日志確認部署過程:
# Linux/Mac tail -f $CATALINA_HOME/logs/catalina.out # Windows type %CATALINA_HOME%\logs\catalina.out
七、常見問題排查
1. 403 Access Denied錯誤
原因:IP地址不在允許列表中
解決方案:
<!-- 修改webapps/manager/META-INF/context.xml -->
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1|::1|YOUR_IP|ANOTHER_IP" />
2. 401 Unauthorized錯誤
原因:用戶名或密碼錯誤
解決方案:
- 檢查
conf/tomcat-users.xml中的用戶名和密碼 - 確認角色
manager-gui已分配給用戶
3. 部署失?。簝?nèi)存不足
解決方案:
# 增加JVM內(nèi)存 export CATALINA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m" # 然后啟動Tomcat
4. WAR包無法自動部署
檢查項:
- 確認WAR包格式正確
- 檢查
web.xml是否符合規(guī)范 - 查看
catalina.out日志中的具體錯誤信息
八、安全最佳實踐
1. 生產(chǎn)環(huán)境安全配置
<!-- conf/tomcat-users.xml -->
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="deploy-user"
password="$2a$10$hashedpassword"
roles="manager-script"/>
<user username="admin-user"
password="$2a$10$anotherhashed"
roles="manager-gui"/>
</tomcat-users>
原則:
- 部署使用專用用戶(僅
manager-script權(quán)限) - GUI管理使用另一用戶(
manager-gui權(quán)限) - 使用強密碼并定期更換
2. 禁用不必要的管理應(yīng)用
如果不需要Host Manager,可以刪除或重命名:
mv webapps/host-manager webapps/host-manager.bak
3. 配置HTTPS
<!-- conf/server.xml -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
生成證書:
keytool -genkeypair -alias localhost -keyalg RSA -keysize 2048 \
-keystore conf/localhost-rsa.jks -validity 3650
九、自動化部署腳本
創(chuàng)建一個自動化部署腳本deploy.sh:
#!/bin/bash
# 配置變量
TOMCAT_URL="http://localhost:8080"
USERNAME="admin"
PASSWORD="StrongPassw0rd!"
WAR_FILE="myapp.war"
CONTEXT_PATH="/myapp"
# 函數(shù):檢查應(yīng)用是否存在
check_app_exists() {
local status=$(curl -s -u "$USERNAME:$PASSWORD" \
"$TOMCAT_URL/manager/text/list" | \
grep "$CONTEXT_PATH" || echo "not_found")
if [[ "$status" != "not_found" ]]; then
echo "exists"
else
echo "not_exists"
fi
}
# 函數(shù):部署應(yīng)用
deploy_app() {
echo "Deploying $WAR_FILE to $CONTEXT_PATH..."
local response=$(curl -s -u "$USERNAME:$PASSWORD" \
-T "$WAR_FILE" \
"$TOMCAT_URL/manager/text/deploy?path=$CONTEXT_PATH&update=true")
if [[ "$response" == *"OK"* ]]; then
echo "Deployment successful!"
return 0
else
echo "Deployment failed: $response"
return 1
fi
}
# 函數(shù):檢查部署狀態(tài)
check_status() {
echo "Checking deployment status..."
curl -u "$USERNAME:$PASSWORD" "$TOMCAT_URL/manager/text/list" | \
grep "$CONTEXT_PATH"
}
# 主程序
main() {
if [ ! -f "$WAR_FILE" ]; then
echo "Error: WAR file '$WAR_FILE' not found!"
exit 1
fi
local app_status=$(check_app_exists)
if [ "$app_status" == "exists" ]; then
echo "Application already exists. Will update..."
else
echo "Application does not exist. Will create new deployment..."
fi
if deploy_app; then
echo "Verifying deployment..."
sleep 2
check_status
echo "Deployment completed successfully!"
else
echo "Deployment failed!"
exit 1
fi
}
# 執(zhí)行主程序
main "$@"
使用方法:
chmod +x deploy.sh ./deploy.sh
十、高級部署技巧
1. 灰度發(fā)布
通過不同的上下文路徑實現(xiàn)灰度發(fā)布:
# 部署新版本到新路徑
curl -u admin:StrongPassw0rd! \
-T myapp-v2.war \
"http://localhost:8080/manager/text/deploy?path=/myapp-new&update=true"
# 測試新版本
curl http://localhost:8080/myapp-new
# 如果測試通過,替換舊版本
curl -u admin:StrongPassw0rd! \
"http://localhost:8080/manager/text/undeploy?path=/myapp"
curl -u admin:StrongPassw0rd! \
-T myapp-v2.war \
"http://localhost:8080/manager/text/deploy?path=/myapp&update=true"
2. 集群環(huán)境部署
對于Tomcat集群,可以使用以下策略:
# 定義集群節(jié)點
NODES=("node1:8080" "node2:8080" "node3:8080")
# 并行部署到所有節(jié)點
for node in "${NODES[@]}"; do
curl -u admin:StrongPassw0rd! \
-T myapp.war \
"http://$node/manager/text/deploy?path=/myapp&update=true" &
done
# 等待所有部署完成
wait
echo "Deployed to all cluster nodes"
十一、監(jiān)控與維護
1. 監(jiān)控腳本
創(chuàng)建監(jiān)控腳本monitor.sh:
#!/bin/bash
TOMCAT_URL="http://localhost:8080"
APP_PATH="/myapp"
CHECK_INTERVAL=60 # 檢查間隔(秒)
while true; do
# 檢查應(yīng)用健康狀態(tài)
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$TOMCAT_URL$APP_PATH")
if [ "$HTTP_CODE" != "200" ]; then
echo "$(date): Application is DOWN! HTTP Code: $HTTP_CODE"
# 可以添加告警通知,如發(fā)送郵件或短信
# send_alert "Application is down"
else
echo "$(date): Application is UP"
fi
sleep $CHECK_INTERVAL
done
2. 自動化備份
#!/bin/bash # 備份已部署的應(yīng)用 BACKUP_DIR="/opt/tomcat/backups" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p "$BACKUP_DIR" # 備份特定應(yīng)用 cp "$CATALINA_HOME/webapps/myapp.war" "$BACKUP_DIR/myapp_$DATE.war" cp -r "$CATALINA_HOME/webapps/myapp" "$BACKUP_DIR/myapp_$DATE" # 保留最近7天的備份 find "$BACKUP_DIR" -name "myapp_*" -mtime +7 -delete
十二、總結(jié)
通過以上詳細步驟,您已經(jīng)掌握了Tomcat后臺部署WAR包的完整流程:
- 基礎(chǔ)部署:通過Web界面或API部署WAR包
- 安全配置:合理配置用戶權(quán)限和訪問控制
- 自動化:使用腳本實現(xiàn)一鍵部署和監(jiān)控
- 生產(chǎn)實踐:遵循安全最佳實踐,確保系統(tǒng)穩(wěn)定
以上就是在Tomcat服務(wù)器上部署WAR包的完整流程的詳細內(nèi)容,更多關(guān)于Tomcat部署WAR包的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
tomcat 6.0.20在一個機器上安裝多個服務(wù)的方法
當(dāng)前前提是你已經(jīng)可以同時運行他們了,他們的端口不能相同,這里只是解釋如何把它們做成服務(wù)2009-08-08
tomcat關(guān)于配置servlet的url-pattern的問題思路詳解
這篇文章主要介紹了tomcat關(guān)于配置servlet的url-pattern的問題詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05

