레이블이 tomcat인 게시물을 표시합니다. 모든 게시물 표시
레이블이 tomcat인 게시물을 표시합니다. 모든 게시물 표시

2020년 5월 10일 일요일

Spring Boot AJP 설정

Apache의 mod_jk 구성이 필요합니다.

- Tomcat
@Configuration
public class TomcatConfiguration {

@Bean
public WebServerFactory servletContainer() {

TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
Connector ajp = new Connector("AJP/1.3");
ajp.setPort(8009);
ajp.setSecure(false);
ajp.setAllowTrace(false);
ajp.setScheme("http");
ProtocolHandler protocolHandler = ajp.getProtocolHandler();
if (protocolHandler instanceof AbstractAjpProtocol) {
AbstractAjpProtocol<?> abstractAjpProtocol = (AbstractAjpProtocol<?>) protocolHandler;
abstractAjpProtocol.setSecretRequired(false);
}
factory.addAdditionalTomcatConnectors(ajp);

return factory;
}

}


메이븐 설정은 spring-boot-starter-tomcat이 필요합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>





- Undertow
@Configuration
public class UndertowConfiguration {

@Bean
public ServletWebServerFactory servletContainer() {
UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();
factory.addBuilderCustomizers(new UndertowBuilderCustomizer() {

@Override
public void customize(Builder builder) {
builder.addAjpListener(8009, "127.0.0.1");
}
});
return factory;
}

}


메이븐 설정은 spring-boot-starter-undertow이 필요하고 undertow 구성 시 spring-boot-starter-tomcat을 제외해야 합니다.

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>

<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>








2020년 3월 10일 화요일

우분투 - 아파치 톰캣 연동

apache2, tomcat9 연동예제입니다.


1. 설치
# apt-get install -y apache2
# service apache2 start

아파치2 접속확인
http://localhost



2. 톰캣설치
# apt-get install -y openjdk-8-jdk 
자바가 필수로 설치된 환경에서 설치합니다.

/usr/share/tomcat9경로에 설치합니다.
# cd /usr/share
# wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
# tar -zxvf apache-tomcat-9.0.31.tar.gz
# mv apache-tomcat-9.0.31 tomcat9
# rm apache-tomcat-9.0.31.tar.gz
# sh /usr/share/tomcat9/bin/startup.sh

톰캣 접속확인
http://localhost:8080



3. mod-jk 설치
# apt-get install libapache2-mod-jk



4. /etc/libapache2-mod-jk/workers.properties 수정
# which java
/usr/bin/java

# readlink /usr/bin/java
/etc/alternatives/java

# readlink /etc/alternatives/java
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

readlink /etc/alternatives/java에서 확인된 경로와 톰캣 설치 경로를 workers.properties 파일에 설정합니다.

# vi /etc/libapache2-mod-jk/workers.properties
workers.tomcat_home=/usr/share/tomcat9
workers.java_home=/usr/lib/jvm/java-8-openjdk-amd64



5. 톰캣 server.xml 파일 수정
# vi /usr/share/tomcat9/conf/server.xml
<Connector protocol="AJP/1.3"
   port="8009"
   address="0.0.0.0"
   secretRequired="false"
   redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="ajp13_worker">

Connector의 secretRequired, address 두 설정에 오류가 있으면 연동이 안될 수 있습니다.
worker 기본 설정값인 ajp13_worker를 jvmRoute에 입력합니다.

톰캣9 재시작
# sh /usr/share/tomcat9/bin/shutdown.sh
# sh /usr/share/tomcat9/bin/startup.sh



6. /etc/apache2/sites-enabled/000-default.conf 수정
# vi /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
        ServerName localhost
        JkMount /* ajp13_worker
        DocumentRoot /usr/share/tomcat9/webapps/ROOT
</VirtualHost>




7. /etc/apache2/apache2.conf 수정
# vi /etc/apache2/apache2.conf
ServerName localhost

서버네임이 생략된경우 추가합니다.



8. 아파치2 재시작
# service apache2 restart



9. 접속확인
http://localhost

















만약 접속이 안된다면 톰캣과 아차피 모두 재시작하고 확인합니다.
에러가 발생한다면 /var/log/apache2/ 경로에서 아파치 로그를 확인합니다.










2016년 11월 19일 토요일

톰캣 튜닝 팁

- Listener 설정
 <Listener className="org.apache.catalina.security.SecurityListener" checkedOsUsers="root" /> 

root 계정 실행을 방지하는 기능입니다.


- Connector 튜닝
acceptCount="10" 
enableLookups="false" 
compression="false" 
maxConnection="8192" 
maxThread="100" 
minSpareThreads="25" 
disableUploadTimeout="true"
URIEncoding="UTF-8"
sendReasonPhrase="true"

Connector 속성을 추가하면 톰캣 성능이 개선됩니다.
항목별 세부사항은 별도 검색해서 확인해보시길 바랍니다.
* sendReasonPharse 옵션은 톰캣9 버전부터는 지원되지 않습니다.


- 인스턴스 명칭 부여
<Engine name="Catalina" defaultHost="localhost" jvmRoute="instance1">

jvmRoute를 설정하면 workers.properties를 통해 로드밸런싱을 구성할 수 있습니다.



- 세션 클러스터링
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">

  <Manager className="org.apache.catalina.ha.session.DeltaManager"
  expireSessionsOnShutdown="false"
  notifyListenersOnReplication="true"/>

  <Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
 address="auto"
 port="4000"
 autoBind="100"
 selectorTimeout="5000"
 maxThreads="6"/>

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
 <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
  </Channel>

  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>

  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>


세션 클러스터링 기본코드 입니다.
자료 출처 : 출처 : https://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html#Cluster_Architecture


라즈베리파이 - 아파치 톰캣 연동

1. libapache2-mod-jk 설치
- 사전 준비사항
아파치, 톰캣 모두 설치가 된 상태에서 진행해야 합니다.


- 설치
root@raspberrypi:~# apt-get install libapache2-mod-jk



2. 아파치 설정
- apache2.conf 수정
/usr/lib/apache2/modules/mod_jk.so 파일이 있는지 확인 한 후 
/etc/apache2/apache2.conf 파일 맨 아래 다음과 같이 수정합니다.

root@raspberrypi:~# vi /etc/apache2/apache2.conf

추가 내용
#JK_MODULE
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so


- 000-default.conf 설정
/etc/apache2/sites-enabled/000-default.conf  파일 <VirtualHost *:80> 다음 행에 다음 내용을 추가합니다.

root@raspberrypi:~# vi /etc/apache2/sites-enabled/000-default.conf

추가내용
JkMount /*      loadbalancer


- workers.properties 파일 생성
root@raspberrypi:~# vi /etc/apache2/workers.properties

추가내용
vi /etc/apache2/workers.properties

workers.java_home=/usr/lib/jvm/java-8-openjdk-armhf

worker.list=loadbalancer
 
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=instance1
worker.loadbalancer.sticky_session=1

worker.instance1.type=ajp13
worker.instance1.host=localhost
worker.instance1.port=8009
worker.instance1.lbfactor=1


- 톰캣 설정 확인
worker.loadbalancer.balanced_workers=instance1 라인 내용 중 instance1이 톰캣과 동일해야 합니다.

톰캣 설정 파일 server.xml을 수정합니다.

root@raspberrypi:~# vi /opt/tomcat/instance1/conf/server.xml

문서 중간 쯤
<Engine name="Catalina" defaultHost="localhost">
라인에 jvmRoute가 있는지 확인하고 수정합니다.

확인 및 수정
<Engine name="Catalina" defaultHost="localhost" jvmRoute="instance1">


- httpd-jk.conf 설정
root@raspberrypi:~# vi /etc/libapache2-mod-jk/httpd-jk.conf

JkWorkersFile /etc/libapache2-mod-jk/workers.properties 내용을 다음과 같이 수정합니다.

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



3. 서비스 재시작
- 톰캣 실행
root@raspberrypi:~# sh /opt/tomcat/instance1/bin/startup.sh

톰캣이 이미 실행중이라면 
root@raspberrypi:~# sh /opt/tomcat/instance1/bin/shutdown.sh
root@raspberrypi:~# sh /opt/tomcat/instance1/bin/startup.sh


- 아파치 재실행
root@raspberrypi:~# service apache2 restart


- 접속 확인

80포트로 접속을 했을 때 톰캣으로 이동합니다.






2016년 11월 17일 목요일

라즈베리파이 - 아파치2와 톰캣 설치

1. 안내사항
2016-09-23 이미지 기준으로 작성했습니다.
라즈베리파이3 B+ 모델 기준입니다.
apt-get로 설치하는 패키지는 apache2, openjdk-8-jdk 입니다.
톰캣은 apache-tomcat-8.5.8을 수동으로 설치했습니다.



2. 아파치2 설치
- 설치
root@raspberrypi:~# apt-get install apache2

- 접속 확인
root@raspberrypi:~# ifconfig
IP 주소 확인 후 브라우저에서 확인 하시면 됩니다.

html 경로 : /var/www/html/index.html



3. 자바 설치
- 설치 확인
root@raspberrypi:~# java -version
openjdk version "1.8.0_40-internal"
OpenJDK Runtime Environment (build 1.8.0_40-internal-b04)
OpenJDK Zero VM (build 25.40-b08, interpreted mode)

- 설치(설치가 안된 경우 설치)
root@raspberrypi:~# apt-get install openjdk-8-jdk



4. 톰캣 설치
- 설치
아파치 톰캣 사이트 : http://tomcat.apache.org/

/opt 디렉토리에 tomcat 디렉토리를 생성 후 톰캣을 다운로드합니다.
다운로드한 압축파일은 압축을 풀고 디렉토리 이름을 instance1 로 수정합니다.

root@raspberrypi:/opt# mkdir tomcat
root@raspberrypi:/opt# cd tomcat/
root@raspberrypi:/opt/tomcat# wget http://mirror.apache-kr.org/tomcat/tomcat-8/v8.5.8/bin/apache-tomcat-8.5.8.tar.gz
root@raspberrypi:/opt/tomcat# tar -zxvf apache-tomcat-8.5.8.tar.gz
root@raspberrypi:/opt/tomcat# mv apache-tomcat-8.5.8 instance1


- 파일수정
root@raspberrypi:/opt/tomcat# which java
/usr/bin/java
root@raspberrypi:/opt/tomcat# readlink /usr/bin/java
/etc/alternatives/java
root@raspberrypi:/opt/tomcat# readlink /etc/alternatives/java
/usr/lib/jvm/java-8-openjdk-armhf/jre/bin/java

readlink로 경로를 확인한 후 startup.sh, shutdown.sh 파일을 수정합니다.

root@raspberrypi:/opt/tomcat# cd instance1/bin/
root@raspberrypi:/opt/tomcat/instance1/bin# vi startup.sh
root@raspberrypi:/opt/tomcat/instance1/bin# vi shutdown.sh


#!/bin/sh에 아래 내용 추가

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-armhf
export CATALINA_HOME=/opt/tomcat/instance1
export CATALINA_BASE=/opt/tomcat/instance1



- 실행 확인
실행
root@raspberrypi:/opt/tomcat/instance1/bin# sh startup.sh
종료
root@raspberrypi:/opt/tomcat/instance1/bin# sh shutdown.sh

root@raspberrypi:~# ifconfig
IP 주소 확인 후 브라우저에서 포트번호 8080을 추가해서 확인 하시면 됩니다.





마치며..
아파치와 톰캣을 연동하려면 mod-jk를 사용해야 합니다.