Web/Server

기존 apache에 tomcat 연동 후 spring 프로젝트 배포

기저귀찬개발자 2019. 4. 19. 13:54

기존 프로젝트가 PHP로 이루어져 tomcat이 필요가 없었으나 신규 프로젝트를 JSP Spring 프레임워크를

사용하게 되면서 기존 apache 서버에 tomcat을 설치할 필요가 생겼다.

 

 

1. tomcat 8 설치

 - apt로 다운로드가 안될 경우 직접 파일을 받아 설치한다 (https://tomcat.apache.org/download-80.cgi)
 - 완료 메시지를 보면 tomcat 설치 경로를 확인할 수 있다.

apt-get install tomcat8

설치 경로

 

 - tomcat의 default 포트는 8080이다.

 - 정상적으로 설치가 완료되었다는 메시지를 확인할 수 있다.

 

설치 완료 화면

 

 - 해당 부분은 tomcat을 단독으로 사용할때 웹루트가 된다.

 - 하지만 Apache와 연동해서 사용할 것이니 tomcat의 웹루트따위 필요없다. 지워주자.

 - server config 파일은 설치환경에 따라 바뀌므로 위의 페이지에서 확인하여 사용자에 맞게 경로를 찾는다.

vim /var/lib/tomcat8/conf/server.xml

 

<!-- Apache를 통해 HTTP 프로토콜을 처리할 예정이므로 
사용하지 않는다. 주석처리하자  -->
<!--
<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    URIEncoding="UTF-8"
    redirectPort="8443" />
-->

<!-- AJP는 Apache에서 서블릿 요청을 넘ㄴ길 프로토콜이므로 주석을 해제.-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

 

 

 

2. mod_jk 설치

apt-get install libapache2-mod-jk

 

 

 

3. mod_jk 설정 

 - 설정 파일 오픈 (workers.properties)

vim /etc/libapache2-mod-jk/workers.properties

 - 해당 파일의 아래 항목들을 사용자 tomcat 설치환경에 맞게 고쳐준다.

   workers.tomcat_home=/usr/share/tomcat8

   workers.java_home=/usr/lib/jvm/default-java

   worker.list=ajp13_worker

   worker.ajp13_worker.port=8009

   worker.ajp13_worker.host=localhost

   worker.ajp13_worker.type=ajp13

 - 본 게시글을 따라 왔다면 모든 값은 default로 따로 수정할 항목이 없다.

 - 로드밸런싱 목적으로 tomcat을 여러개 추가하여 해당 부분에서 설정할 수 있다.

 

4. Apache 설정

 - apache를 설치하고 위와 같이 mod-jk를 설치하게 될 경우 자동으로 default 값으로 jk.con 모듈이 설정된다.

 - mod_jk 설정은 /etc/apache2/mods-available/jk.conf 를 살펴보면 위에서 살펴본 workers.properties 가 추가되어

   있는 것을 확인할 수 있다.

    # We need a workers file exactly once
    # and in the global server
    JkWorkersFile /etc/libapache2-mod-jk/workers.properties

 - 아파치와 톰캣이 연동된 부분은 확인하였다. 

 

5. spring 프로젝트 war파일 생성

 - 프로젝트 성격에 따라 추출 방식이 다를 수 있다.

 - 해당 프로젝트는 spring-mvc(maven) 프로젝트이다

 

 

6. tomcat 설정

 - 추출한 war 파일을 /var/lib/tomcat8/webapps 하단에 위치한다 

 - 필자의 경우 /var/lib/tomcat8/webapps/sc.war 가 되겠다.

 - 해당 war 파일에 대한 context 설정을 해주어야 한다.

 

vim /var/lib/tomcat8/conf/server.xml
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Context path="/" docBase="sc" reloadable="true"></Context>

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

 

7. apache 설정

 - 기존 php 프로젝트는 그대로 냅두고 8888포트를 사용해서 톰캣에 연결한다.

 -  /etc/apache2/sites-available/ 해당 위치에 기존 설정 파일을 복사해서 설정 파일을 추가하도록 하자

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/spring_exam.conf

 - 설정 파일의 내용을 현재 프로젝트에 맞게 수정해주자

 - 모든 요청에 대하여 mod_jk로 넘겨준다. ( 동적 요청만 넘겨주면 좋지만 아직 파악이 덜 됐다.. )

<VirtualHost *:8888>


        ServerAdmin webmaster@localhost
        DocumentRoot /var/lib/tomcat8/webapps/sc


        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        JkMount /* ajp13_worker

</VirtualHost>

 

8. 재기동

 - 포트번호가 다를경우 /etc/apache2/ports.conf 부분에 listen 포트를 추가해주는 것을 잊지말자

service apache2 restart
service tomcat8 restart

 

 

테스트 프로젝트가 무사히 연동된 것을 확인할 수 있다.