카테고리 글 보관함: 아파치 톰캣

Could not reliably determine the server’s fully qualified domain name

우분투 서버 14.04 LTS 아파치 apache2 설치 후 기동시에 아래와 같은 에러 메시지가 출력될 때 해결 방법.

이 메시지는 아파치 기동시에 터미널이나 /var/log/apache2/error.log 파일로 출력이 되는데, 아파치 웹서버 운용에 지장이 있는 에러 메시지는 아니다. 그냥 둬도 문제가 없다.

하지만, 신경쓰이니 없애도록 하자.

ServerName 이 지정되어 있지 않아서 FQDN(Fully Qualified Domain Name) 을 결정하지 못한다니 ServerName 을 지정하도록하자. 버추얼 호스트 설정에서 ServerName 을 지정하고 있거나, 특별히 사용하고 있는 호스트명이 없다면 localhost 를 사용한다.

tee 명령은 화면 출력 내용을 파일과 화면 출력 양쪽으로 보내는 명령이다. 아래 명령으로 ServerName 을 정의를 servername.conf 파일에 쓰고, 아파치에 적용시키자.

conf 파일을 활성화

아파치 리로드

이제 /var/log/apache2/error.log 파일을 봐도 처음과 같은 에러는 출력되지 않을 것이다.

아파치 웹컨텐츠 압축 mod_deflate 설정과 mime type 알아보기

우분투 서버 14.04 LTS 에서 설치한 아파치 Apache/2.4.7 는 웹컨텐츠를 압축하기 위해서 mod_deflate 를 사용한다. 기본적으로 활성화 되어 있고, 웹에서 사용하는 일반적인 파일들은 미리 정의가 되어 있기 때문에 그냥 쓰는 일이 많지만, 웹컨텐츠 중에서 좀 특수한 파일이 있을 경우에는 압축이 되지 않는 경우가 있다.

나 같은 경우에는 워드프레스 젯팩을 설치했는데 그 안에 Genericons.svg 라는 파일이 압축이 되고 있지 않았다. 이 파일은 텍스트 파일로 78Kb 나 되는 사이즈를 가지고 있다.
이 사실은 구글의 PageSpeed Insights 에서 알게 되었다. 운영중인 사이트/블로그의 속도를 개선하기 위해서 쓰면 좋을듯하니 이용해보자.

Genericons.svg 파일이 압축되고 있지 않다.
Genericons.svg 파일이 압축되고 있지 않다.

각설하고, svg 라는 확장자를 가진 이 파일을 아파치에서 압축하는 방법을 알아보자.

deflate.conf 파일 수정

위에서 아파치에서 압축은 mod_deflate 을 사용한다고 했다. 이 모듈의 설정 파일은 deflate.conf 이고 이 파일은 /etc/apache2/mods-enabled 에 있다. 열어서 수정하도록 하자.

파일을 열어보면

이렇게 mime type 로 압축 송신할 파일들을 정의해 둔 것을 볼 수 있다.

svg 파일의 mime type 을 알아보기 위해서는 아래 파일을 참조하자.

vi 에서 / 키로 검색 모드로 들어가서 svg 를 입력하면 아래와 같이 mime type 이 image/svg+xml 이라는 것을 확인할 수 있다.

다시 deflate.conf 파일로 돌아가서 아래와 같이 압축할 파일의 정의를 추가한다.

설정을 적용시키기 위해서는 아파치 재기동이 필요하다.

PageSpeed Insights 에서 다시 확인한 결과 압축이 적용되어 압축 사용 항목이 통과 되어 있다.

압축 사용에 문제 없음!
압축 사용에 문제 없음!

우분투 서버 14.04 LTS 톰캣 웹서버 설치 후 war 파일 배치(디플로이) 방법

우분투 서버 14.04 LTS 에서 톰캣7 웹서버을 설치하고 war 파일로 된 웹어플리케이션을 배치(디플로이)해서 확인하기까지의 과정을 설명한다.

톰캣 설치

먼저 당연하게 톰캣을 설치해야 한다. 우분투 서버 14.04 LTS 에서 최신 버전인 7.0 버전을 설치한다.

설치를 하면 service tomcat7 으로 톰캣이 실행 된다.
브라우저에서 <톰캣을 설치한 서버의 IP 주소:8080> 로 접속해 본다.

톰캣7 설치 후 브라우저에서 접속한 화면
톰캣7 설치 후 브라우저에서 접속한 화면

apt-get 으로 톰캣을 설치하면 별 문제 없이 설치가 될 것이다.

war 파일=웹어플리케이션 배치(디플로이)

브라우저로 접속한 화면의 글을 잘 읽어 보면 CATALINA_HOME 은 /usr/share/tomcat7 이고, CATALINA_BASE 는 /var/lib/tomcat7 이라고 나와 있다.
이전 글 톰캣 CATALINA_HOME vs. CATALINA_BASE 에서도 이야기 했지만, 우분투 톰캣7에서는 기본적으로 웹어플리케이션 배치(디플로이)는 CATALINA_BASE 를 이용한다.

war 파일의 배치 장소는 CATALINA_BASE/webapps 이며, 경로로는 /var/lib/tomcat7/webapps 가 된다.
webapps 디렉토리는 tomcat7 유저 소유이므로 winSCP 등으로 war 파일을 업로드 할 때는 직접 webapps 디렉토리에 올릴 수가 없다. 먼저 현재 계정의 home 디렉토리에 war 파일을 업로드 하고 sudo 명령으로 webapps 디렉토리로 복사 하도록 하자.

구글에서 sample war 로 검색해서 나온 Calendar.war 파일을 배치 해 보았다.
파일을 복사 한 다음에 리스팅을 해 보면 이미 배치가 끝나서 Calendar 디렉토리로 전개 되어 있는 모습을 볼 수 있다.

아까 접속 했던 브라우저 주소 뒤에 전개 된 디렉토리 이름인 Calendar 를 아래와 같이 붙여서 브라우저로 접속해 본다.

배치 후 접속 화면
배치 후 접속 화면

별 내용이 없는 어플리케이션이라 화면이 횡하지만 어쨋든 잘 접속 된다.
디플로이는 이런 식으로 하면 된다.

톰캣 CATALINA_HOME vs. CATALINA_BASE

톰캣에 존재하는 두개의 배치 장소 CATALINA_HOME 과 CATALINA_BASE 의 관한 이야기.
도대체 어디에 디플로이 해야 하는거야!?

환경
우분투 서버 14.04 LTS
톰캣 7.0

기본적인 지식부터 깔아두고 시작하자.
CATALINA_HOME : 톰캣의 인스톨 장소. 실행 파일이 들어있는 bin 폴더가 있다.
CATALINA_BASE : 톰캣의 인스턴스가 존재하는 곳이라고 한다.

카탈리나 홈은 톰캣이 설치 된 장소이고, 카탈리나 베이스는 유저가 디플로이나 설정을 해서 실제로 사용하는 곳 정도로 파악된다.

그런데 헷갈리게도 카탈리나 홈에도 webapp 나 conf 디렉토리가 있고, 실제로 이곳에 war 파일을 넣고, conf에 있는 server.xml을 수정해서 bin 폴더의 startup.sh로 기동하면 잘 작동 된다!
게다가 카탈리나 베이스에서도 webapp 디렉토리에 war 파일을 넣고 conf 디렉토리에 server.xml을 수정하고 service tomcat7 start 를 하게 되면 잘 작동 된다!

차이를 알았나?

카탈리나 홈은 bin 디렉토리에 있는 startup.sh로 기동했을 때 카탈리나 베이스로서 작동한다.
우분투 서버에서 apt-get으로 톰캣7을 설치 했을 경우에
CATALINA_HOME=/usr/share/tomcat7
CATALINA_BASE=/var/lib/tomcat7
이렇게 설정되고 사용자는 CATALINA_BASE/webapps 디렉토리에 war 파일을 전개해서 사용하는게 정석이다.
어디까지나 기본적인 사용법이 그렇다는 얘기고…

사도(?)의 방법으로 CATALINA_HOME/webapps 디렉토리에 war 파일을 전개해서 CATALINA_HOME/bin/startup.sh 로 톰캣을 기동해서 사용하는 방법이 가능하다.
startup.sh로 기동하게 되면 CATALINA_HOME=CATALINA_BASE 가 되어서 /usr/share/tomcat7 디렉토리의 webapps, conf, work 디렉토리를 사용해서 톰캣이 기동하게 된다.
당연히 별도 설정이 없는한은 서버 재기동시 자동 기동 같은건 되지 않는다.

서버가 기동할때 실행되는 /etc/init.d/tomcat7 나 service tomcat 에서는
CATALINA_BASE=/var/lib/tomcat7
로 되어 있기 때문에 /var/lib/tomcat7 디렉토리의 webapps, conf 디렉토리를 사용하게 된다.
그리고, CATALINA_BASE 는 인스턴스 디렉토리이기 때문에 여러개의 톰캣 인스턴스로 기동할 수도 있다.
tomcat7-instance-create 을 참조

결론적으로 실제 서버로서 사용할 때는 자동으로 기동 되는 CATALINA_BASE 에 설정과 디플로이를 하는 것이 정답이고,
그 외에 개발 등의 특별한 목적으로 톰캣을 사용하는 경우에는 CATALINA_HOME 을 쓰는 것도 괜찮을 것 같다.

내 생각에는 이렇게 헷갈리는 구성이 된 이유는
원래(?) 톰캣이 설치 된 디렉토리에서 디플로이 하는 것이 당연했던 예전(또는 우분투 이외의 리눅스)의 모습을 유지하기 위해서가 아닌가 싶다.
실제로 나도 당연한 듯이 CATALINA_HOME 에서 설정 파일을 만지고 startup.sh 와 shutdown.sh 로 톰캣을 재기동 했으니까.
서버 재기동 후에 톰캣이 자동으로 기동 되었는데도 웹어플리케이션은 죽어있었기 때문에 (CATALINA_BASE에는 아무것도 없으니까!) 깨닫게 되었다.

구글링을 해 봐도 영문 포럼에서나 조금 이야기 되고 있는 내용이고, 한글로 된 내용은 없는 듯해서 이렇게 이야기를 풀어 보았다.

Problem with directory /usr/share/tomcat7/common/classes

톰캣 기동시 나오는 에러의 해결 방법.

8 27, 2015 12:56:56 午前 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [/usr/share/tomcat7/common/classes], exists: [false], isDirectory: [false], canRead: [false]
8 27, 2015 12:56:57 午前 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [/usr/share/tomcat7/common], exists: [false], isDirectory: [false], canRead: [false]
8 27, 2015 12:56:57 午前 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [/usr/share/tomcat7/server/classes], exists: [false], isDirectory: [false], canRead: [false]
8 27, 2015 12:56:57 午前 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [/usr/share/tomcat7/server], exists: [false], isDirectory: [false], canRead: [false]
8 27, 2015 12:56:57 午前 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [/usr/share/tomcat7/shared/classes], exists: [false], isDirectory: [false], canRead: [false]
8 27, 2015 12:56:57 午前 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [/usr/share/tomcat7/shared], exists: [false], isDirectory: [false], canRead: [false]
8 27, 2015 12:57:02 午前 org.apache.coyote.AbstractProtocol init
情報: Initializing ProtocolHandler ["http-bio-127.0.0.1-8080"]
8 27, 2015 12:57:02 午前 org.apache.coyote.AbstractProtocol init
情報: Initializing ProtocolHandler ["ajp-bio-8009"]
8 27, 2015 12:57:02 午前 org.apache.catalina.startup.Catalina load
情報: Initialization processed in 4545 ms
8 27, 2015 12:57:02 午前 org.apache.catalina.core.StandardService startInternal
情報: サービス Catalina を起動します

디렉토리가 없어서 에러가 나는 것 같으니 디렉토리를 만들어 준다. 끝.

cd /usr/share/tomcat7
mkdir -p common/classes
mkdir -p server/classes
mkdir -p shared/classes