2018년 6월 27일 수요일

(AWS) Amazon Linux 2에 JDK & Tomcat 설치하기

 지난 포스팅에서 Amazon Linux 2에 Apache Web Server를 설치해보았으니 이제 Tomcat을 설치해 보려고 한다.

 Amazon Linux 2를 처음 설치하면 JDK 조차도 설치되어있지 않다. Tomcat은 Java 환경에서 실행되는 서버이므로 일단 JDK부터 설치해보자. 아래 그림과 같이 yum 명령을 실행해보면 어떤 버전의 JDK 패키지가 제공되는 지 알 수 있다.


 위 그림에서 보듯이 제공되는 JDK 패키지는 OpenJDK 1.7.0과 1.8.0이다. Oracle JDK를 선호하는 사람들이 있지만 서버 운영환경에서는 OpenJDK가 전혀 모자라지 않고 yum에서 제공하는 패키지를 선호하는 사람으로서 OpenJDK 최신 버전인 1.8.0 버전으로 설치를 하겠다.

 설치는 아래 명령으로 간단히 설치가 된다.

$ sudo yum install java-1.8.0-openjdk

 아래 그림과 같이 명령을 실행해보면 설치된 java 버전을 볼 수 있다. 정상적으로 설치가 되었다면 아래 그림과 같은 메세지가 출력될 것이다.


 자 이제 Tomcat을 설치해보도록 하겠다. 먼저 yum에서 제공되는 Tomcat 패키지를 알아보자. 아래 그림의 명령을 실행해보면 Tomcat 패키지와 관련 목록들이 보인다.


 위 목록에서 가장 중요한 건 tomcat 패키지이다. 다른 것들은 설치하지 않아도 사실 Tomcat의 기능에는 문제가 없다. 하지만 설치 후 테스트를 위해서, 그리고 간단한 서버 관리를 위해서 tomcat-admin-webapps, tomcat-webapps 패키지도 설치해 주도록 하자. 이 패키지들은 이름에서 보듯이 Tomcat에서 실행되는 관리용 webapp 들이다. 일반적으로 상용 서비스에서 사용하는 경우는 별로 없겠지만 정상적으로 설치가 되었는지, 간단한 설정 상태 조회, 관리 등의 용도로 유용하므로 개발중이라면 반드시 설치하는 게 좋다. 상용 운영환경이라고 할 지라도 어차피 공식 배포본에도 포함되어 있으니 부담없이 모두 설치하도록 하자.(크기도 얼마 안된다.) 다른 패키지들도 이름을 보고 자신에게 필요한 것인지 아닌지 알 수 있으므로 필요하다면 설치하도록 하자. 필자는 tomcat-docs-webapp 패키지도 설치할 것을 강력 추천한다. 테스트 페이지에서 보여지는 문서 링크들이 모두 정상동작하게 해 줄 것이다.

$ sudo yum install tomcat
$ sudo yum install tomcat-admin-webapps
$ sudo yum install tomcat-webapps
$ sudo yum install tomcat-docs-webapp

 설치가 완료되고 나면 Tomcat의 모든 설정파일은 /etc/tomcat 폴더에 들어가 있다. Tomcat을 설정할 때 가장 많이 건드리는 server.xml 파일도 물론 여기 있다. /etc/tomcat/server.xml 파일을 열어서 Connector의 디폴트 설정 상태를 보도록 하자. HTTP/1.1 요청은 8080로 받도록 되어있고 AJP/1.3 요청은 8009로 받도록 되어있을 것이다. 외부에서 접속할 수 있도록 보안 그룹(방화벽) 설정에서 8080 포트를 열어놓았는 지 체크하여 아직 열려있지 않다면 열어놓도록 한다.

 일단 Tomcat의 디폴트 상태로도 동작에는 문제가 없으니 아래 명령으로 Tomcat을 시작시켜보자.

// Tomcat 시작
$ sudo service tomcat start

// Tomcat 종료
$ sudo service tomcat stop

// Tomcat 재시작
$ sudo service tomcat restart

 시작을 시켰으면 아래 그림처럼 브라우저를 실행해서 주소창에 해당 EC2 인스턴스의 Public IP와 포트(8080)를 입력해보자. tomcat-webapps 패키지까지 모두 설치했다면 아래 페이지가 보일 것이다. webapps 패키지들을 설치하지 않았으면 아래 페이지가 뜨지 않기때문에 webapps 패키지들을 설치하도록 한 것이다. 아래와 같은 페이지가 보인다면 설치는 성공적으로 된 것이다.


 참고로 위 페이지 우측 상단의 버튼(Server Status, Manager App 등)들을 눌러보면 로그인 팝업이 보일 것이다. Tomcat을 최초 설치한 상태에서는 여기에 로그인할 수 있는 계정은 하나도 등록되어있지 않기 때문에 로그인을 할 수가 없다. 관리 기능을 이용하고자 한다면 먼저 계정을 하나 등록해야한다.

 계정 등록은 /etc/tomcat/tomcat-users.xml 파일에 계정을 추가하여 등록할 수 있다. tomcat-users.xml 파일을 열어보면 대부분의 내용이 주석인 파일이다. xml 구조에 맞게 아래 내용을 넣으면 사용자를 등록할 수 있다. username과 password만 원하는 대로 넣으면 된다.

<tomcat-users>
  ...
  <role rolename="manager-gui"/>
  <user username="admin" password="yourpassword" roles="manager-gui"/>
  ...
</tomcat-users>

 Role은 manager-gui 외에도 여러 가지가 있으므로 자세히 알고 싶다면 페이지 좌측의 노란 박스에 있는 "Read more..." 링크를 눌러서 문서의 내용을 자세히 읽어보기 바란다. 참고로 이 링크는 tomcat-docs-webapp 패키지가 설치되어 있어야 동작한다.

 이제 webapp들도 정상적으로 동작하지만 실제 운영을 시작할 때 발견될 문제점이 하나 있다. 아래 그림에서 webapp 폴더의 권한과 소유자, 소유그룹을 자세히 보기 바란다.


 실행된 Tomcat 프로세스는 root가 아니라 tomcat 계정이 소유한다. 따라서 위의 설정상태라면 Tomcat 프로세스는 webapps 폴더에 write 권한을 가지고 있지 못하게 된다. 소유자인 root만 write 권한을 가지고 있고 tomcat group은 write 권한이 없도록 설정되어있기 때문이다. 이 설정이 문제가 되는 시점은 WAR 파일을 webapps 폴더에 넣고 자동 배포(auto deploy)가 가능하도록 설정했을 때이다. Tomcat이 write 권한이 없기 때문에 WAR를 풀지 못하게 되고 배포가 실패하게 된다. 수동으로 root권한을 획득하여 배포를 할 때는 문제가 없으므로 수동으로 배포를 할 예정이라면 상관없지만 자동 배포를 원한다면 아래 명령으로 권한을 바꿔줄 것을 권한다. 운영중인 서버는 모든 사용자에게 내용을 공개할 필요는 없으므로 770으로 주는 게 안전하다. 하지만 개발중에는 개발자들도 내용을 보아야 하므로 775가 좋다.

$ sudo chmod 775 /var/lib/tomcat/webapps

 참고로 한 가지 더 얘기하자면 Tomcat을 이미 사용해 본 사람이라면 Tomcat의 home 폴더(CATALINA_HOME)가 어디인지 궁금할 것이다. /etc/tomcat/tomcat.conf 파일을 열어보면 CATALINA_HOME은 /usr/share/tomcat 으로 되어있다. 터미널에서 /usr/share/tomcat폴더로 이동해보면 그 안에 conf, logs, webapps 등의 tomcat 폴더들이 있다. 실제로는 폴더라기 보다 폴더의 심볼릭 링크 파일들이 있어서 각 폴더의 역할을 하고 있으므로 참고하기 바란다. 각 링크의 타겟이 어디인지 살펴보면 실제 폴더의 위치가 어디인지도 알 수 있다.

댓글 4개: