본문 바로가기

프로그래밍

ubuntu에서 springboot 내장 tomcat과 apache 연동

spring boot에 내장된 was인 tomcat은 웹서버로서 잘 작동하기는 하지만

더 나은 성능과 기능을 위해 apache를 웹서버로 사용하는게 더 낫다.


게시물에서 사용된 ubuntu 버전은 18.04이지만, 아주 오래된 버전이 아닌 이상 동일한 순서로 연동이 가능할 것으로 생각된다.





우선 apache를 사용하기 위해 설치를 한다.


sudo apt-get update

sudo apt-get install apache2



설치된 apache 웹서버의 작동 상태를 확인한다.


웹서비스를 실행한다.

sudo service apache2 start



80포트가 잘 열려있는지 확인한다.

sudo netstat -ntlp | grep apache2

tcp6       0      0 :::80                


방화벽의 80포트를 개방한다.

sudo ufw allow 80/tcp




tomcat과 apache를 연동하기 위해 mod-jk를 사용하기 위해 모듈을 설치한다.

sudo apt-get install libapache2-mod-jk





spring boot 어플리케이션 설정인 application.properties에 tomcat 설정을 삽입한다.

tomcat.ajp.protocol=AJP/1.3

tomcat.ajp.port=18001

tomcat.ajp.enabled=true


Bean을 만들어 내가 만든 속성을 주입한다.

@Value("${tomcat.ajp.protocol}")

String ajpProtocol;

 

@Value("${tomcat.ajp.port}")

int ajpPort;

 

@Value("${tomcat.ajp.enabled}")

boolean tomcatAjpEnabled;


@Bean

public EmbeddedServletContainerFactory servletContainer() {

 

    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();

    if (tomcatAjpEnabled)

    {

        Connector ajpConnector = new Connector(ajpProtocol);

        ajpConnector.setProtocol(ajpProtocol);

        ajpConnector.setPort(ajpPort);

        ajpConnector.setSecure(false);

        ajpConnector.setAllowTrace(false);

        ajpConnector.setScheme("http");

        tomcat.addAdditionalTomcatConnectors(ajpConnector);

    }

 

    return tomcat;

}





아파치에서 사용할 worker 설정을 만들어준다.

sudo vi /etc/apache2/workers.properties


worker.list=worker1

worker.list=worker1,worker2,load_balance //worker가 두개 이상인 경우에 이 처럼 각각을 ','로 연결하여 지정한다.


worker.worker1.port=18001 //위의 AJP포트와 동일한 포트를 지정한다.

worker.worker1.host=127.0.0.1

worker.worker1.type=ajp13

worker.worker1.lbfactor=1


worker.worker2.port=18002 //두개 이상의 tomcat을 사용하는 경우 두번째 worker 설정

worker.worker2.host=127.0.0.1

worker.worker2.type=ajp13

worker.worker2.lbfactor=1


worker.load_balance.type=lb

worker.load_balance.balanced_workers=worker1,worker2



사이트 설정을 수정한다

sudo vi /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>

  ServerAdmin webmaster@localhost //도메인이 연동되어 있으면 도메인으로 수정한다

  ServerName  localhost

  ServerAlias localhost


  JkMount /* load_balance

</VirtualHost>



jk.conf 설정파일을 수정한다

sudo vi /etc/apache2/mods-available/jk.conf 


<IfModule jk_module>


    # We need a workers file exactly once

    # and in the global server

    #JkWorkersFile /etc/libapache2-mod-jk/workers.properties

    JkWorkersFile /etc/apache2/workers.properties






앞으로 지속적으로 운영을 하기 위해서는 spring boot jar를 서비스로 만들어 두는 것이 편리할 것이다.

다음과 같은 방법으로 쉽게 우분투 서비스로 등록하여 사용 가능하다.

myservice 명칭을 적절한 본인의 서비스명으로 수정한다.


sudo vi /etc/systemd/system/myservice.service


[Unit]

Description=myservice Service


[Service]

User=nobody

# The configuration file application.properties should be here:

WorkingDirectory=/data //spring boot jar파일 위치

ExecStart=/usr/bin/java -Xmx256m -jar -myservice.jar

SuccessExitStatus=143

TimeoutStopSec=10

Restart=on-failure

RestartSec=5


[Install]

WantedBy=multi-user.target



systemctl에 myservice 서비스를 등록한다.

sudo systemctl daemon-reload

sudo systemctl enable myservice.service


서비스 실행해보자.

sudo service myservice start


이상으로 spring boot 내장 tomcat을 apache2와 연동하고 systemctl 서비스로 등록하는 방법에 대한 설명을 마친다.