본문으로 바로가기

Red Hat Ent 5 + APM + tomcat 연동

category 웹/웹.리눅스.SQL 2009. 8. 11. 09:17

* 2009.09.22 추가 - 자바 jdk1.6.0_16 업그레이드, 오타 수정, 


예전에 MS-window 에서 autoset 으로 amp 을 설치한 글을 참고해서 작성합니다.

    [관련들]AutoSetAPM-Tomcat 연동

Red Hat Enterprise Server 5 설치 시 java, tomcat5를 선택하게 되면 설치되는 rpm 목록중 일부입니다. 

java1.6.0-openjdk-1.6.0.0-0.30.b09.el5.x86_64
java1.6.0-openjdk-devel-1.6.0.0-0.30.b09.el5.x86_64

tomcat5-5.5.23
tomcat5-admin-webapps
tomcat5-common-lib
tomcat5-jsp-2.0
tomcat5-server-lib
tomcat5-servlet
tomcat5-webapps


레드햇 5 버전에서 설치되는 자바는 openjdk가 설치됩니다. 이를 제거하고 sun 사의 java를 설치합니다. 

apache, MySQL 은 설치 CD에 있는 rpm 을 설치합니다. 이 패키지는 rpm을 설치해도 무방합니다.  

설치 확인은 '프로그램>소프트웨어 추가/삭제' 에서
'검색' 탭에서 '개발용 '도구-java 개발용 도구' 로 확인하거나
'찾기' 탭에서 설치된 개별 패키지를 찾을수 있습니다.


1. Java 설치

Java sdk 를 다운(Java SDK 1.6.0)

다운로드 위치 http://java.sun.com/javase/downloads/index.jsp 
중간 부위에 Java SE Development Kint(JDK) 아래 다운로드 버튼 클릭, 플랫폼 linux 64 선택
Available Files 아래에 jdk-64u15-linux-x64rpm.bin 클릭해서 다운






Java 설치

# cd                <-- 홈디렉토리로 이동
# cd Desktop    <-- linux 에서 다운로드 받은 파일의 기본 위치
# chmod u+x jdk-6u15-linux-x64-rpm.bin
# ./jdk-6u15-linux-x64-rpm.bin

라이센스 동의 yes 입력, rpm 만들어 내고 /usr/java/jdk1.6.0_16 에 자동 설치

Java path 설정(톰캣 설치 후 한번에 해도 됩니다)

# vi /etc/profile

다음 부분 추가(아래 톰캣 환경변수 부분에 다시 추가해야 함)

JAVA_HOME=/usr/java/jdk1.6.0_16
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME


# source /etc/profile   <-- 설정 적용
# java -version    <-- 자바 테스트


2. Tomcat 설치

Tomcat6 다운로드

위치 http://tomcat.apache.org/download-60.cgi

http://tomcat.apache.org/
왼편 'Download' 클릭, 중앙 'Qucik Navigation' 메뉴의 '6.0.20'을 클릭, 'Binary Distributions' 아래의 Core 밑 tar.gz 클릭해서 'apache-tomcat-6.0.20.tar.gz' 파일을 다운 받습니다.


# tar xvzf apache-tomcat-6.0.20.tar.gz -C /var/tmp
# mv /var/tmp/apache-tomcat-6.0.20 /usr/local
# cd apache-tomcat-6.0.20

톰캣은 바이너리 파일이기 때문에 압축만 풀면 되며, 컴파일하는 과정이 없습니다.


Tomcat path 설정

# vi /etc/profile

java 설정 부분에 추가

JAVA_HOME=/usr/java/jdk1.6.0_16 
CATALINA_HOME=/usr/local/apache-tomcat-6.0.20
CATALINA_HOME=/usr/local/tomcat6
PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
export JAVA_HOME CATALINA_HOME


# source /etc/profile    <-- 환경 설정 적용

# /usr/local/apache-tomcat-6.0.20/startup.sh    <-- tomcat 실행
# /usr/local/apache-tomcat-6.0.20/shutdown.sh    <--  tomcat 종료

또는 

# service tomcat start

웹 브라우저에서 http://localhost:8080 입력시 고양이 로고가 나오면 Tomcat 설치 성공입니다.



화면이 나오지 않는다면 포트 문제이거나 SELinux 설정 때문일 수 있으니 둘다 비활성화 해서 테스트합니다.
포트번호는 80 포트, 8009 포트, 8080 포트가 필요합니다.



3. 아파치 웹서버와 톰캣 서버와 연동

톰캣 자체 웹 기능이 미약해서 펄, php 등 과 같은 프로그램 이용하는 경우 아파치 웹 서버와 연동해서 사용합니다. 웹 서버에서 톰캣으로 요청을 보내도록 시스템을 구성해야 합니다. 아파치 웹 서버와 톰캣과 연결하기 위해 mod_jk 를 사용합니다. mod_jk는 웹 서버 플로그인입니다. mod_jk 모듈은 클라이언트 측의 서블릿 혹은 JSP에 대한 요청은 아파치 웹서버가 mod_jk에게 전송하고, mod_jk는 전달받은 메시지를 톰캣으로 전송을 하게 됩니다.

http://tomcat.apache.org/connectors-doc/ 에서 소스를 다운로드 받을 수 있지만 여기서는 컴파일이 된 걸 바로 받아서 설치합니다.

mod_jk.so(jk-1.2.28 버젼) 다운로드

위치 http://apache.tt.co.kr/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.28/

mod_jk 파일을 이용하면 html, php 파일은 모두 apache 서버에서 동작하고 확장자가 jsp 파일만 Tomcat 에서 처리되어 웹 서버 부담이 줄어들고 80 포트 만으로 서비스가 가능해 집니다.

jk-1.2.28 을 선택해서 i586 이나 x86_64 중 선택
최종 위치는 http://apache.tt.co.kr/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.28/x86_64/mod-jk-1.2.28-httpd-2.2.x.so 입니다.
* 참고로 Red Hat Ent 5 에서는 apache 가 httpd 란 이름으로 사용됩니다.


# cp mod_jk-1.2.28-httpd-2.2.X.so mod_jk.so

이름을 바꾼 mod_jk.so 파일을 modules(/usr/lib64/httpd/modules/) 안에 넣어줍니다.
# mv mod_jk.so /usr/lib64/httpd/modules/

# chmod 755 mod_jk.so <-- 744 인걸 755 로 실행권한을 추가해 줍니다.

설치된 아파치 서버가 동적으로 모듈 관리함으로 conf/httpd.conf 가 아닌 conf.d 디렉토리에 conf 파일을 만들어 모듈 환경을 설정합니다. 따라서 conf.d 디렉토리 아래에 jk.conf 파일에 설정을 만듭니다.

# vi /etc/httpd/conf.d/jk.conf    <-- 파일을 만듭니다.

LoadModule jk_module modules/mod_jk.so

DirectoryIndex index.jsp

<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties
</IfModule>

#Configure mod_jk
JkLogFile /var/log/httpd/mod_jk.log   # log/  httpd/  철자 주의
JkLogLevel info


JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat "%w %V %T"


#Root context
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
JkMount /jsp-examples ajp13
JkMount /jsp-examples/* ajp13
JkMount /url ajp13


jk.conf  파일을 동적으로 로딩하고 mod_jk의 conf 설정은 workers.properties 에서 가지고 옵니다.
jk의 log 파일은 /var/log/httpd/mod_jk.log로 남깁니다. 

# vi /etc/httpd/conf/workers.properties    <-- 파일을 만듭니다.

# workers.properties -

workers.tomcat_home=/usr/local/apache-tomcat-6.0.20
workers.tomcat_home=/usr/local/tomcat6
workers.java_home=/usr/java/jdk1.6.0_16


ps=/


worker.list=ajp13


worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13



톰캣 설정 수정

/usr/local/apache-tomcat-6.0.20/conf/server.xml 파일을 수정합니다. 
/usr/local/tomcat6/conf/server.xml 파일을 수정합니다. 


    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /-->


     # 윗줄을 아래줄처럼 고칩니다.
     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" debug="0" URIEncoding="euc-kr" />

.......

      <!--Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false"-->

     # 윗줄을 아래줄처럼 고칩니다.
      <Host name="localhost"  appBase="/var/www/html"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      <Context path="" docBase="/var/www/html" crossContext="false" debug="0" reloadable="true">
      </Context>


한글 코드를 위해 euc-kr 을 추가해 주었습니다. 웹 기본 디렉토리를 아파치 서버의 기본 디렉토리로 바꾸었습니다. php와 jsp 파일들을 같은 디렉토리 내에서 처리할 수 있습니다.  주석 처리시 <!-- 와 --> 를 제대로 하지 않으면 톰캠이 제대로 동작하지 않을수 있습니다.

<Host name> 로 시작해서 </Host>이 있어야 합니다. 아래쪽에 </Host> 가 없으면 만들어줘야 합니다.

다 마쳤으면 톰캣을 재기동합니다. 웹 기본 디렉토리를 바꾸었기 때문에 웹 브라우저에서 http://localhost:8080 입력시 고양이 로고가 나오지 않습니다.

SELinux 실행시에는 httpd 가 실행이 되지 않습니다. 이때는 restorecon -v 'mod_jk.so' 라고 입력해 줍니다.


톰캣 구동을 확인하는 방법은 톰캣 초기 설치시 webapps 디렉토리 아래의 examples/index.html 파일로 확인하거나(examples 디렉토리를 웹 루트 디렉토리에 복사), 위에서 설정한 server.xml 파일의 appBase, Context path 를 원래대로 바꾸거나, 확인용 샘플 파일을 바꾸는 방법으로 확인할 수 있습니다. 

톰캣 작동 확인 파일

# vi /var/www/html/hello.jsp

<%@ page contentType="text/html"%>

<%
  out.print("Hello Java !!!");
%>



아파치 서버 작동 확인 파일

# vi /var/www/html/hello.jsp

<?
phpinfo();
?>



톰캣이나 아파치가 제대로 동작을 하지 않거나 화면이 표시가 되지 않는다면,

아파치가 제대로 동작을 하는지 확인하고 별 문제가 없으면 톰캣 서버만 구동해서 확인을 해야 합니다.
웹 브라우저에서 http://localhost:8009http://localhost:8009/examples/ 주소로 톰캣이 제대로 동작하는지 확인해야 합니다. 각각의 서버가 동작을 하는지 확인한 후, 연동 하는 부분을 확인하는 순서입니다.


톰캣 MySQL(jdbc) 연결 확인

위치 http://dev.mysql.com/downloads/connector/j/5.1.html


아래쪽의 다운로드 부분 클릭



아래에 No thanks, just take me to the downloads! 를 클릭한다. 태극기 옆 http 클릭


JDBC는 java 환경에서 Oracle, MySQL, DB2와 같은 데이터베이스를 사용하기 위한 드라이버입니다. 압축을 풀고 mysql-connector-java-5.1.8-bin.jar 파일을 /usr/java/jdk1.6.0_15/jre/lib/ext/ 디렉토리에 복사합니다.

# cd Desktop
# tar xvzf mysql-connector-java-5.1.8.tar.gz
# cd mysql-connector-java-5.1.8.tar.gz
# cp mysql-connector-java-5.1.8-bin.jar /usr/java/jdk1.6.0_15/jre/lib/ext/


jdbc 작동 확인 파일

# vi /var/www/html/jdbc.jsp

<%@ page import="java.sql.*" contentType="text/html;charset=euc-kr"%>

<%
  String DB_URL = "jdbc:mysql://localhost/mysql";
  String DB_USER = "MySQL-userName";
  String DB_PASSWORD= "MySQL-password";
 
  Connection conn;

  Statement stmt;
 
  try {
    Class.forName("org.gjt.mm.mysql.Driver");
   
    conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
    stmt = conn.createStatement();
    conn.close();
   
    out.println("mysql jdbc test: connect ok!!");
   
  } catch(Exception e) {
    out.println(e);
  }
%>


DB_USER 와 DB_PASSWORD는 각자 MySQL 설정에 맞게 바꿔줘야 합니다.



톰캣 디렉토리 명 변경

톰캣 디렉토리 명 apache-tomcat-6.0.20 이 길어서 tomcat6로 찾기가 편합니다. 
이 경우 이제까지 사용한 설정들의 'apache-tomcat-6.0.20'을 'tomcat6' 로 바꿔야 합니다.

# mv /usr/local/apache-tomcat-6.0.20 /usr/local/tomcat6

# vi /etc/profile
# source /etc/profile    <-- 환경 설정 적용

# vi /etc/httpd/conf/workers.properties 

# /usr/java/jdk1.6.0_15/shtdown.sh    <-- tomcat 정지
# /usr/java/jdk1.6.0_15/startup.sh    <-- tomcat 실행



4. 서버 자동 실행

apache, MySQL, tomcat 이 자동실행 되게 설정합니다.

텍스트 환경이라면 /etc/rc.d/rc3.d/
x윈도우 환경이라면 /etc/rc.d/rc5.d/

의 파일들의 이름을 바꿔줍니다. 파일명 첫글자의 'S'는 start 이고, 'K'는 kill 입니다. 부팅시 필요한 데몬들을 실행되게 합니다.
제 경우 rc3.d/ 와 rc5/d/ 모두를 같이 기동하게 설정합니다.

# mv K15httdp S15httpd
# mv K36mysqld S36mysqld

그 외에 설치된 프로그램에 따라 이름을 바꿔줍니다.

# mv S08ip6tables K08ip6tables   <-- ip6 는 아직 국내에서는 잘 사용하지 않습니다.
# mv K35vncserver S35vncserver
# mv K50vsftpd S50vsftpd

tomcat 의 경우 'startup.sh'로 실행 되므로, /etc/rc.d/rc.local 파일의 맨 아래에 추가하면 됩니다.

# vi /etc/rc.d/rc.local

/usr/local/tomcat6/bin/startup.sh




rc3.d와 rc5.d 에 직접 만들어 주는 방법도 있습니다.

/etc/rc.d/init.d/tomcat 이란 파일로 아래 내용 작성

#!/bin/sh
# Source function library.
. /etc/rc.d/init.d/functions
source /etc/profile
export tomcat_HOME=/usr/local/tomcat6    # 톰캣 경로 지정
# See how we were called.
case "$1" in
start)
echo -n "Starting tomcat EXPERIMENTAL: "
daemon $tomcat_HOME/bin/startup.sh
echo
;;
stop)
echo -n "Shutting down tomcat EXPERIMENTAL: "
daemon $tomcat_HOME/bin/shutdown.sh
echo
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0



권한 설정

# chmod 755 tomcat


링크 걸기

# cd /etc/rc.d
# ln -s init.d/tomcat ./rc3.d/S80tomcat
# ln -s init.d/tomcat ./rc5.d/S80tomcat
# ln -s init.d/tomcat ./rc6.d/K80tomcat

rpm 설치시 tomcat 은 80으로 만들어져서 80으로 처리, 90을 사용하기도 합니다. 
rpm 설치시 rc3.d/ rc5.d/ rc6.d/ 디렉토리에 K80tomcat 또는 S80tomcat 파일이 있을시 삭제합니다.





Red Hat Ent 5 + APM + tomcat 연동 (작업 후기 링크)