가끔 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


이럴땐 이 명령어로 추가 패캐지를 설치해주시면 해결됩니다.

이제 위에 링크로 들어가서 Tomcat Connector 압축을 풀고

cd tomcat-connectors-1.2.37-src
./buildconf.sh                      '// 만약 autoconf 에러가 나면 yum install autoconf 로 autoconf 를 설치하면 됩니다.
./configure --with-apxs
make

를 하면 이제 mod_jk.so 파일을 얻을수 있습니다. 이제 mod_jk.so 을  /etc/httpd/modules/ 에 넣고 

/etc/httpd/conf/httpd.conf 에 들어가서 

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>


이제 httpd.conf 설정은 끝났으니 

/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]#


작동 여부를 볼려면 ps -aux | grep java 명령어로 톰켓이 작동하는지 여부를 확인할수 있습니다.

종료할때는 ./catalina.sh stop 으로 종료가 가능합니다.

그리고 도메인주소:8080/index.jsp 들어가서 Tomcat 설정 페이지가 나오는지 확인하시면 됩니다.

글 내용에 문제가 있거나 잘못된 부분이 있으면 지적 부탁드리겠습니다.


감사합니다.



Posted by RainC
,

Tomcat 7, CentOS 6.4 기준으로 작성할 예정입니다.


오늘은 여기까지.

Posted by RainC
,

CRPLab VirtualHost Script 입니다.


가상 호스트 작성을 좀더 편리하게 작성이 가능합니다.


트래픽 주기 설정을 하시려면 추가 확장 모듈(cband) 가 필요합니다.


http://quota.kr/linux/1003 여길 들어가시면 CentOS 전용 cband 확장 모듈을 설치하시고, httpd 를 재시작 하면 됩니다.


이 스크립트로 사용자 설정에 맞게 올바르게 설정해 주셔야 스크립트가 정상적으로 작동합니다.


TIP. /etc/skel/ 에 public_html , docs 폴더를 만들면 a라는 사용자를 만들면 사용자 a 디렉토리 안에 public_html 와 docs 폴더가 자동으로 생성되어 있습니다. public_html 안에 index.html 을 넣어주면 VirtualHost 설정 완료 페이지를 만들수 있습니다.




#!/bin/sh

hr="---------------------------------"

echo "CRP Lab VirtualHost 설정 스크립트"

echo

echo

echo "만들 계정명을 입력해주세요."

read -p "사용자 이름 : " id


if [ "$id" = "y" ] && [ "$id" = "Y" ];then

 exit

fi



echo "패스워드를 설정합니다."

echo "패스워드는 계정_crplab 형식으로 설정해주세요."

adduser $id

passwd $id

echo "계정 생성이 완료되었습니다."

sleep 2

clear

echo "/home/$id/public_html , /home/$id 퍼미션을 설정합니다."


chmod 710 /home/$id

chgrp apache /home/$id

chown $id /home/$id/public_html

chgrp apache /home/$id/public_html

chmod 755 /home/$id/public_html


echo "권한 설정이 완료되었습니다."


echo "VirtualHost 설정을 위해, 도메인을 설정합니다."

echo

echo "도메인을 입력해주세요."

read -p ">" domain


if [ "$domain" = "n" ] && [ "$domain" = "" ];then

 exit

fi


echo "관리자 이메일을 설정합니다."

echo "이메일을 입력해주세요."

echo "없으면 noemail 을 입력해주세요"

read -p ">" email


if [ "$email" = "n" ] && [ "$email" = "" ];then

 exit

fi


echo "트래픽을 설정합니다."

echo "트래픽을 설정합니다."
echo "꼭 MB, GB 단위를 붙여주셔야 합니다."
read -p ">" traffic

if [ "$traffic" = "n" ] && [ "$traffic" = "" ];then
 exit
fi

echo "트래픽 갱신 주기를 설정합니다."
echo "1초당 트래픽 갱신은 1S, 1일마다는 1D, 1주일은 1W"
read -p ">" refresh

echo "" >> /etc/httpd/conf/httpd.conf
echo "

<VirtualHost *:80>
        DocumentRoot "/home/$id/public_html"
        ServerName $domain
        ServerAlias *.$domain
        #php_admin_value doc_root /home/$id
        #pbp_admin_value user_dir /home/$id/public_html
        CBandLimit $traffic
        CBandPeriod $refresh
</VirtualHost>" >> /etc/httpd/conf/httpd.conf
echo

sed -i "s/___님/$id/g" /home/$id/public_html/index.html
sed -i "s/도메인 : __/도메인 : $domain/g" /home/$id/public_html/index.html
sed -i "s/계정이름 : __/계정 이름 : $id/" /home/$id/public_html/index.html
sed -i "s/트래픽 : __/트래픽 : $traffic/" /home/$id/public_html/index.html
sed -i "s/갱신주기 : __/갱신주기 : $refresh/" /home/$id/public_html/index.html

## sed 명령어 = 어떤 대상 파일에 있는 문자열을 다른 문자열로 치환해주는 명령어입니다.
## 사용방법은 이러합니다. sed -i "s/바꿀내용/바뀔내용/" 대상파일
##  이외에 정규식을 이용하여 치환할수 있습니다. 자세한 내용은 



echo "이 아이피랑 도메인이랑 연결되어 있는지 확인해주세요."
echo "Server IP"
ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
echo "--------"
echo
echo
ping $domain -c 2

echo "핑 테스트가 끝났습니다."
echo "모든 설정이 끝났습니다. 웹 서비스를 재시작합니다."
echo "설정된 계정이름은 $id , 도메인은 $domain 입니다"
echo "트래픽은 $traffic , 갱신 주기는 $refresh 입니다."
echo
echo "CRPLab"
/etc/init.d/httpd restart


스크립트에 문제가 있거나 불편사항이 있으시다면 덧글로 남겨주시기 바랍니다.


감사합니다.

Posted by RainC
,