본문 바로가기

Linux/Apache,Tomcat

[linux][tomcat]Linux에서의 APM(Apache & PHP & MySQL) + Tomcat 연동

Linux에서의 APM(Apache & PHP & MySQL) + Tomcat 연동



--------------------------------------------------------------------------------

들어가기에 앞서
이 글의 목적
여러가지 프로젝트를 위해 한 웹 서버에서 php, jsp등을 모두 요구할때에,
다른 방법으로 연결할 필요없이 모두 한 루트를 통해서 접근하고 싶게 된다.
본 문서는 그런 서버 관리자들을 위한 좋은 Solution이 될 것이라 생각한다.

책임의 한계
본 문서를 통해서 여러분은 웹서버 연동에 대한 여러가지 정보를 얻게 될 것이다.
그러나 이 문서에는 어떠한 보증도 없으며, 이 문서로 인해 야기할 수 있는 문제에 대해
본 문서의 필자는 어떠한 책임도 지지 않는다.
순수하게 참고의 용도로 사용하기를 바란다.
문의사항이 있거나 이 글을 다른 곳으로 옮길때에는 위에 기재된 메일로 연락해 주기 바란다.

준비해야할 사항
먼저 설치되어야 할 Package.
*가 붙어있는 요소들은 설치를 위해 꼭 필요한 패키지이므로 rpm -q 등을 사용하여 설치되어있는지 확인한다.
가급적 최신 버전을 사용할 것을 권장한다.

autoconf(*)
automake(*)
binutils(*)
gcc(*)
glib(*)
gzip
libtool(*)
make(*)
wget
zlib(*) ( Zend Optimizer를 설치할 것이라면 필수 )
설치를 위해 필요한 파일
MySQL, J2SDK를 제외한 다른 파일들은 wget을 통해 바로 얻을 수 있다.

Apache 2.0.44
( mod_jk.so(Tomcat-Connector)가 현재 2.0.43까지 공식 지원. 2.0.44까지 가능. 그 이후는 확인해보지 못했음 )
=> http://www.apache.org/dist/httpd/old/http-2.0.44.tar.gz
PHP 4.3.0 ( Zend Optimizer 2.1이 PHP 4.3.0 까지 지원함 )
=> http://kr.php.net/get/php-4.3.0.tar.gz/from/this/mirror
MySQL 4.0.13 (맨 아래의 Source downloads - Tarball을 고른다.)
=> http://www.mysql.com/downloads/mysql-4.0.html
Zend Optimizer 2.1.0
=> http://www.zend.com/store/getfreefile.php?pid=13&zbid=548&iagree=1
Java - J2SDK 1.4.1_03 ( Linux RPM in self-extracting file을 고른다. )
=> http://java.sun.com/j2se/1.4.1/download.html
Tomcat 4.1.24 ( Binary )
=> http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.1.24/bin/jakarta-tomcat-4.1.24.tar.gz
Tomcat-Connector 4.1.24 ( mod_jk.so 2.0.43 )
=> http://jakarta.apache.org/builds/jakarta-tomcat-connectors/jk/release/v1.2.2/bin/linux/i386/mod_jk-2.0.43.so
설치환경:
플랫폼: 필자는 RedHat Linux 9 플랫폼에서 작업하였으며, 원문에 따르면 7.2에서도 작동한다고 한다.
작업 디렉토리
Linux의 기본 디렉토리를 기준으로, 보통 가장 큰 파티션을 지정하는 /home에 소스파일을 unpacking한다.
설치를 위해서는 관리자(root)권한을 가지고 있어야 한다.
다음은 필자가 선택한 디렉토리이다.

설치를 위한 소스 디렉토리: /home/archive
설치 대상 디렉토리: /usr/local
설정을 위한 디렉토리: /etc
 


--------------------------------------------------------------------------------

MySQL 설치
/home/archive에 소스를 푼다.
# tar xvfz mysql-4.0.13.tar.gz
컴파일을 위한 설정을 한다. ( 역슬래시를 꼭 붙여주어야 한다. )
# ./configure \
--prefix=/usr/local/mysql \
--with-charset=euc_kr \
--without-debug \
--localstatedir=/usr/local/mysql/data
컴파일 후 설치한다.
# make
# make install
MySQL을 사용하기 위해 DB를 생성한다.
이 작업은 설치시에 한 번 실행하며, 이후 특별한 일이 아닌 한 절대 실행하지 않는다.(DB가 재초기화됨)

# /usr/local/mysql/bin/mysql_install_db
MySQL daemon을 띄우기 위한 사용자를 생성하고, 권한을 설정한다.
# groupadd mysql
# useradd -g mysql mysql
# passwd mysql (암호를 바꿔두어 함부로 MySQL을 죽이거나 하지 못하게 한다.)
# cd /usr/local/mysql
# chown -R root /usr/local/mysql/.
# chown -R mysql /usr/local/mysql/data
# chgrp -R mysql /usr/local/mysql/.
MySQL daemon을 띄운다.
# cd /usr/local/mysql/bin
# ./mysqld_safe -u mysql
MySQL daemon이 올바로 떠 있는지 확인한다.
4.0.13 과 같은 버전 표시가 뜨면 올바로 설치된것이다.
# telnet localhost 3306
MySQL이 Boot시에 자동으로 뜨도록 한다.
# cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
# ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc3.d/S90mysqld
# ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc5.d/S90mysqld
# ntsysv ( -> 설정 화면에서 [*] mysqld가 되도록 수정한다. )
 


--------------------------------------------------------------------------------

Apache 설치
소스 디렉토리에 소스를 푼다.
# tar xvfz httpd-2.0.44.tar.gz
컴파일을 위한 설정을 한다. ( 문장 마지막의 역슬래시는 꼭 쓴다. )
# ./configure \
--prefix=/usr/local/apache \
--enable-rule=SHARED_CORE \
--enable-modules=so \
--enable-so
잡아둔 설정대로 프로그램을 설치한다.
# make
# make install
Apache daemon을 띄운 후 기본 루트 디렉토리에 위치한 index.html가 브라우저에서 보이면 성공이다.
# /usr/local/apache/bin/apachectl start
# mv /usr/local/apache/htdocs/index.html.en /usr/local/apache/htdocs/index.html
(한글 페이지의 경우 설치한 Linux의 환경에 따라 뜨지 않는 경우도 있으므로 일반적인 영문 페이지를 띄운다.)

*브라우저에서 http://localhost(또는 정의된 HostName)을 호출하여 Apache 환영 페이지가 나오는지 확인한다.*
부팅시 자동으로 실행되도록 설정한다.
# cp -p /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
# vi /etc/rc.d/init.d/httpd
(-> 이후 #!/bin/sh 밑줄에 # chkconfig - 85 15를 추가한다.)
# chkconfig -add httpd



--------------------------------------------------------------------------------

PHP 설치
소스 디렉토리에 소스를 푼다.
# tar xvfz php-4.3.0.tar.gz
컴파일을 위한 설정을 한다. ( 마찬가지로 역슬래시는 꼭 붙인다. )
# ./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-gd \
--with-zlib \
--enable-track-vars=yes \
--with-mod-charset \
--with-language=korean \
--with-charset=euc_kr \
--with-jpeg \
--enable-ftp \
--disable-debug \
--with-xml
컴파일 후 설치한다.
# make
# make install
PHP 설정 파일을 복사한다.
# cp php.ini-dist /usr/local/lib/php.ini
아파치의 설정파일을 수정한다.
# vi /usr/local/apache/conf/httpd.conf
- 다음 내용을 수정한다.
DirectoryIndex index.html index.htm index.php index.phtml index.jsp
(파일 순서에 따라서 불려지는 순서가 정해지므로,
jsp가 default가 되기를 바라는 사용자는 index.jsp를 앞에 둔다.)

- 다음 내용을 적절한 위치에 넣는다.
LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php4 .php3 .html .htm .phtml .ph .php
AddType application/x-httpd-php-source .phps



--------------------------------------------------------------------------------

Zend Optimizer 설치
소스 디렉토리에 소스를 풀고, 설치를 시작한다.
# tar xvfz ZendOptimizer-2.1.0-Linux_glibc21-i386.tar.gz
# cd ZendOptimizer-2.1.0-Linux_glibc21-i386
# ./install.sh
물어보는 질문에 대해 적절하게 답하면 설치된다.( 대부분 OK를 하면 된다. )
/usr/local/lib에 가보면 원래의 php.ini가 백업되어 있고, 심볼릭 링크를 통해
Zend Optimizer가 제공하는 php.ini가 들어있을 것이다.
PHP와 Zend Optimizer가 설치되었으면 시험 파일을 사용하여 정상적으로 설치되었는지 검사한다.
# /usr/local/apache/bin/apachectl start
# vi /usr/local/apache/htdocs/test.php

- 다음 내용을 넣는다.

브라우저에서 test.php를 로드하여 환경설정 사항이 표시되면 성공이다.
 


--------------------------------------------------------------------------------

JDK 설치
java.sun.com에서 받은 bin파일을 /usr/local/로 복사한다.
# cp j2sdk-1_4_1_03-linux-i586.bin /usr/local
압축을 풀고 사용하기 쉬운 이름으로 심볼릭 링크를 건다.
# chmod 755 j2sdk-1_4_1_03-linux-i586.bin
# ./j2sdk-1_4_1_03-linux-i586.bin
# ln -s /usr/local/j2sdk1.4.1_03 /usr/local/j2sdk
Java실행기를 실행하여 안내 메시지가 제대로 출력되면 성공이다.
# /usr/local/j2sdk1.4.1_03/java
 


--------------------------------------------------------------------------------

Tomcat 설치
이 파일은 Binary이므로 그대로 /usr/local에 압축을 풀고 심볼릭 링크를 건다.
# mv jakarta-tomcat-4.1.24.tar.gz /usr/local
# tar xvfz jakarta-tomcat-4.1.24.tar.gz
# ln -s /usr/local/jakarta-tomcat-4.1.24 /usr/local/tomcat
/etc/profile을 열어서 환경설정을 한다.
# vi /etc/profile

- 다음 내용을 추가한다.

JAVA_HOME=/usr/local/j2sdk
CATALINA_HOME=/usr/local/tomcat
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export JAVA_HOME CATALINA_HOME
변경된 profile내용을 현재 시스템에 적용한다.
# source /etc/profile
Tomcat을 실행하여 정상 작동하는지 확인한다.
# /usr/local/tomcat/bin/startup.sh
http://localhost(또는 HostName):8080/에 접속하여 고양이 그림이 뜨면 성공이다.
 


--------------------------------------------------------------------------------

Tomcat Connector( mod_jk.so )설치
받은 파일을 그대로 Apache modules directory에 옮긴다.
# mv mod_jk-2.0.43.so /usr/local/apache/modules/mod_jk.so
이것을 사용한 연동에 대해서는 다음 차례를 읽어보도록 한다.
(소스코드를 사용한 컴파일은 의외로 잘 되지 않았었음.)
 


--------------------------------------------------------------------------------

연동을 위한 설정
/usr/local/tomcat/conf에 위치한 server.xml을 수정한다.
(그 전에 /usr/local/tomcat/bin/shutdown.sh를 통해 Tomcat을 정지시키는 것을 권장한다.)
# vi /usr/local/tomcat/conf/server.xml

- 다음 내용을 찾는다.

- 이 줄 밑에 다음 내용을 추가한다.


- 다음 내용을 찾는다.

- (중요)이 내용에서 name에 해당하는 부분을 여러분의 HostName으로 고친다.(예) localhost->www.myid.pe.kr 등
   HostName이 따로 없는 사용자는 그대로 localhost로 둔다.
  
- 이 줄 밑에 다음 내용을 추가한다.


Apache의 설정파일(httpd.conf)을 고쳐서 연동이 가능하게끔 수정한다.
(그 전에 /usr/local/apache/bin/apachectl stop으로 Apache를 정지시키는 것을 권장한다.
# vi /usr/local/apache/conf/httpd.conf

- ServerName을 찾아서 이를 위의 server.xml파일에 지정한 HostName과 일치시킨다.
ServerName localhost(또는 자신의 도메인 네임)
- LoadModule수정 부분( 아까 PHP에서 설정한 부분 )아래에 다음 구문을 추가한다.
LoadModule jk_module modules/mod_jk-2.0.43.so
- 파일 가장 아래에 다음 구문을 추가한다.
Include /usr/local/tomcat/conf/auto/mod_jk.conf

/usr/local/tomcat/conf/jk에 workers.properties를 추가한다.
# vi /usr/local/tomcat/conf/jk/workers.properties

- 다음 내용을 넣고 저장한다.
#Start setup file

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/j2sdk
ps=/

#Definition for Ajp13 worker

worker.list=ajp12, ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13

#End setup file
--------------------------------------------------------------------------------
*위의 worker.ajp13.host에 localhost부분을 수정해야 하는지에 관해서는 아직 확실한 답변을 드리기 힘듬. (__);

startup.sh를 실행시켜서 mod_jk.conf를 생성한다.
# /usr/local/tomcat/bin/startup.sh
Apache를 구동한다.
# /usr/local/apache/bin/apachectl start
Tomcat에서 기본 제공하는 example 디렉토리를 Apache의 기본 루트 디렉토리로 옮긴다.
# cp -fr /usr/local/tomcat/webapps/examples /usr/local/apache/htdocs/
브라우저에서 8080포트를 지정하지 않고 읽어서 수행되면 성공이다.
(브라우저 주소창에서)
http://localhost(또는 여러분의 HostName)/examples
 


--------------------------------------------------------------------------------

참고자료
http://www.johnturner.com/howto/rh72-howto.html - Tomcat 연동 설명(영문)
http://www.jongsclub.com/webedit/pageView.jsp?code=3&num=1 - Apache, Tomcat 연동 등에 대한 설명(한글)
http://www.phpschool.com/bbs2/inc_view.html?id=8573&code=tnt2&start=0&mode=search&field=body&operator=and&period=all&category_id=&s_que=httpd%2Crc.d - PHPSchool, APM 연동에 대한 좋은 설명자료.