好了抱怨完了,不過工作還是要做…工程師的工作還是要做的…為了4位小朋友卡巴結一點啦~~
首先,系統環境及程式版本要說明一下:
1. 作業系統:RHEL4-U7
2. Apache :Httpd-2.0.63.tar.gz (-o-)SSO要求的
3. mod_jk :tomcat-connectors-1.2.30-src.tar.gz
4. jdk :jdk-1.6u13-linux-i586.bin
5. ant :apache-ant-1.6.5-bin.tar.gz
6. Tomcat :apache-tomcat-6.0.14-src.tar.gz
2. Apache :Httpd-2.0.63.tar.gz (-o-)SSO要求的
3. mod_jk :tomcat-connectors-1.2.30-src.tar.gz
4. jdk :jdk-1.6u13-linux-i586.bin
5. ant :apache-ant-1.6.5-bin.tar.gz
6. Tomcat :apache-tomcat-6.0.14-src.tar.gz
一、Httpd 安裝
a.解開 httpd 的 tarball
tar xfz httpd-2.0.63.tar.gz
b.變更至 httpd 源碼目錄
cd httpd-2.0.63
c.編譯 httpd 程式,其中包含 proxy 及 ssl 模組
./configure --with-suexec-gidmain \
--with-suexec-logfile \
--enable-proxy \
--enable-proxy-connect \
--enable-proxy-ftp \
--enable-proxy-http \
--enable-ssl \
--enable-http \
--enable-cgi \
--enable-so \
--enable-cache \
--enable-file-cach \
--enable-disk-cache \
--enable-mem-cache \
--enable-mime-magic \
--enable-headers \
--enable-module \
--with-ssl=/usr \
--prefix=/usr/local/apache2
其中有 --with-ssl 是設定 openssl 的產品目錄,一般情況作業系統在安裝時都會有,
所以請確認是否有安裝openssl(rpm -qa grep openssl)及檢查產品安裝的目錄
(rpm -ql openssl),如果沒有安裝openssl,請至 http://www.openssl.org 下載源碼安裝。
make make install
※程序執行完後,產品會安裝至 /usr/local/apache2 下。
d.設定環境變數
1.增加 apache2 的 bin 目錄到 PATH
echo "export PATH=/usr/local/apache2/bin:\$PATH" >> /etc/profile
※記得要登出系統,再次登入環境變數才會生效。
二、JK 安裝
JK 為 Apache tomcat-connectors 專案,其用途為 Apache 連繫 Tomcat 的介面程式,
所編譯出的程式為 shared object(so) 型態,以便 Apache Include 用。
a.解開 tomcat-connectors 的 tarball
tar xfz tomcat-connectors-1.2.30-src.tar.gz
b.變更至 tomcat-connectors 源碼目錄
cd tomcat-connectors-1.2.30-src
c.編譯 tomcat-connectors
cd native
./configure --with-java-home=/usr/local/java \
--with-apxs=/usr/local/apache2/bin/apxs
make
make install ※程序執行完後,產品 mod_jk.so 會安裝至 /usr/local/apache2/modules/ 下。
三、JDK 安裝
程式是用Java開發的,所以jdk的安裝是必要的,程式請到甲古文網站(http://java.sun.com/j2se/)下載。
a.解開 jdk-6u13-linux-i586.bin 的 binary file
./jdk-6u13-linux-i586.bin
※執行後會有Binary Code License Agreement的說明,在確認後即解開產品 jdk1.6.0_13。
b.將產品搬移到 /usr/local/java,主要原因是我習慣把 java 放在 /usr/local/java 目錄下。
mv jdk1.6.0_13 /usr/local/java
c.設定環境變數
編輯 /etc/profile.d/java.sh ,內容如下:
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export JRE_HOME=/usr/local/java/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
※記得要登出系統,再次登入環境變數才會生效。
四、ant 安裝
ant 是隻了不起的螞蟻,許多 java 程式在執行、測試時,都使用到這隻螞蟻,
其實有寫過 C 程式的人,都應該知道 make 的用途,ant 的角色就像是 make。
a.解開 apache-ant-1.6.5-bin.tar.gz 的 binary file
tar xfz apache-ant-1.6.5-bin.tar.gz
※產品解開目錄為 apache-ant-1.6.5
b.將產品搬移到 /usr/local/ant,主要原因是我習慣把 ant 放在 /usr/local/ant 目錄下。
mv apache-ant-1.6.5 /usr/local/ant
c.設定環境變數
編輯 /etc/profile.d/java.sh ,內容如下:
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export ANT_HOME=/usr/local/ant
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ANT_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$ANT_HOME/lib:$CLASSPATH
export JRE_HOME=/usr/local/java/jre
export ANT_HOME=/usr/local/ant
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ANT_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$ANT_HOME/lib:$CLASSPATH
※記得要登出系統,再次登入環境變數才會生效。
五、Tomcat 本來就已經安裝好了,但是還是說明一下安裝方式。
a.解開 apache-tomcat-6.0.14-src.tar.gz 的 tarball
tar xfz apache-tomcat-6.0.14-src.tar.gz
b.變更至 apache-tomcat-6.0.14-src 源碼目錄
cd apache-tomcat-6.0.14-src
c.執行 tomcat 相關程式下載,我想是下載 tomcat 所需的程式。
ant download
※如果這部份程序有問題,請參考目錄中 BUILDING.txt,
或者乾脆下載 tomcat binary file 來用最快。
d.編譯 tomcat 程式
ant
e.編譯完後,將產品搬移到 /usr/local/tomcat,主要原因是我習慣把 tomcat 放
在 /usr/local/tomcat 目錄下。
mv apache-tomcat-6.0.14-src /usr/local/tomcat
f.設定環境變數
編輯 /etc/profile.d/java.sh ,內容如下:
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export ANT_HOME=/usr/local/ant
export TOMCAT_HOME=/usr/local/tomcat
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ANT_HOME/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$ANT_HOME/lib:$TOMCAT_HOME/lib:$CLASSPATH
export JRE_HOME=/usr/local/java/jre
export ANT_HOME=/usr/local/ant
export TOMCAT_HOME=/usr/local/tomcat
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ANT_HOME/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$ANT_HOME/lib:$TOMCAT_HOME/lib:$CLASSPATH
※記得要登出系統,再次登入環境變數才會生效。
六、整合設定
a.httpd 設定,編輯 conf/httpd.conf ,增加以下資料。
LoadModule jk_module modules/mod_jk.so
Include conf/mod_jk.conf
b.mod_jk.conf 定義檔設定,提供 httpd.conf 來讀取。
# setup the workers.properties file path, default prefix path is httpd's home (/usr/local/apache2)
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkLogFile /usr/local/apache2/logs/jk.log
JkShmFile /usr/local/apache2/logs/jk-runtime-status
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat +ForwardDirectories +ForwardSSLCertChain
JkRequestLogFormat "%w %V %T"
#JkMountCopy All
# SSL Setting
JkExtractSSL On
JkHTTPSIndicator HTTPS
JkSESSIONIndicator SSL_SESSION_ID
JkCIPHERIndicator SSL_CIPHER
JkCERTSIndicator SSL_CLIENT_CERT
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkLogFile /usr/local/apache2/logs/jk.log
JkShmFile /usr/local/apache2/logs/jk-runtime-status
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat +ForwardDirectories +ForwardSSLCertChain
JkRequestLogFormat "%w %V %T"
#JkMountCopy All
# SSL Setting
JkExtractSSL On
JkHTTPSIndicator HTTPS
JkSESSIONIndicator SSL_SESSION_ID
JkCIPHERIndicator SSL_CIPHER
JkCERTSIndicator SSL_CLIENT_CERT
c.workers.properties 定義檔設定,提供 mod_jk.conf 來讀取,
worker.properties 此設定為一(httpd)對一(tomcat)的系統架構。
# BEGIN workers.properties
# setting tomcat_home and java_home
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java
ps=/
# The advanced router LB worker
worker.list=ap01
#worker.list=router ## for Load balance ##
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap01.port=7009
worker.ap01.host=ap01
worker.ap01.type=ajp13
#worker.ap01.lbfactor=1
worker.ap01.cachesize=10
worker.ap01.cache_timeout=600
worker.ap01.socket_keepalive=1
# Define preferred failover node
#worker.ap01.redirect=ap02
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap02.port=7009
worker.ap02.host=ap02
worker.ap02.type=ajp13
#worker.ap02.lbfactor=1
worker.ap02.cachesize=10
worker.ap02.cache_timeout=600
worker.ap02.socket_keepalive=1
# Define preferred failover node
#worker.ap02.redirect=ap03
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap03.port=7009
worker.ap03.host=ap03
worker.ap03.type=ajp13
#worker.ap03.lbfactor=1
worker.ap03.cachesize=10
worker.ap03.cache_timeout=600
worker.ap03.socket_keepalive=1
# Define preferred failover node
#worker.ap03.redirect=ap01
# Define the LB worker
#worker.router.type=lb
#worker.router.balance_workers=ap01,ap02,ap03
# setting tomcat_home and java_home
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java
ps=/
# The advanced router LB worker
worker.list=ap01
#worker.list=router ## for Load balance ##
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap01.port=7009
worker.ap01.host=ap01
worker.ap01.type=ajp13
#worker.ap01.lbfactor=1
worker.ap01.cachesize=10
worker.ap01.cache_timeout=600
worker.ap01.socket_keepalive=1
# Define preferred failover node
#worker.ap01.redirect=ap02
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap02.port=7009
worker.ap02.host=ap02
worker.ap02.type=ajp13
#worker.ap02.lbfactor=1
worker.ap02.cachesize=10
worker.ap02.cache_timeout=600
worker.ap02.socket_keepalive=1
# Define preferred failover node
#worker.ap02.redirect=ap03
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap03.port=7009
worker.ap03.host=ap03
worker.ap03.type=ajp13
#worker.ap03.lbfactor=1
worker.ap03.cachesize=10
worker.ap03.cache_timeout=600
worker.ap03.socket_keepalive=1
# Define preferred failover node
#worker.ap03.redirect=ap01
# Define the LB worker
#worker.router.type=lb
#worker.router.balance_workers=ap01,ap02,ap03
※worker.properties 可以設定為 Load balance 的系統架構,設定如下:
# BEGIN workers.properties
# setting tomcat_home and java_home
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java
ps=/
# The advanced router LB worker
#worker.list=ap01
## for Load balance ##
worker.list=router
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap01.port=7009
worker.ap01.host=ap01
worker.ap01.type=ajp13
worker.ap01.lbfactor=1
worker.ap01.cachesize=10
worker.ap01.cache_timeout=600
worker.ap01.socket_keepalive=1
# Define preferred failover node
#worker.ap01.redirect=ap02
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap02.port=7009
worker.ap02.host=ap02
worker.ap02.type=ajp13
worker.ap02.lbfactor=1
worker.ap02.cachesize=10
worker.ap02.cache_timeout=600
worker.ap02.socket_keepalive=1
# Define preferred failover node
#worker.ap02.redirect=ap03
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap03.port=7009
worker.ap03.host=ap03
worker.ap03.type=ajp13
worker.ap03.lbfactor=1
worker.ap03.cachesize=10
worker.ap03.cache_timeout=600
worker.ap03.socket_keepalive=1
# Define preferred failover node
#worker.ap03.redirect=ap01
# Define the LB worker
worker.router.type=lb
worker.router.balance_workers=ap01,ap02,ap03
# setting tomcat_home and java_home
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java
ps=/
# The advanced router LB worker
#worker.list=ap01
## for Load balance ##
worker.list=router
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap01.port=7009
worker.ap01.host=ap01
worker.ap01.type=ajp13
worker.ap01.lbfactor=1
worker.ap01.cachesize=10
worker.ap01.cache_timeout=600
worker.ap01.socket_keepalive=1
# Define preferred failover node
#worker.ap01.redirect=ap02
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap02.port=7009
worker.ap02.host=ap02
worker.ap02.type=ajp13
worker.ap02.lbfactor=1
worker.ap02.cachesize=10
worker.ap02.cache_timeout=600
worker.ap02.socket_keepalive=1
# Define preferred failover node
#worker.ap02.redirect=ap03
## worker.list defined worer_name, userd by mod_jk.conf
worker.ap03.port=7009
worker.ap03.host=ap03
worker.ap03.type=ajp13
worker.ap03.lbfactor=1
worker.ap03.cachesize=10
worker.ap03.cache_timeout=600
worker.ap03.socket_keepalive=1
# Define preferred failover node
#worker.ap03.redirect=ap01
# Define the LB worker
worker.router.type=lb
worker.router.balance_workers=ap01,ap02,ap03
d.ssl.conf 定義檔設定,定義 httpd ssl 的服務,編輯 conf/httpd.conf ,
修改以下資料。
※ 設定伺服器憑證及私鑰
SSLCertificateFile /root/CRT/service.crt
SSLCertificateKeyFile /root/KEY/service.key
※設定 jk 對映應用系統網址及worker target,如果是LB,則用router target
JkMount /apps ap01
#JkMount /apps router # for Load Balance
JkMount /apps/* ap01
#JkMount /apps/* router # for Load Balance
e.tomcat 設定,原則上沒有太多的設定,在先前有提到Tomcat已經是在營運了,
都是用 https 來服務,所以說明Tomcat ssl的設定。
編輯 conf/server.xml 檔案,將 SSL 部份的註記取消(default 是 remark 的)。
※而這次的整合,tomcat ssl的服務是要remark的。f.autoDeploy問題,在系統架構分割後,autoDeploy的功能會因為應用系統的分割,
autoDeploy會無效,所以要加 conf/catalina/localhost/manager.xml ,來說明
tomcat即會忽略 server.xml 的設定,而參照 manager.xml 的設定,manager.xml
內容如下:
<?xml version='1.0' encoding='utf-8'?>
<context path="/apps" debug="0" reloadable="true" crosscontext="true" docbase="app2">
※修改後 autoDeploy 的功能即可運作了。
g.啟動 tomcat web container
cd /usr/local/tomcat/bin
startup.sh
h.啟動 httpd with ssl
cd /usr/local/apache2
apachectl startssl
i.使用 browser 檢視 http://localhost/apps/ 及 https://localhost:443/apps/
看是否可以使用,如果可以看到你的應用系統,恭喜你成功啦~~
七、結語
整合成功是你應該做的,如果失敗你就倒大楣了,老闆的心態總是如此,深呼吸一口氣,做完就好啦...
沒有留言:
張貼留言