tomcat安裝和配置

一 什麼是tomcat

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。

Tomcat是一個JSP/Servlet容器。其作爲Servlet容器,有三種工作模式:獨立的Servlet容器、進程內的Servlet容器和進程外的Servlet容器。

二 tomcat 的版本:

tomcat 現有的版本有tomcat 7 ,tomcat 8 tomcat8.5,tomcat 9
image
我們可以在圖片中看到tomcat8.0版本後續也是不會再進行更新和升級了,我們可以使用tomcat8.5和9.0

三 tomcat的下載

3.1 tomcat9版本下載鏈接

https://tomcat.apache.org/download-90.cgi

3.2 tomcat8.5版本下載鏈接

https://tomcat.apache.org/download-80.cgi

我們可以根據我們需要版本和系統進行下載。

四 tomcat的安裝

tomcat的安裝,由於該應用常用在linux服務器上,我們的安裝教程是基於centos7進行安裝:

4.1 java環境配置

tomcat 9 版本需要java8以上才能支持
cd /tmp && wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm 
rpm -ivh jdk-8u131-linux-x64.rpm
 環境變量:
vi + /etc/profile 
JAVA_HOME=/usr/java/jdk1.8.0_131 
CLASSPATH=.:$JAVA_HOME/lib.tools.jar 
PATH=$JAVA_HOME/bin:$PATH export 
JAVA_HOME CLASSPATH PATH 

#加載環境變量source /etc/profile

4.2 tomcat安裝

# 安裝wgetyum install wget -y# 下載tomcat包cd /tmp &&wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.13/bin/apache-tomcat-9.0.13.tar.gz# 解壓tar -xzvf  apache-tomcat-9.0.13.tar.gz# 移動到指定位置並重命名mv /tmp/apache-tomcat-9.0.13 /opt/tomcat9# 啓動 tomcat/opt/tomcat9/bin/startup.sh 
或者
/opt/tomcat9/bin/catalina.sh start# # 關閉tomcat/opt/tomcat9/bin/shutdown.sh
或者
/opt/tomcat9/bin/catalina.sh stop
還可以直接kill 進程號,當我們的tomcat是有用戶進行訪問的時候,我們殺死不了這個進程,只能通過強制殺死 kill -9# 查看當前的版本/opt/tomcat9/bin/version.sh# 開放端口tomcat 默認訪問端口是8080,我們可以在conf目錄的文件server.xml的69行進行端口更改。

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
如果是在阿里雲進行配置的話,記得打開安全組的8080端口.

訪問:

路徑是 ip:8080(tomcat默認是綁定ip 0.0.0.0)
image

五 tomcat的目錄結構

bin  # 腳本啓動目錄conf #配置文件目錄lib  #tomcat運行的依賴包logs #日誌文件目錄temp #臨時文件目錄webapps  # 用來存放應用程序
    --docs  # 文檔
    --examples # 示例
    --host-manager # 虛擬主機web管理界面
    --manager # 管理界面
    --ROOT # 默認訪問的應用程序work # 部署的Web應用程序的臨時工作目錄,當我們需要清除緩存的時候可以將該目錄刪除.然後重啓動tomcat.

六 tomcat的初始化

根據需求來進行初始化

  1. 第一更改端口:

    編輯配置文件 server.xml .
    大約在69行,將 port = "8080"更改成我們想綁定的端口.
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

  2. 配置編碼

    爲了避免程序上的一些請求和返回的中文亂碼問題.我們需要配置.
    編輯配置文件 server.xml .
    大約在69行後,添加 useBodyEncodingForURI="true" URIEncoding="UTF-8"

    <Connector port="8080" protocol="HTTP/1.1"
                useBodyEncodingForURI="true" URIEncoding="UTF-8"
                connectionTimeout="20000"
                redirectPort="8443" />
  3. 配置文件




  4. <Server port="8005" shutdown="SHUTDOWN">
    <!-- 屬性說明
        port:指定一個端口,這個端口負責監聽關閉Tomcat的請求
        shutdown:向以上端口發送的關閉服務器的命令字符串
    -->
     
      <Listener className="org.apache.catalina.core.AprLifecycleListener" />
      <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
     
      <GlobalNamingResources>
     
        <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
     
        <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元素只能有一個Engine元素.元素處理在同一個<Service>中所有<Connector>元素接收到的客戶請求
    -->
      <Service name="Catalina">
    <!-- 屬性說明
        name:Service的名稱
    -->
     
        <!--
            Connector元素:
                由Connector接口定義.<Connector>元素代表與客戶程序實際交互的組件,它負責接收客戶請求,以及向客戶返回響應結果.
        -->
        <Connector port="80" maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" />
        <!-- 屬性說明
            port:服務器連接器的端口號,該連接器將在指定端口偵聽來自客戶端的請求。
            enableLookups:如果爲true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名;
                        若爲false則不進行DNS查詢,而是返回其ip地址。
            redirectPort:服務器正在處理http請求時收到了一個SSL傳輸請求後重定向的端口號。
            acceptCount:當所有可以使用的處理請求的線程都被用光時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,而返回Connection refused錯誤。
            connectionTimeout:等待超時的時間數(以毫秒爲單位)。
            maxThreads:設定在監聽端口的線程的最大數目,這個值也決定了服務器可以同時響應客戶請求的最大數目.默認值爲200。
            protocol:必須設定爲AJP/1.3協議。
            address:如果服務器有兩個以上IP地址,該屬性可以設定端口監聽的IP地址,默認情況下,端口會監聽服務器上所有IP地址。
            minProcessors:服務器啓動時創建的處理請求的線程數,每個請求由一個線程負責。
            maxProcessors:最多可以創建的處理請求的線程數。
            minSpareThreads:最小備用線程 。
            maxSpareThreads:最大備用線程。
            debug:日誌等級。
            disableUploadTimeout:禁用上傳超時,主要用於大數據上傳時。
        -->
     
     
        <Connector port="8009" 
                   enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
        <!-- 負責和其他HTTP服務器建立連接。在把Tomcat與其他HTTP服務器集成時就需要用到這個連接器。 -->
        
        <Engine name="Catalina" defaultHost="localhost">
        <!-- 屬性說明
            name:對應$CATALINA_HOME/config/Catalina中的Catalina 
            defaultHost:對應Host元素中的name屬性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost
                缺省的處理請求的虛擬主機名,它至少與其中的一個Host元素的name屬性值是一樣的
            debug:日誌等級
        -->
     
          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                 resourceName="UserDatabase"/>
        <!--
            由Host接口定義.一個Engine元素可以包含多個<Host>元素.
                每個<Host>的元素定義了一個虛擬主機.它包含了一個或多個Web應用.
        -->
        <Host name="localhost" appBase="webapps"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
        
        <!-- 屬性說明
            name:在此例中一直被強調爲$CATALINA_HOME/config/Catalina/localhost中的localhost虛擬主機名
            debug:是日誌的調試等級 
            appBase:默認的應用路徑,也就是把應用放在一個目錄下,並在autoDeploy爲true的情況下,可自動部署應用此路徑相對於$CATALINA_HOME/ (web applications的基本目錄)
            unpackWARs:設置爲true,在Web應用爲*.war是,解壓此WAR文件. 
                       如果爲true,則tomcat會自動將WAR文件解壓;否則不解壓,直接從WAR文件中運行應用程序.
            autoDeploy:默認爲true,表示如果有新的WEB應用放入appBase 並且Tomcat在運行的情況下,自動載入應用 
        -->
     
        <Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" > 
            </Context>
        <!-- 屬性說明
            path:訪問的URI,如:http://localhost/是我的應用的根目錄,訪問此應用將用:http://localhost/demm進行操作,此元素必須,
                表示此web application的URL的前綴,用來匹配一個Context。請求的URL形式爲http://localhost:8080/path/*
            docBase:WEB應用的目錄,此目錄必須符合Java WEB應用的規範,web application的文件存放路徑或者是WAR文件存放路徑。
            debug:日誌等級 
            reloadable:是否在程序有改動時重新載入,設置成true會影響性能,但可自動載入修改後的文件,
                如果爲true,則Tomcat將支持熱部署,會自動檢測web application的/WEB-INF/lib和/WEB-INF/classes目錄的變化,
                自動裝載新的JSP和Servlet,我們可以在不重起Tomcat的情況下改變web application
        -->
          </Host>
        </Engine>
      </Service>
    </Server>

七 tomcat的啓動

# 啓動 tomcat/opt/tomcat9/bin/startup.sh 
或者/opt/tomcat9/bin/catalina.sh start# # 關閉tomcat/opt/tomcat9/bin/shutdown.sh
或者/opt/tomcat9/bin/catalina.sh stop
還可以直接kill 進程號,當我們的tomcat是有用戶進行訪問的時候,我們殺死不了這個進程,只能通過強制殺死 kill -9# 查看當前的版本/opt/tomcat9/bin/version.sh

八 tomcat更改綁定ip

在生產環境我們經常有這樣的需求,將tomcat的綁定ip更改.不讓外部人可以直接訪問.

tomcat默認的綁定是 0.0.0.0 ,也就意味着這樣外網就可以訪問我們的tomcat,
但是我們想要我們的tomcat不讓外網訪問

解決方法:

  1. 更改綁定ip,綁定127.0.0.1,這樣就只能本機訪問了
    編輯配置文件 server.xml .
    大約在69行,在配置端口的地方,添加 :address="127.0.0.1"

    <Connector port="8080" protocol="HTTP/1.1"
           address="127.0.0.1"
           connectionTimeout="20000"
           redirectPort="8443" />
  2. 更改防火牆規則,不對外開放8080端口.

    firewall-cmd  --remove-port=8080/tcp --permanentfirewall-cmd  --reload

九 tomcat隱藏manager界面

通過nginx重定向的隱藏界面

十 jenkins使用插件自動部署tomcat

使用jenkins來進行發佈war包

  1. 除了常規的將tomcat暫停後,進行刪除原來的war包,scp傳輸新的war包,啓動tomcat

  2. 還可以使用插件 deploy war/ear to a container ,通過tomcat的manager界面來進行 來進行發佈。

deploy war/ear to a container:發佈war包到服務器

deploy artifacts to maven reepository:發佈到maven服務器

image

WAR/EAR files: 填的是生成的wa包的路徑。ugou-admin/target/ugou-admin.war(實際路徑是:/root/.jenkins/jobs/ugou-admin-online/workspace/ugou-admin/target/ugou-admin.war)
Context path: 填的是上傳到tomcat的路徑。即使用localhost/(content path設置的名字)來訪問項目
比如我的項目訪問路徑是 :http://127.0.0.1/ugou-admin/ 那麼這裏我應該填入的就是 /ugou-admin

Container: 選擇我們使用的tomcat版本。
Manager user name /Manager password: 填入我們在$CATALINA_BASE/conf/tomcat-users.xml 配置的用戶名和密碼

Tomcat URL : 填入我們的tomcat url 比如我們設置的端口是80 那麼直接填入ip就行了 :http://127.0.0.1/,如果有端口,那麼我們就需要填入對應的端口

Deploy on failure : 構建失敗是否還發布。勾選表示是,不勾選表示不是,生產環境建議不勾選。

十一 tomcat 部署項目的三種方法(補充)

11.1 方法一 把war包添加到webapps

直接將 war 包放在 ./webapps 下

tomcat 會自動將war解壓

image

11.2 方法二 更改配置文件 server.xml(官方不建議使用該方法)

我們可以在 ./conf/目錄下找到server.xml文件
我們需要在 裏面添加上我們的項目的訪問路徑和存放路徑配置

<Context  path="/djx" docBase="/tmp/djx/" reloadable="true" />
path 指的是 訪問路徑  
docBase 指的是項目存放路徑
reloadable 設置爲true表示Catalina將監視 /WEB-INF/classes/和/WEB-INF/lib的文件,一旦發生更改將自動重新加載Web應用程序。它可以在在開發的時候使用,但需要消耗更多資源,官方文檔寫到不建議在生產環境上使用,所以它的默認值是false.8.0版本文檔
Set to true if you want Catalina to monitor classes in /WEB-INF/classes/ and /WEB-INF/lib for changes, and automatically reload the web application if a change is detected. This feature is very useful during application development, but it requires significant runtime overhead and is not recommended for use on deployed production applications. That's why the default setting for this attribute is false. You can use the Manager web application, however, to trigger reloads of deployed applications on demand.

配置示例:

配置示例

11.3 方法三 使用xml配置文件(建議方法)

在 ./conf/Catalina/localhost/ 下添加xml配置文件.

示例: 我要讓/tmp/www/ 裏的網站部署在tomcat上 。

vim  djx.xml    # 文件的名稱也就是我們後面訪問時要在ip端口加的後綴

djx.xml 內容,docBase 後面填入項目的路徑

<Context  docBase="/tmp/www/" />

然後我們重啓tomcat,然後在瀏覽器 192.168.1.198/djx/訪問的文件名 即可訪問到我們的項目文件了
image

11.4 注意點

注意點一

方法三中如果我想直接通過ip+端口就能直接訪問到我部署的項目,那麼我們這個xml 文件的名稱就應該是 ROOT.xml(要全都大寫哦)

第三種的文件命名示例:
image

注意點二

對於參數reloadable="true" ,在方法二特別說明了,大家注意。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章