본문 바로가기
Work

톰캣에 자바프로젝트 배포하기 (메모용)

by 왕고미 2023. 12. 15.



1. 자바프로젝트(Spring레거시) war로 빌드. (인텔리제이/이클립스)
build 전 arifactId 지정하고 체크할 것. 또한 IDE에서 구동하였을 때 문제가 없었어야 함.

2. 서버에 Tomcat을 설치하고 server.xml 세팅을 확인
Tomcat 버젼과 JDK 버젼의 호환성을 확인할 필요가 있음.
server.xml의 내부 세팅은 war의 위치와 어플리케이션을 인식할 폴더의 위치를 포함하므로 아주 중요한 설정임
server.xml에서 가상호스트 세팅(443,80)을 포함한다. 유념할 것.
또한 해당 파일 내에서 로그기록 설정 가능.

3. war파일을 usr/local/tomcat/webapps에 넣고 
아래 코드 확인. (project.war파일일 경우)

<Host name="localhost"  appBase="webapps"
  unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="project"  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>

4. 빌드 후 도메인에 연결까지 되었다면 letsencrypt (SSL 인증서) 설치

$ yum install python-certbot-apache
$ certbot certonly --webroot -w /usr/local/tomcat/webapps/onepay -d onepaycorea.com --email otp3721@naver.com

 - server.xml에 아래 Connector 추가

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
 maxThreads="150" SSLEnabled="true">
  <SSLHostConfig>
  <Certificate certificateKeyFile="/etc/letsencrypt/live/domain.com/privkey.pem"
   certificateFile="/etc/letsencrypt/live/domain.com/cert.pem"
   certificateChainFile="/etc/letsencrypt/live/domain.com/fullchain.pem"
   type="RSA" />
  </SSLHostConfig>
</Connector>

-  크론탭 추가 하기

 

$ crontab -e


# 매월 1일 03시에 인증서를 갱신 후 아파치 재실행
0 18 1 * * /usr/bin/certbot renew --renew-hook="sudo systemctl restart httpd"


** 작업 시 생기는 문제 해결

** Singleton Supplier 관련 에러 => sprinframework + Spring-jdbc 버젼이 완벽히 똑같아야 하며, 버젼이 낮지 말아야 함.
pom.xml 확인할 것.

** Jsp파일내에서 <%@ page import = "classPath" %> 를 이해하지 못하고 package로 인식하는 jasperException 관련 =>
JDK + TOMCAT버젼에 문제가 없는지 확인. 해결당시에는 OpenJDK 1.8 + Tomcat 9.0.84로 하고,
tomcat/conf/server.xml 내에서 <Host ... appBase="webapps"> 와 해당 태그 내부의 <Cotext path="/"/> 를 확인해야함.
프로젝트 폴더를 바로 바라보지 못하면 프로젝트폴더/하위폴더/하위폴더의jsp.jsp 파일을 열었을때 컴파일 하지 못함.

** '허용하지 않는 문자를 포함하고 있음' 에러 관련 => GET방식의 리다이렉트를 실시할 경우 문제가 생길 수 있음. 
server.xml 파일내에 <Connector> 태그에  relaxedQueryChars="[]()^|&quot;" 작성.

   <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
  relaxedQueryChars="[]()^|&quot;"/>