가끔 root 유저가 아닌 일반 유저에서 톰켓을 돌리고 싶을때 이방법을 활용하면 됩니다.
작업환경
CentOS 6.4 , 디지털오션서버, Tomcat 7, jdk 버젼 : 1.7.0_40
준비물.
우선 Tomcat 7 , httpd(apache) 가 있어야하고 jdk 가 설치되어 있어야 합니다.
1. 우선 아파치랑 Tomcat 랑 연동할수 있도록 설정합니다.
/etc/httpd/conf/httpd.conf 에 톰켓이랑 연동하는 Connecter 모듈을 불러오도록 코드 한줄을 넣고,
/etc/httpd/modules/ 에 mod_jk.so 를 넣어주시면 됩니다.
만약 /etc/httpd/moduels/mod_jk.so 라는 모듈이 없으면 직접 파일을 넣거나 컴파일 해서 사용하셔도 됩니다.
http://apache.mirror.cdnetworks.com//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz
여기서 Tomcat Connecter 를 받으셔서 mod_jk.so 를 컴파일할수 있습니다.
mod_jk.so 를 컴파일 하려면 apxs 패캐지가 필요한데, apxs 를 입력하면 없는 명령어라고 나오는 경우도 가끔 있네요..
yum install httpd-devel.x86_64
LoadModule jk_module modules/mod_jk.so
Tomcat Connecter 모듈을 불러올수 있도록 저걸 입력해줍니다.
jk_module 에 worker.properties 와 uriworkermap.properties 설정 파일들을 로드할수있게 이것도 입력해주시구
<IfModule jk_module>
JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMountFile /etc/httpd/conf/uriworkermap.properties
</IfModule>
마지막으로 연동이 잘 되었는가를 테스트하기위해 VirtualHost 를 하나 작성합니다.
DocumentRoot, ServerName ,ServerAlias, JkMount 등 경로에 알맞게 입력해주셔야 합니다.
<VirtualHost *:80>
DocumentRoot /home/crplab/tomcat/webapps/ROOT
ServerName digitalocean.crplab.kr
ServerAlias *.digitalocean.crplab.kr
JkMount /*.jsp worker1
JkMount /home/shift/tomcat/webapps/host-manager/*.jsp worker1
JkMount /home/shift/tomcat/webapps/manager/*.jsp worker1
</VirtualHost>
/etc/httpd/conf/ 에 uriworkermap.properties 작성합니다.
/*.do = worker1
/*.jsp = worker1
이렇게 쓰고 저장하고 나옵니다.
그리고 /etc/httpd/conf/workers.properties 를 작성합니다.
worker.list=worker1,ajp13
worker.worker1.port=8010
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
workers.java_home=/usr/java/jdk1.7.0_40
이것도 일단 이렇게 쓰고 저장합니다.
이제 아파치에서 해줄일은 끝났고, tomcat 에서만 잘 설정해주시면 연동이 끝납니다.
우선 Tomcat 이 jdk 를 인식해야하니, 톰켓 안에 있는 catalina.sh 파일을 수정해서 java 경로를 설정해줄것입니다.
JAVA_HOME=/usr/java/jdk1.7.0_40 을 입력해줍니다.
이제 /home/rainc/tomcat/conf/server.xml 을 수정해서 아파치랑 연동합니다.
이부분을 지우고,
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
밑에걸로수정해줍니다.
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
그리고 밑에 내려보면 AJP 포트를 설정하는 부분이 있는데,
이부분을
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
이렇게 변경해주세요.
<Connector port="8009" maxHttpHeaderSize="8192" tomcatAuthentication="false"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" protocol="AJP/1.3" />
그리고 여기서 엔진이름을 지정해줘야하는데, 아까 worker.properties 에서 설정한걸 맞추면 됩니다.
<Engine jvmRoute="worker1" name="Catalina" defaultHost="localhost">
그리고 호스트 부분은 도메인으로 하고, appBase 는 ROOT 로 설정해주세요.
<Host name="digitalocean.crplab.kr" appBase="ROOT"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
이제 설정이 모두 끝났습니다.
톰켓 폴더로 들어가서 bin 폴더로 들어가면
catalina.sh 파일이 있습니다. start 옵션을 주면 tomcat 이 작동합니다.
[root@CRPLab bin]# ./catalina.sh start
Using CATALINA_BASE: /home/rainc/tomcat
Using CATALINA_HOME: /home/rainc/tomcat
Using CATALINA_TMPDIR: /home/rainc/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.7.0_40
Using CLASSPATH: /home/rainc/tomcat/bin/bootstrap.jar:/home/rainc/tomcat/bin/tomcat-juli.jar
[root@CRPLab bin]#