본문 바로가기
OPS(Infra)/Tomcat

[Tomcat] Tomcat에 port가 다른 서버들을 올릴때

by hwan20c 2022. 11. 9.

요새는 docker로 서버를 말아서 올리는 경우가 많은데,

 

예전에는 gradle과 같은 빌드 툴로 프로젝트를 jar나 war 파일로 만든 다음에 

 

(gradle일 경우 해당 프로젝트 폴더에 가서 ./gradlew bootwar 입력하면 해당 폴더의 build/lib 안으로 저장된다.)

 

해당 서버의 tomcat이 설치된 곳에 복사해 놓아서 하는 경우들이 대부분 이였다.

 

일단, tomcat이 설치된 폴더 webapps에 해당 파일을 가져다 놓으면 되는데,

 

webapps안에 들어있는 기본 파일들을 다 삭제하고,

 

tomcat 경로의 conf의 server.xml에서 context path를 설정 해주면 된다.

 

(설정을 안하면, '홈페이지주소:포트/' 뒤에 매핑되는 식으로 된다.) -> 아닐수도 있음...

 

그래서 일단 server.xml을 고쳐야 하는데, server.xml을 잘 보면 service영역이 있다.

 

거기에 딱 한줄만 추가해주면 되는데,

 

service태그의 host 태그 안으로 이동해서

<Service>

~

  <Host>

  ~

    <Context path="" docBase="~~~~~~~~~~~~~~~~~~~~~~~~~~" reloadable="false" />

  </Host>

~

</Service>

 

docbase안에 아까 webapps에 가져다놓은 war파일의 경로를 넣어주면 된다.(파일이름까지 넣어야함.)

 docBase="/Users/Hwan/Downloads/apache-tomcat-8.5.83/webapps/test" -> 요런식으로

 

그리고 Context path 태그에 보면 옵션들이 있는데,

 

https://tomcat.apache.org/tomcat-8.0-doc/config/context.html

 

Apache Tomcat 8 Configuration Reference (8.0.53) - The Context Container

When autoDeploy or deployOnStartup operations are performed by a Host, the name and context path of the web application are derived from the name(s) of the file(s) that define(s) the web application. Consequently, the context path may not be defined in a M

tomcat.apache.org

 

위에 들어가보면 옵션이 생각보다 많다...

 

어째든 자주쓰는걸 조금 풀이해보면

 

path => 이걸 설정을 하면, 이제 '홈페이지주소:포트/' 이 뒤에 오는 경로를 설정할 수 있다.

예를 들어 path="/index" 이러면 들어올때 홈페이지주소:포트/index 이렇게 들어와야 하는것이다.

 

docBase => 위에 말했듯이 실행될 앱을 설정하는 곳

 

reloadable => 파일이 바뀌었는지 안 바뀌었는지 체크한다. 나는 어차피 톰캣을 shutdown하고 파일을 올린 다음에 다시 시작하기 때문에 false로 해놨지만 true로 해놓으면 docBase의 파일이 변동되면 자동으로 다시 배포해주는것 같다.(jenkins같은거 쓰면 유용할듯)

 

이제 배포하는 서버가 여러개가 되었을때 방법인데

 

위에 Service tag된걸 하나를 똑같이 복사해서

 

<Service name="Catalina2">
    <Connector port="8090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Engine name="Catalina2" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
<Context path="" docBase="~~~~~~~~~~~~~~~~~~~~~~~~~~" reloadable="false" />

        <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>
    </Engine>
  </Service>

 

(위에 코드들은 제가 쓸때 주석으로 되어 있는 필요 없는 부분들을 다 잘랐습니다......)

 

빨간색으로 되어진 부분들을 고쳐주면 된다.(파일에 맞게)

 

아마 Catalina부분은 새로운 이름으로 바꿔도 될거 같긴하다. 예전부터 그냥 2,3,4 이렇게 해왔어서 그렇게 했다.

 

아 그리고 tomcat을 start 했는데, 로깅을 하고싶을때

 

tomcat폴더의 logs의 그날 날짜의 catalina~뭐시기를 보면 되는데, (cat 명령어로)

 

tomcat을 실행해서 실시간으로 보고 싶으면

 

tail명령어를 이용해서

 

tail -f catalina.out

 

보면된다. (터미널 여러개 띄어놓고 보시면 됩니다.)

 

(tomcat 실행시에 나오는 에러나 운영시에 나오는 에러는 엥간해선 이곳에서 다 나온다.)

댓글