Tomcat 提供了遠端部署 Web Application ( 網頁應用系統,這和
Web Services 網頁應用服務 是兩件事 ) 的功能,但如何設定呢?
通常,我不會使用 Tomcat 預設的路徑 (指的是 $CATALINA_HOME/webapps/) 放置所開發的應用系統,反而會另外安排一塊目錄(特別是不和 / 放一起的獨立 partition )。這麼做的好處是若系統重建時,原來的 Web Application 相關程式都不會被洗掉,另外在測試各 Application Server 時能有單一的程式目錄。
設定虛擬主機
為了設定應用系統的獨立目錄,我的作法是建立一個新的虛擬主機 (Virtual Host),方法不複雜,只要把 Tomcat 設定檔 server.xml 中的<Host name="localhost">...</Host>段落複製一份再改名即可:例如將
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"> <Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
timestamp="true"/>
</Host>
複製成:
<!-- app.foo.com 是說明用的,您應該使用正式的網路主機名稱 -->
<Host name="app.foo.com" debug="0" appBase="/home/app"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false" >
<!-- 這是設定有關本站台的一般記錄保存方式 -->
<!-- directory 若未指定絕對位址時,則採相對於 $CATALINA_HOME 路徑方式認定 -->
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="app_log." suffix=".txt"
timestamp="true"/>
<!-- 這是設定有關本站台的資源存取記錄保存方式 -->
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="app_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
<!-- 這一段是設定這個虛擬主機下有幾個 Web Application -->
<Context path="/application" docBase="application" debug="5"
reloadable="true" crossContext="true" >
</Context>
</Host>
記得 <Host>...</Host> 所在的區段必須在 <Engine>...</Engine> 中。當完成以上設定後只要重啟 Tomcat 就可以完成虛擬主機的建置,此時
http://localhost/ 和
http://app.foo.com 表示的是兩個不同的虛擬主機,也就是兩個不同的服務。
那如果有多個網域名稱對上同一個 IP ,而那些網域名稱並未在 server.xml 中設定時,Tomcat 會怎麼處理呢?其實 Tomcat 還是會提供一個預設虛擬主機來服務這些網域名稱,而這個預設的虛擬主機也同樣在 server.xml 中指定,如下所示:
<Engine name="Catalina" defaultHost="app.foo.com" debug="0">
設定維護界面
Tomcat 的遠端部署功能必須使用 /manager 維護界面達成。
當完成虛擬主機設置時,Tomcat 會在 $CATALINA_HOME/conf/Catalina/ 目錄下建立一個與新設定的虛擬主機名稱同名的目錄 app.foo.com,而這個目錄通常沒有包含任何檔案。
同樣在 $CATALINA_HOME/conf/Catalina/ 還有另一個目錄叫 localhost ,這個是 Tomcat 預設的虛擬主機名稱,目錄中包含有 3 個 xml 檔,其中一個檔名叫做 manager.xml。
manager.xml 這個檔其實正是 Tomcat 用來判斷指定虛擬主機網址是否需要啟動 /manager 遠端維護界面的設定檔,因此必須複製一份到 $CATALINA_HOME/conf/Catalina/app.foo.com/ 目錄下,如範例:
[root@app Catalina]# pwd
/opt/jakarta-tomcat-5.0.19/conf/Catalina
[root@app Catalina]# cp localhost/manager.xml app.foo.com/
完成複製動作後,最好去修改一下 manager.xml 的設定檔,將 docBase 指向正確的 Servlet 所在目錄:
<Context path="/manager" debug="0" privileged="true"
docBase="/opt/jakarta-tomcat-5.0.19/server/webapps/manager" > <!-- Link to the user database we will get roles from -->
<ResourceLink name="users" global="UserDatabase"
type="org.apache.catalina.UserDatabase"/>
</Context>
設定維護者帳號及密碼
最後 manager 這個 Servlet 有限制使用者的角色必須是 manager,因此必須設定一個維護者的帳號並配屬到 manager 這個角色。設定的方式是編輯 $CATALINA_HOME/conf/tomcat-users.xml 這個檔,內容如下:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<user username="admin" password="password" roles="manager"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
檢驗設定狀況
完成以上設定後,重新啟動 Tomcat 並開啟瀏覽器進行測試。
在瀏覽器網址列上填入
http://app.foo.com/manager/list ( 請填入所設定的真實網址 ),輸入前面設定的維護者帳號、密碼後,只要看到瀏覽器輸出 OK - Listed applications for virtual host app.foo.com 字樣及其目前所管理的所有網頁應用系統記錄即算設定完成。如範例:
OK - Listed applications for virtual host app.foo.com
/blog:running:1:/home/webapps/blog
/manager:running:0:/opt/jakarta-tomcat-5.0.19/server/webapps/manager
如何使用遠端部署端維護功能
若確認 Tomcat 遠端部署維護功能已設定完成後,可在瀏覽器網址列上填入
http://app.foo.com/manager/html-manager-howto.html 即可查看如何使用遠端線上管理功能。
沒有留言:
張貼留言