아파치는 CentOS 6.5 에 포함된 것을 사용함
1. Tomcat & Java 설치
톰켓 설치에 앞서
http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 설치파일을 다운로드하여 JAVA 를 설치한다. 문서에서는 JDK 1.7.0.51 버전의 rpm 파일로 설치하였다. 설치된 java 는 /usr/java 에 설치된다.
톰켓 설치파일은
http://tomcat.apache.org 에서 최신 프로그램를 다운로드한다. 문서에서는 Tomcat 8.0.3 버전을 사용하였다. 설치는 특별한 것을 요구하지 않으며 압축을 풀는 것으로 기본적은 설치는 완료된다. 문서에서는 /app/tools 경로에 압축을 풀었으며, 편의상 실재 설치된 경로를 /app/tomcat 경로로 심볼릭 링크를 생성하여 /app/tomcat 경로로 접근이 가능하도록했다.
2. 웹 서버 연결을 위한 Tomcat Connectors 설치
Tomcat Connector 설치는 컴파일 작업이 필요하며 소스는 http://tomcat.apache.org 에서 다운로한다. 컴파일을 진행하려면 Apr 라이브러리가 필요하며 문서에서는 httpd-devel 패키지를 설치하여 사용하였다. httpd-devel 는 yum 을 사용하여 설치하였다.
# yum install httpd-devel
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: centos.mirror.cdnetworks.com
* extras: centos.mirror.cdnetworks.com
* updates: centos.mirror.cdnetworks.com
base | 1.1 kB 00:00
base/primary | 995 kB 00:00
base 2789/2789
extras | 2.1 kB 00:00
extras/primary_db | 164 kB 00:00
updates | 1.9 kB 00:00
updates/primary_db | 332 kB 00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd-devel.i386 0:2.2.3-83.el5.centos set to be updated
--> Processing Dependency: httpd = 2.2.3-83.el5.centos for package: httpd-devel
--> Processing Dependency: apr-util-devel for package: httpd-devel
--> Running transaction check
---> Package apr-util-devel.i386 0:1.2.7-11.el5_5.2 set to be updated
--> Processing Dependency: httpd = 2.2.3-76.el5.centos for package: mod_ssl
---> Package httpd.i386 0:2.2.3-83.el5.centos set to be updated
--> Running transaction check
---> Package mod_ssl.i386 1:2.2.3-83.el5.centos set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd-devel i386 2.2.3-83.el5.centos updates 155 k
Installing for dependencies:
apr-util-devel i386 1.2.7-11.el5_5.2 base 53 k
Updating for dependencies:
httpd i386 2.2.3-83.el5.centos updates 1.2 M
mod_ssl i386 1:2.2.3-83.el5.centos updates 97 k
Transaction Summary
================================================================================
Install 2 Package(s)
Upgrade 2 Package(s)
Total download size: 1.5 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): apr-util-devel-1.2.7-11.el5_5.2.i386.rpm | 53 kB 00:00
(2/4): mod_ssl-2.2.3-83.el5.centos.i386.rpm | 97 kB 00:00
(3/4): httpd-devel-2.2.3-83.el5.centos.i386.rpm | 155 kB 00:00
(4/4): httpd-2.2.3-83.el5.centos.i386.rpm | 1.2 MB 00:00
--------------------------------------------------------------------------------
Total 4.6 MB/s | 1.5 MB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : apr-util-devel 1/6
Updating : httpd 2/6
Installing : httpd-devel 3/6
Updating : mod_ssl 4/6
Cleanup : mod_ssl 5/6
Cleanup : httpd 6/6
Installed:
httpd-devel.i386 0:2.2.3-83.el5.centos
Dependency Installed:
apr-util-devel.i386 0:1.2.7-11.el5_5.2
Dependency Updated:
httpd.i386 0:2.2.3-83.el5.centos mod_ssl.i386 1:2.2.3-83.el5.centos
Complete!
이제 다운로드한 톰켓 커낵터 소스를 컴파일하여 이미 설치되어 있는 httpd 모듈에 설치한다.
cd /app/source/tomcat-connectors-1.2.37-src/native
./configure --with-apxs=/usr/sbin/apxs
make
make install
3. 아파치 웹 서버 환경 설정
/etc/httpd/conf.d/tomcat.conf 파일을 다음과 같이 생성한다.
/etc/httpd/conf.d/tomcat.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile "logs/mod_jk.log"
JkLogLevel info
톰켓 연결정보를 기술하는 workers.properties 파일을 다음과 같이 생성한다.
/etc/httpd/conf/workers.properties (환경에 따른 수정 필요)
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
여러 톰켓을 구동할 수 있도록 /etc/httpd/conf/httpd.conf 파일에 VirtualHost 설정을 추가한다.
이때 JkMountFile 을 지정하여 어떤 요청들을 어떤 톰켓이 처리할 것인가를 지정한다.
/etc/httpd/conf/httpd.conf (환경에 따른 수정 필요)
DocumentRoot /app/webapps/portal/WebContent
ServerName portal
ErrorLog logs/portal-error_log
JkMountFile conf/uriworkermap.properties
/etc/httpd/conf/uriworkermap.properties (환경에 따른 수정 필요)
/*.do=worker1
/*.jsp=worker1
4. 다중 인스턴스 Tomcat 환경 구성
톰켓 인스턴스를 다중으로 구동할 수 있도록 /app/tools/ 경로에 설치된 톰켓을 직접 사용하지 않고 /app/servers 경로를 생성하고 이곳에 톰켓을 다시 아래와 같은 방식으로 구성한다.
- /app/servers/[인스턴스 명]-tomcat/
- /app/servers/[인스턴스 명]-tomcat/bin (/app/tomcat/bin 심볼링 링크)
- /app/servers/[인스턴스 명]-tomcat/lib (/app/tomcat/lib 심볼링 링크)
- /app/servers/[인스턴스 명]-tomcat/conf (/app/tomcat/conf 복사)
- logs, temp, webapps, work 디렉터리 생성.
문서에서는 developer 계정으로 톰켓을 운영하는데 이를 위하여 /app/tools 와 /app/servers 의 소유권을 developer 로 변경한다.
톰켓 운영을 위하서 developer 계정의 홈에 bin 디렉터리를 생성하고 add-new-tomcat 스크립트를 아래와 같이 생성한다.
#!/bin/sh
if [ "$#" == "0" ]; then
echo "tomcat instance name required."
exit 1
fi
SERVERS_HOME=/app/servers
SERVER_NAME=$1
SERVER_PATH="$SERVERS_HOME/$SERVER_NAME-tomcat"
TOMCAT_HOME=/app/tomcat
echo "new tomcat will create in "$SERVER_PATH"....."
if [ -d "$SERVER_PATH" ]; then
echo "directory '$SERVER_PATH' already exist. check first."
exit 1
fi
mkdir $SERVER_PATH
mkdir $SERVER_PATH/logs $SERVER_PATH/temp $SERVER_PATH/webapps $SERVER_PATH/work
cp -Rf $TOMCAT_HOME/conf $SERVER_PATH
ln -s $TOMCAT_HOME/bin $SERVER_PATH/bin
ln -s $TOMCAT_HOME/lib $SERVER_PATH/lib
이제 add-new-tomcat [새로운 인스턴스 이름] 명령으로 손쉽게 톰켓 환경을 추가할 수 있다. 톰켓 환경이 추가되면 반듯이 해당 톰켓 설정의 sever.xml 파일에서 Server 노드 shutdown, Connector 노드 port 와 redirectPort 포트를 사용하지 않는 다른 값으로 변경하여야 한다. 개인적으로는 새로운 톰켓이 추가되는 경우 각 포트에 +1 값을 지정한다. 톰켓이 추가되면 아파치 설정 파일에서 httpd.conf, workers.properties 그리고 uriworkermap.properties 설정을 변경할 필요가 있다.
conf/server.xml
추가로 인스턴스에 따라 톰켓을 시작, 정지, 로그보기를 위한 스크립트를 생성한다.
/home/developer/bin/tdown (톰켓 정지)
#!/bin/sh
if [ "$#" == "0" ]; then
echo "tomcat instance name required."
exit 1
fi
SERVER_HOME=/app/servers
SERVER_NAME=$1
SERVER_PATH="$SERVER_HOME/$SERVER_NAME-tomcat"
$SERVER_PATH/bin/shutdown.sh
/home/developer/bin/tboot (톰켓 시작)
#!/bin/sh
if [ "$#" == "0" ]; then
echo "tomcat instance name required."
exit 1
fi
SERVER_HOME=/app/servers
SERVER_NAME=$1
SERVER_PATH="$SERVER_HOME/$SERVER_NAME-tomcat"
PROCESS_COUNT=$( ps -ef | grep java | grep $SERVER_NAME | wc -l )
if [ "$PROCESS_COUNT" -eq 1 ] ; then
echo "tomcat instance '$SERVER_NAME' already running...."
exit 1
else
echo "starting tomcat instance '$SERVER_NAME' .. "
$SERVER_PATH/bin/startup.sh
fi
#$SERVER_PATH/bin/startup.sh
/home/developer/bin/tdown (톰켓 정지)
#!/bin/sh
if [ "$#" == "0" ]; then
echo "tomcat instance name required."
exit 1
fi
SERVER_HOME=/app/servers
SERVER_NAME=$1
SERVER_PATH="$SERVER_HOME/$SERVER_NAME-tomcat"
$SERVER_PATH/bin/shutdown.sh
/home/developer/bin/tlog (톰켓 로그보기)
#!/bin/sh
if [ "$#" == "0" ]; then
echo "tomcat instance name required."
exit 1
fi
SERVER_HOME=/app/servers
SERVER_NAME=$1
SERVER_PATH="$SERVER_HOME/$SERVER_NAME-tomcat"
echo "$SERVER_PATH/logs/catalina.out"
tail -f "$SERVER_PATH/logs/catalina.out"
손쉬운 톰켓 운영을 위하여 공통으로 적용할 몇가지 환경 변수를 developer 계정에 추가한다. 참고로 JAVA_OPTS 값은 모든 톰켓이 시작할 때 공통으로 적용된다.
/home/developer/.bash_profile
export JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms256m -Xmx512m -XX:NewSize=125m -XX:MaxNewSize=125m -XX:PermSize=125m -XX:MaxPermSize=125m -XX:+DisableExplicitGC"
export JAVA_HOME=/usr/lib/java