linux之Tomcat服務器部署和項目部署全過程
Tomcat
Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun和其他一些公司及個人共同開發(fā)而成。
Tomcat服務器是一個免費的開放源代碼的Web應用服務器,屬于輕量級應用服務器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調試JSP程序的首選
Tomcat官網(wǎng): http://tomcat.apache.org
Tomcat安裝

Tomcat是java語言編寫程序,首先在虛擬機中安裝jdk
注意:.rpm包如果依賴一些組件,需要我們手動解決安裝依賴
安裝jdk的rpm包
[root@localhost tmp]# cd /tmp
[root@localhost tmp]# rpm -ivh jdk-8u251-linux-x64.rpm
警告:jdk-8u251-linux-x64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID ec551f03: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:jdk1.8-2000:1.8.0_251-fcs ################################# [100%]Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...此時:JDK已經(jīng)被安裝在了 /usr/java/jdk1.80_xxx 目錄下。
配置環(huán)境變量
[root@localhost java]# vi /etc/profile ? 在profile中尾部追加一下3行配置 export JAVA_HOME=/usr/java/default export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=. ? //刷新環(huán)境變量 [root@localhost java]# source /etc/profile ? 如果刷新環(huán)境變量時,有異常信息,大多是配置環(huán)境變量的關鍵字有錯
安裝Tomcat
#獲取Tomcat壓縮包 ? #解壓 [root@localhost opt]# tar -xzvf apache-tomcat-8.5.78.tar.gz
Tomcat為java語言編寫,不需要編譯安裝,解壓即用
啟停命令
注意:Tomcat兼容linux和windows系統(tǒng),其中.bat文件為windows系統(tǒng)可用.sh文件為linux系統(tǒng)可用
啟動Tomcat
[root@localhost bin]# /opt/apache-tomcat-8.5.78/bin/startup.sh
訪問Tomcat
#查看Tomcat程序占用端口 [root@localhost bin]# netstat -tunlp
?#瀏覽器輸入訪問地址 http://主機ip:8080
關閉Tomat
#方法一,運行shutdown.sh腳本 [root@localhost bin]# /opt/apache-tomcat-8.5.78/bin/shutdown.sh #方法二,通過8005端口關閉,此端口只能本機訪問 [root@localhost bin]# telnet 127.0.0.1 8005 #通過telnet連接8005端口 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. SHUTDOWN #輸入SHUTDOWN ?
簡單的Tomcat項目部署演示
將項目放入tomcat的webapps文件夾中

開啟tomcat
[root@localhost webapps]# /opt/apache-tomcat-8.5.78/bin/startup.sh
訪問項目
訪問路徑為 http://主機ip:8080/項目名/資源名

Tomcat主配置文件解析
?Tomcat配置文件被存放在conf中,其中最主要的配置文件為server.xml
#配置文件示例
<?xml version="1.0" encoding="UTF-8"?>
?
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>Server
?是整個配置文件的根元素。表示整個Catalina容器。
#參數(shù)信息
className:實現(xiàn)了org.apache.catalina.Server接口的類名,默認實現(xiàn)了 org.apache.catalina.core.StandardServer類;
Port:Tomcat服務器監(jiān)聽用于關閉Tomcat服務器的命令(必須);
Shutdown:發(fā)送到端口上用于關閉Tomcat服務器的命令;Connector
?連接器,負責接收客戶的請求,以及向客戶端回送響應的消息
#參數(shù)解析
allowTrace:是否允許HTTP的TRACE方法,默認為false;
emptySessionPath:如果設置為true,用戶的所有路徑都將設置為/,默認為false;
enableLookups:調用request、getRemoteHost()執(zhí)行DNS查詢,以返回遠程主機的主機名,如果設置為false,則直接返回IP地址;
maxPostSize:指定POST方式請求的最大量,沒有指定默認為2097152;
protocol:值必須為HTTP1.1,如果使用AJP處理器,該值必須為AJP/1.3;
proxyName:如這個連接器正在一個代理配置中被使用,指定這個屬性,在request.getServerName()時返回;
redirectPort:如連接器不支持SSL請求,如收到SSL請求,Catalina容器將會自動重定向指定的端口號,讓其進行處理;
scheme:設置協(xié)議的名字,在request.getScheme()時返回,SSL連接器設為”https”,默認為”http”;
secure:在SSL連接器可將其設置為true,默認為false;
URIEncoding:用于解碼URL的字符編碼,沒有指定默認值為ISO-8859-1;
useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的編碼來取代URIEncoding,用于解碼URI查詢參數(shù),默認為false;
xpoweredBy:為true時,Tomcat使用規(guī)范建議的報頭表明支持Servlet的規(guī)范版本,默認為false;
acceptCount:當所有的可能處理的線程都正在使用時,在隊列中排隊請求的最大數(shù)目。當隊列已滿,任何接收到的請求都會被拒絕,默認值為10;
bufferSize:設由連接器創(chuàng)建輸入流緩沖區(qū)的大小,以字節(jié)為單位。默認情況下,緩存區(qū)大的大小為2048字節(jié);
compressableMimeType:MIME的列表,默認以逗號分隔。默認值是text/html,text/xml,text/plain;
compression:指定是否對響應的數(shù)據(jù)進行壓縮。off:表示禁止壓縮、on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進行壓縮,默認值為off;
connectionTimeout:設置連接的超時值,以毫秒為單位。默認值為60000=60秒;
disableUploadTimeOut:允許Servlet容器,正在執(zhí)行使用一個較長的連接超時值,以使Servlet有較長的時間來完成它的執(zhí)行,默認值為false;
maxHttpHeaderSize:HTTP請求和響應頭的最大量,以字節(jié)為單位,默認值為4096字節(jié);
maxKeepAliveRequest:服務器關閉之前,客戶端發(fā)送的流水線最大數(shù)目。默認值為100;
maxSpareThreads:允許存在空閑線程的最大數(shù)目,默認值為50;
minSpareThreads:設當連接器第一次啟協(xié)創(chuàng)建線程的數(shù)目,確保至少有這么多的空閑線程可用。默認值為4;
port:服務端套接字監(jiān)聽的TCP端口號,默認值為8080(必須);
socketBuffer:設Socket輸出緩沖區(qū)的大?。ㄒ宰止?jié)為單位),-1表示禁止緩沖,默認值為9000字節(jié);
toNoDelay:為true時,可以提高性能。默認值為true;
threadPriority:設JVM中請求處理線程優(yōu)先級。默認值為NORMAL-PRIORITY;Engine
?為特定的Service處理所有的請示。每個Service只能包含一個Engine元素,它負責接收和處理此Service所有的連接器收到的請求,向連接發(fā)回響應,并最終顯示在客戶端。<Engine>至少有一個<Host>元素,必須至少有一個<Host>屬性的名字與defaultHost指定的名字相匹配。
#參數(shù)解析 className:實現(xiàn)org.apache.catalina.Engine接口,默認實現(xiàn)類為org.apache.catalina.core.StandardEngine類; defaultHost:默認主機名,值必須與<Service>的name值相匹配; name:指定Engine的邏輯名字(必須); jvmRoute:在負載勻衡中使用的標識符,必須唯一;
Host
?表示一個虛擬主機,為特定的虛擬主機處理所有請求
appBase:設定應用程序的基目錄,絕對路徑或相對于%CATALINA_HOME%的路徑名;autoDeploy:指示Tomcat運行時,如有新的WEB程序加開appBase指定的目錄下,是否為自動布署,默認值為true;className:實現(xiàn)了org.apache.catalina.Host接口的類,標準實現(xiàn)類為org.apache.catalina.core.StandardHost類;deployOnStartup:Tomcat啟動時,是否自動部署appBase屬性指定目錄下所有的WEB應用程序,默認值為true;name:虛擬主機的網(wǎng)絡名(必須);
context
?一個WEB應用程序,處理當前WEB應用程序的所有請求,每一個<Context>必須使用唯一的上下文路徑
className:實現(xiàn)了org.apache.catalina.Context接口的類,標準實現(xiàn)類org.apache.catalina.core.StandardContext類;cookies:是否將Cookie應用于Session,默認值為true;crossContext:是否允許跨域訪問,為true時,在程序內調用ServletContext.getContext()方法將返回一個虛擬主機上其它web程序的請求調度器;默認值為false,調 徑用getContext()返回為null;docBase:絕對路徑或相對于Host的appBase 屬性的相對路徑;privileged:為true,允許Web應用程序使用容器的Servlet;path:指定上下文路徑。一個虛擬主機中,上下文路徑必須唯一;reloadable:為true,Tomcat運行時,如果WEB-INF/classes和WEB-INF/lib目錄中有改變,Tomcat會自動重新加載該WEB應用程序。雖方便,但開銷也大,默認值為false,我們在調用可以打開,發(fā)布后再關閉;cacheMaxSize:靜態(tài)資源緩存最大值,以KB為單位,默認值為10240KB;cachingAllowed:是否允許靜態(tài)資源緩存,默認為true;caseSensitive:默認為true,資源文件名大小寫敏感,如果為false大小寫不敏感;unpackWAR:默認為true;workDir:為WEB應用程序內部的Servlet指定臨時讀寫的目錄路徑名。如沒有設置,則Tomcat會在%CATALINA_HOME%/work目錄下提供一個合適的目錄;
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.security.SecurityListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<!-- 全局命名資源,來定義一些外部訪問資源,其作用是為所有引擎應用程序所引用的外部資源的定義 -->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!-- 定義的一個名叫“UserDatabase”的認證資源,將conf/tomcat-users.xml加載至內存中,在需要認證的時候到內存中進行認證 -->
<Service name="Catalina">
<!-- # 定義Service組件,同來關聯(lián)Connector和Engine,一個Engine可以對應多個Connector,每個Service中只能一個Engine -->
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<!-- 修改HTTP/1.1的Connector監(jiān)聽端口為80.客戶端通過瀏覽器訪問的請求,只能通過HTTP傳遞給tomcat。還可以設置server與URIEncoding參數(shù) -->
<Engine name="Catalina" defaultHost="test.com">
<!--修改當前Engine,默認主機是:www.test.com,此處寫主機域名或ip -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!-- Realm組件,定義對當前容器內的應用程序訪問的認證,通過外部資源UserDatabase進行認證 -->
<Host name="test.com" appBase="/web" unpackWARs="true" autoDeploy="true">
<!-- 定義一個主機,域名為:test.com,應用程序的目錄是/web,設置自動部署,自動解壓 -->
<Alias>www.test.com</Alias>
<!-- 定義一個別名www.test.com,此處寫主機域名或ip-->
<Context path="" docBase="www/" reloadable="true" />
<!-- 定義該應用程序,訪問路徑"",即訪問www.test.com即可訪問,網(wǎng)頁目錄為:相對于appBase下的www/,即/web/www,并且當該應用程序下web.xml或者類等有相關變化時,自動重載當前配置,即不用重啟tomcat使部署的新應用程序生效 -->
<Context path="/bbs" docBase="/web/bbs" reloadable="true" />
<!-- 定義另外一個獨立的應用程序(虛擬主機),訪問路徑為:www.test.com/bbs,該應用程序網(wǎng)頁目錄為/web/bbs -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/www/logs"
prefix="www_access." suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
<!-- 定義一個Valve組件,用來記錄tomcat的訪問日志,日志存放目錄為:/web/www/logs如果定義為相對路徑則是相當于$CATALINA_HOME,并非相對于appBase,這個要注意。定義日志文件前綴為www_access.并以.log結尾,pattern定義日志內容格式,具體字段表示可以查看tomcat官方文檔 -->
</Host>
<Host name="manager.test.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 定義一個主機名為man.test.com,應用程序目錄是$CATALINA_HOME/webapps,自動解壓,自動部署 -->
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="172.16.100.*" />
<!-- 定義遠程地址訪問策略,僅允許172.16.100.*網(wǎng)段訪問該主機,其他的將被拒絕訪問 -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/bbs/logs"
prefix="bbs_access." suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
<!-- 定義該主機的訪問日志 -->
</Host>
</Engine>
</Service>
</Server
log相關的日志
- catalina.2024-08-14.log 運行時的錯誤信息日志
- host-manager.2024-08-14.log 記錄網(wǎng)上對Tomcat做的配置
- localhost_access_log.2024-08-14.txt 訪問日志,直到誰訪問了我
- catalina.out 運行的報錯信息日志總和
- localhost.2024-08-14.log Tomcat啟動請求信息
- manager.2024-08-14.log 和host-manager.2024-08-14.log一樣,一般都是空的,不是空的時那就是被入侵了
Tomcat部署項目
?tomcat除了可以部署文件夾之外,還可以部署編程人員打包好的.war和.jar文件
部署jpress---war
配置數(shù)據(jù)庫環(huán)境
#創(chuàng)建ipress分庫,并設置編碼為utf8 mysql> create database jpress default character set utf8; #創(chuàng)建用戶 mysql> grant all on jpress.* to jpress@'%' identified by '111111';
部署項目
將war包放入tomcat的項目目錄

啟動tomcat
[root@localhost webapps]# /opt/apache-tomcat-8.5.78/bin/startup.sh

訪問項目

配置數(shù)據(jù)庫信息

配置網(wǎng)站信息
訪問網(wǎng)站,登錄
http://主機ip:8080/jpress-web-newest/admin/login

部署當當網(wǎng)--文件夾
配置數(shù)據(jù)庫
# 創(chuàng)建分庫 mysql> create database dang; # 創(chuàng)建用戶 mysql> grant all on dang.* to dang@'%' identified by '111111'; # 導入數(shù)據(jù) mysql> use dang mysql> source /opt/dang.sql
修改項目中數(shù)據(jù)庫連接配置
位置:\WEB-INF\classes


部署項目

啟動項目
[root@localhost myweb]# /opt/apache-tomcat-8.5.78/bin/startup.sh
訪問
http://主機ip:8080/dang/Book/BookFace.do

Tomcat優(yōu)化
常用優(yōu)化手段固定,需要多看多記憶
安全優(yōu)化
telnet管理端口保護(強制)
| 類別 | 配置內容及說明 | 標準配置 | 備注 |
|---|---|---|---|
| telnet管理端口保護 | 1.修改默認的8005管理端口為不易猜測的端口(大于1024);2.修改SHUTDOWN指令為其他字符串; | <Server port="**8527**" shutdown="**dangerous**"> | 1.以上配置項的配置內容只是建議配置,可以按照服務實際情況進行合理配置,但要求端口配置在8000~8999之間 |
降權啟動(強制)
| 類別 | 配置內容及說明 | 標準配置 | 備注 |
|---|---|---|---|
| 降權啟動 | 1.tomcat啟動用戶權限必須為非root權限,盡量降低tomcat啟動用戶的目錄訪問權限;2.如需直接對外使用80端口,可通過普通賬號啟動后,配置iptables規(guī)則進行轉發(fā); | 避免一旦tomcat 服務被入侵,黑客直接獲取高級用戶權限危害整個server的安全; |
文件列表訪問控制(強制)
| 類別 | 配置內容及說明 | 標準配置 | 備注 |
|---|---|---|---|
| 文件列表訪問控制 | 1.conf/web.xml文件中default部分listings的配置必須為false; | <init-param><param-name>listings</param-name><param-value>false</param-value></init-param> | false為不列出目錄文件,true為允許列出,默認為false; |
起停腳本權限回收(推薦)
| 類別 | 配置內容及說明 | 標準配置或操作 | 備注 |
|---|---|---|---|
| 起停腳本權限回收 | 去除其他用戶對Tomcat的bin目錄下shutdown.sh、startup.sh、catalina.sh的可執(zhí)行權限; | chmod -R 744 tomcat/bin/* | 防止其他用戶有起停線上Tomcat的權限; |
訪問日志格式規(guī)范(推薦)
conf/server.xml
| 類別 | 配置內容及說明 | 標準配置或操作 | 備注 |
|---|---|---|---|
| 訪問日志格式規(guī)范 | 開啟Tomcat默認訪問日志中的Referer和User-Agent記錄 | <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/> | 開啟Referer和User-Agent是為了一旦出現(xiàn)安全問題能夠更好的根據(jù)日志進行問題排查; |
性能優(yōu)化
上策:優(yōu)化代碼
- 該項需要開發(fā)經(jīng)驗足夠豐富,對開發(fā)人員要求較高
中策:jvm**優(yōu)化機制** 垃圾回收機制 把不需要的內存回收
- 優(yōu)化jvm--優(yōu)化垃圾回收策略
- 優(yōu)化catalina.sh配置文件。在catalina.sh配置文件中添加以下代碼
# tomcat分配1G內存模板 JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m" ? # 重啟服務 su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcat su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat
下策:加足夠大的內存
- 該項的資金投入較大
下下策:每天0點定時重啟tomcat
- 使用較為廣泛
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決tomcat啟動報錯:一個或多個listeners啟動失敗問題
這篇文章主要介紹了解決tomcat啟動報錯:一個或多個listeners啟動失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Linux上tomcat的虛擬主機IP映射配置(圖片服務器)
有時候我們會使用tomcat作為一個圖片資源服務器,本文主要介紹了Linux上tomcat的虛擬主機IP映射配置,通過tomcat服務器來訪問我們的圖片,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08
解決“Unable to start embedded Tomcat“錯誤的完整
在使用Spring Boot開發(fā)應用程序時,有時可能會遇到"Unable to start embedded Tomcat"的錯誤,這可能是由多種原因引起的,本文將詳細介紹這個錯誤的常見原因以及解決方法,幫助你快速解決問題并順利啟動應用程序2023-10-10
Tomcat部署SpringBoot項目的war包的方法及詳細步驟
這篇文章主要介紹了Tomcat部署SpringBoot項目的war包的方法,本文分步驟結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
Windows 下修改Tomcat jvm參數(shù)的方法
這篇文章主要介紹了Windows 下修改Tomcat jvm參數(shù)的相關資料,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03

