본문 바로가기

Linux

리눅스 서버 설치기 - 2. Tomcat

들어가기 전에, 본 글은 저의 삽질이 잔뜩 기록되어 있는 글입니다.

 

이 AWS를 이용한 리눅스 서버 설치기는 에러와 삽질과정까지 전부 기록한 총 3편으로 구성되어 있는 글입니다.

삽질/에러난 과정 필요없고 성공루트만 빠르게 보고 싶으신 분들은 아래 링크로 들어가시면 됩니다.

rimkongs.tistory.com/241

 

Spring 프로젝트를 AWS에 웹 배포하기 (JAVA, Tomcat 설치부터 사이트 띄우기까지)

1. openJDK-8 설치 sudo apt-get install openjdk-8-jre openjdk-8-jdk 설치 경로 확인 java 파일구조 1. java-8-openjdk-amd64/bin/java  2. java-8-openjdk-amd64/bin/javac 3. java-8-openjdk-amd64/jre/bi..

rimkongs.tistory.com

 


 

 

 

※ profile 파일은 OS 부팅시 2번째로 로딩되는 파일이다. 

 

톰캣 설치했을 때 관련 파일 디렉토리 [apt-get으로 깔았을 때 기준]

tomcat home: /usr/share/tomcat8
tomcat conf: /var/lib/tomat8/conf -----(link)----- /etc/tomcat7
tomcat log: /var/log/tomcat8
tomcat root directory: /var/lib/tomcat8

 

환경변수 셋팅

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_HOME

export CATALINA_HOME=/usr/share/tomcat8

PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export PATH

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/tools.jar
:$JAVA_HOME/lib/mysql-connector-java-8.0.9-rc-bin.jar
:$JAVA_HOME/jre/lib/ext:$CATALINA_HOME/lib/jsp-api.jar
:$CATALINA_HOME/lib/servlet-api.jar
  • CATALINA_HOME 변수를 선언하고 /usr/share/tomcat8 을 가리키도록 셋팅

  • CLASSPATH 가 가리키는 파일에 jsp-api.jar 와 servlet-api.jar 추가

    • servlet 파일과 jsp 파일로 홈페이지가 구동되는것을 생각하면 꽤 의미있는 api jar 파일 설정이다.

    • PATH 경로에 기존 경로와 함께 tomcat8 의 bin 폴더 추가

  • 설정파일 적용

    • 앞에서도 이야기했지만, profile 파일은 부팅시에 실행되기때문에, 직접 실행하는 명령어를 사용했다. 

    • $ source /etc/profile

 

톰캣 구동

$ cd /usr/share/tomcat8/bin
$ ./shutdown.sh
$ ./startup.sh

 

그런데./startup.sh 를 하니까 다음과 같은 오류가 나왔다

ubuntu@ip-172-31-33-100:/usr/share/tomcat8/bin$ ./startup.sh
Using CATALINA_BASE:   /usr/share/tomcat8
Using CATALINA_HOME:   /usr/share/tomcat8
Using CATALINA_TMPDIR: /usr/share/tomcat8/temp
Using JRE_HOME:        /usr/lib/jvm/java-8-openjdk-amd64
Using CLASSPATH:       /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
touch: cannot touch '/usr/share/tomcat8/logs/catalina.out': No such file or directory
./catalina.sh: 464: ./catalina.sh: cannot create /usr/share/tomcat8/logs/catalina.out: Directory nonexistent

 

 

찾아보니 위에서 찾고 있는 catalina.out은 다음의 경로에 있었다.

/var/log/tomcat8/catalina.out

 

접근 권한을 주었다  ( root:root 의미는 사용자id: 그룹id )

sudo chown root:root /usr/share/tomcat8 -R

이러고 다시 ./startup.sh 해도 실행이 안된다.. 슬슬 화나는중

 

아 갑자기 생각났다. 뭐 내가했던 방식(apt-get)으로 톰캣 깔면 ./startup.sh 로 시작할 수 없고

아래과 같은 명령어로 톰캣시작을 해줘야 한다고 했다.

# sudo /etc/init.d/tomcat8 start
[ ok ] Starting tomcat8 (via systemctl): tomcat8.service.

 

시작은 됐다는데.. 왜 페이지가 안뜰까............

http://!$#%$#@$#:8080/

 

...흐아 여기서 시간버릴 순 없으니 일단 다음단계로 넘어간다

 

--> 다음날 다시 돌아왔다 ^_^ 여기가 안풀리니까 나중에 결국 발목잡아서 .. 

 

어디부터 잘못된건지 모르겠다. 그냥 이전에 잘 되던 웹 서버가 안켜지니까... 다시 차근차근 해보자

 

삽질 1. 버전 확인

# /usr/share/tomcat8/bin/version.sh
Using CATALINA_BASE:   /usr/share/tomcat8
Using CATALINA_HOME:   /usr/share/tomcat8
Using CATALINA_TMPDIR: /usr/share/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.39 (Ubuntu)
Server built:   Sep 9 2019 19:47:51 UTC
Server number:  8.5.39.0
OS Name:        Linux
OS Version:     4.15.0-1056-aws
Architecture:   amd64
JVM Version:    1.8.0_232-8u232-b09-0ubuntu1~18.04.1-b09
JVM Vendor:     Private Build

 

삽질 2.  Apache Tomcat과 같은 WAS를 설치하려면 당연히 그 전에 자바 프로그램이 깔려있어야 하는데, 자바가 설치되어 있는지 확인해보자.

$ java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-8u232-b09-0ubuntu1~18.04.1-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)

$ which java
/usr/bin/java

$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Dec 12 08:21 /usr/bin/java -> /etc/alternatives/java

$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Dec 12 08:21 /etc/alternatives/java
-> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

따라서 일반적인 JAVA_HOME은 /usr/lib/jvm/java-8-openjdk-amd64가 될 것 같다.

 

-> 뭐 하여간 자바는 제대로 깔려있는것 같고..

 

삽질 3. 로그파일 확인을 위해 catalina.out을 들어가봤다

# 실시간 로그 확인 

sudo tail -f /var/log/tomcat8/catalina.out 을 실행 시킨 상태에서, 새로운 창을 열어 톰캣 서버를 구동시키면

실시간 로그 확인 가능

cd /usr/share/tomcat8/bin -> ./startup.sh

뭔소리인지 모르겠다. 왜 그리고 일부만 짤려서 나오는거야 전체 다 보게 하는 명령어는 또 뭐야..

at java.util.concurrent.ThreadPoolExecutor.runWorker ?????????????

*참고: catalina.out 파일에서 빠져나오는법 ctrl+c

 

삽질4. 누가 tomcat설치경로 가서 ./startup.sh해보래서 해봤다

 

엇 이제 이 의미를 알겠다

/usr/share/tomcat8/logs/catalina.out -- 이 경로가 없다고?

 

내 log파일의 경로는 다음과 같다. ./startup.sh 하던 tomcat home경로와는 다르다.. 이게 문제였나?

tomcat home: /usr/share/tomcat8
tomcat conf: /var/lib/tomat8/conf -----(link)----- /etc/tomcat7
tomcat log: /var/log/tomcat8
tomcat root directory: /var/lib/tomcat8

 

 

삽질 5. 그럼 심볼릭 링크를 걸어야 하는걸까?

*심볼릭 링크 설정법

ln -s [대상 원본 파일] [새로 만들 파일 이름]

ln -s original copy 

copy 경로로 들어가보면 copy -> original이라고 뜨는데 "->" 는 링크 대상인 원본 파일을 뜻한다

 

*심볼릭 링크 삭제

rm copy

 

무튼, 심볼릭 링크를 걸어봤다

sudo ln -s /var/log/tomcat8 logs

그랬더니 이렇게 뜸

 16 Dec 28 07:16 log -> /var/log/tomcat8 // [대상파일] -> [원본파일] 인 듯 하다

 

아 잠깐 뭔가 이상하다.

내가 심볼릭 링크를 계속 생성해왔는데, 경로를 생각 안하고 만들었던 것 같다.

심볼릭 링크를 거는 법은, 심볼릭 링크를 생성할 경로까지 정확하게 찾아간 후에, 심볼릭 링크를 걸어야 되는 것 같다.

 

내가 원하는건 /usr/share/tomcat8 경로에 로그 파일을 걸고 싶은것이다. 그러면?

 

톰캣 홈 경로로 이동 후

$ cd /usr/share/tomcat8

log란 이름으로 링크를 걸었다

$ ln -s /var/log/tomcat8 logs

ls-al 해보니 다음과 같은 심볼릭 링크가 표시 됨 (/usr/share/tomcat8 위치에 logs라는 심볼릭링크가 생성된 것임)

 logs -> /var/log/tomcat8

와 드디어 톰캣 가동됨 원래는 bin 폴더로 가서

./startup.sh 명령어로 안켜져서, /etc/init.d/tomcat8 start 으로 켰던건데 

그 이유가 catalina.out 폴더 경로를 못찾는다는 에러가 계속 떴기 때문이다.

그래서 심볼릭 링크를 걸어줬더니 해결됨

/usr/share/tomcat8/bin$ sudo ./startup.sh

Using CATALINA_BASE:   /usr/share/tomcat8
Using CATALINA_HOME:   /usr/share/tomcat8
Using CATALINA_TMPDIR: /usr/share/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
Tomcat started.

 

하지만 이렇게 뜸,,, 그래도 404에러라서 기쁘다. 아깐 아예 접속도 안됐는데 ㅎㅎ

 

[참고] 사용자id, 그룹id 확인하기

-. uid,gid,groups정보 보기

[root@localhost ~]#id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

 

 

$ sudo chown -R root:root /var/lib/tomcat8/

$ sudo chown -R root:root /etc/tomcat8/

$ sudo chown -R root:root /usr/share/tomcat8/

 

 

 java.net.BindException: Address already in use (Bind failed)

원인 - 톰캣 서버의 포트가 열려있어서 발생하는 에러

 

1. 윈도우 커맨드창에서 netstat 명령어로 네트워크의 열려있는 포트 확인

netstat -a -n -o
// 혹은
netstat -ano
// 혹은
netstat -ano | find "8080" // 톰캣 포트 넘버(기본8080) 바로 검색하기

이 프로세스 PID를 이용해서 kill 해주면 된다

taskkill /f /pid 해당포트

 

다시 이제 무얼 해야 할지 감이 안잡히므로 삽질을 시작한다.

 

삽질 6. server.xml 이상없는지 들여다보기

/usr/share/tomcat8/conf

more ./server.xml  -- 계속 스페이스바 누르면 그다음 페이지로 넘어감

 

 

server.xml 끝부분으로 오면, <Host> 가 설정되어 있다

appBase는 Tomcat 8.0 설치과정에 환경변수 설정을 했는데,

때 지정한 $CATALINA_HOME(Tomcat설치 위치) 경로 + 입력값 을 인자값으로 받는다.

즉, /usr/share/tomcat8/webapps 를 인자값으로 받는 것이다.

* CATALINA_HOME 어디로 설정되어있는지 모르겠으면 version.sh 하면 나온다

 

<Host>의 childElement로 <Context> 를 명시해줘야 하는데... 따로 명시하지 않으면 ROOT를 기본으로 한다.

즉, Document Root Path는  /usr/share/tomcat8/webapps/ROOT 가 된다. (명시 안되어있기 때문)

 

그럼 해당 경로로 가보자.

 

...!? /usr/share/tomcat8 아래에  ROOT란 디렉토리가 없다?

기억을 되짚어 보니, - 나의 ROOT가 있었던 경로는 /var/lib/tomcat8/webapps 이다.

 

 

그럼 또 ROOT를 심볼릭 링크 걸어줘야하는 부분? ..

/usr/share/tomcat8 아래에 존재하는 심볼릭링크들을 확인해보자

(그리고 저 빨간색 표시된 심볼릭 링크들. 해당 경로에 그런 파일이 없는데, 심볼릭링크가 생성됐다는 소리같다. 이제 깨달음;)

 

그럼 여기의 webapps를 /var/lib/tomcat8/webapps로 걸어주면 될까? 

 cd /usr/share/tomcat8
 ln -s /var/lib/tomcat8/webapps webapps

 

근데 찝찝하게 /usr/share/tomcat8/webapps 에 바로 심볼릭링크가 걸린게 아니라

/usr/share/tomcat8/webapps/webapps에 걸려있다. webapps란 폴더가 또 생긴 느낌;?? 이미 

/usr/share/tomcat8 경로에 webapps란 폴더가 존재했어서 이런현상이 생긴걸까 ?

뭐지? 무튼 이 아래에는 ROOT가 있다.

그냥 rm webapps로 없앴다.. 찜찜해서 ;

 

 

catalina home 부터 다시확인해보자

sudo /usr/share/tomcat8/bin/version.sh

 

방화벽에서 톰캣 외부 포트 접속 허용하기

# sudo ufw allow 8080/tcp -- 물론 이게 원인은 아니였다. 그래도 확실히 열어두긴 해야하니깐.

 

# sudo /etc/init.d/tomcat8 restart

다음과 같이 에러 떴다.

 

# systemctl status tomcat8.service

원인을 확인해본다.

 

/var/lib/tomcat8/logs/catalina.out 파일이 없다고 한다 ? 

 

아니 내 로그 파일은 /var/log/tomcat8 에 있는데 쟨 또 왜 /var/lib/tomcat8/logs를 참조하는거지? 

이 경로에도 그냥 심볼릭링크 걸어버림 ㅡㅡ 점점 더러워진다

# cd /var/lib/tomcat8
# ln -s /var/log/tomcat8 logs

 

다시 작동시켜보니, 제대로 시작이 된다. 

# sudo /etc/init.d/tomcat8 restart
[ ok ] Restarting tomcat8 (via systemctl): tomcat8.service.

 

** 현재 문제점

근데 지금 이게 문제가 아니라 ${CATALINA_HOME} 경로를 해결해줘야 한다. 

왜냐면 지금 문제가 ip:8080/ 으로 들어가기는 하는데 404에러 뜬다. 그리고 내 생각에는 이 원인이 index.html 을 찾지 못해서 생기는 것 같다. -> 즉 webapps/ROOT를 못찾고 있는거지.

- 현재 server.xml의 Document Root Path는  /usr/share/tomcat8/webapps/ROOT 인데,

- 실제 ROOT가 있는 폴더 위치는 /var/lib/tomcat8/webapps/ROOT란 말이지?

 

 

<Context path="" docBase="/var/lib/tomcat8/webapps/ROOT" reloadable="true" />

-> 이거 추가해도 안된다.. 다시 원상복구 시켜놓고

 

문득 생각든게 ! 나 아파치도 설치했었지..?

Apache 설정 폴더로 가보자

$ vi /etc/apache2/sites-enabled/000-default.conf

 

아니다 다시다

 

 

답이 없다..그냥 apt-get으로 install한 tomcat을 삭제하려 한다.

wget으로 설치할 걸, 왜 나대서 !!!!

# sudo apt-get remove --purge tomcat8

Tomcat 설치 (wget이용)

1. 

cd /usr/share 
# wget http://apache.tt.co.kr/tomcat/tomcat-8/v8.5.50/bin/apache-tomcat-8.5.50.tar.gz

wget - 해당 경로에 설치됨.

 

2. 압축 해제 및 파일 이동 

$ sudo tar xvfz apache-tomcat-8.5.50.tar.gz

-- 여기서 root로 접속해서 압축 풀었을 때는 에러가 떴는데

ubuntu로 접속해서 앞에 sudo 붙이고 명령어 주니깐 풀렸다. 차이가 뭐지? root계정으로 풀면 안되나?

다음과 같이 에러떴었음.

무튼 풀렸으니깐..

풀리는 과정에서 경로들을 살펴볼 수 있었다.

 

중요한 것만 보자면

1. apache-tomcat-8.5.50/conf ... - catalina.policy, context.xml ..

2. apache-tomcat-8.5.50/webapps/ROOT

3. apache-tomcat-8.5.50/bin ... - startup.sh, shutdown.sh 

apache-tomcat-8.5.50/conf/
apache-tomcat-8.5.50/conf/catalina.policy
apache-tomcat-8.5.50/conf/catalina.properties
apache-tomcat-8.5.50/conf/context.xml
apache-tomcat-8.5.50/conf/jaspic-providers.xml
apache-tomcat-8.5.50/conf/jaspic-providers.xsd
apache-tomcat-8.5.50/conf/logging.properties
apache-tomcat-8.5.50/conf/server.xml
apache-tomcat-8.5.50/conf/tomcat-users.xml
apache-tomcat-8.5.50/conf/tomcat-users.xsd
apache-tomcat-8.5.50/conf/web.xml
apache-tomcat-8.5.50/bin/
apache-tomcat-8.5.50/lib/
apache-tomcat-8.5.50/logs/
apache-tomcat-8.5.50/temp/
apache-tomcat-8.5.50/webapps/
apache-tomcat-8.5.50/webapps/ROOT/
apache-tomcat-8.5.50/webapps/ROOT/WEB-INF/
apache-tomcat-8.5.50/webapps/docs/
apache-tomcat-8.5.50/webapps/docs/WEB-INF/
apache-tomcat-8.5.50/webapps/docs/api/
apache-tomcat-8.5.50/webapps/docs/appdev/
apache-tomcat-8.5.50/webapps/docs/appdev/sample/
apache-tomcat-8.5.50/webapps/docs/appdev/sample/docs/
...
apache-tomcat-8.5.50/webapps/examples/
apache-tomcat-8.5.50/webapps/examples/WEB-INF/
apache-tomcat-8.5.50/webapps/examples/WEB-INF/classes/
...
apache-tomcat-8.5.50/webapps/examples/jsp/
apache-tomcat-8.5.50/webapps/examples/jsp/async/
apache-tomcat-8.5.50/webapps/examples/jsp/cal/
..
apache-tomcat-8.5.50/bin/bootstrap.jar
apache-tomcat-8.5.50/bin/catalina-tasks.xml
apache-tomcat-8.5.50/bin/catalina.bat
apache-tomcat-8.5.50/bin/ciphers.bat
apache-tomcat-8.5.50/bin/commons-daemon-native.tar.gz
apache-tomcat-8.5.50/bin/commons-daemon.jar
apache-tomcat-8.5.50/bin/configtest.bat
apache-tomcat-8.5.50/bin/digest.bat
apache-tomcat-8.5.50/bin/setclasspath.bat
apache-tomcat-8.5.50/bin/shutdown.bat
apache-tomcat-8.5.50/bin/startup.bat
apache-tomcat-8.5.50/bin/tomcat-juli.jar
apache-tomcat-8.5.50/bin/tomcat-native.tar.gz
apache-tomcat-8.5.50/bin/tool-wrapper.bat
apache-tomcat-8.5.50/bin/version.bat
apache-tomcat-8.5.50/lib/annotations-api.jar
apache-tomcat-8.5.50/lib/catalina-ant.jar
apache-tomcat-8.5.50/lib/catalina-ha.jar
...
apache-tomcat-8.5.50/temp/safeToDelete.tmp
apache-tomcat-8.5.50/webapps/ROOT/RELEASE-NOTES.txt
apache-tomcat-8.5.50/webapps/ROOT/WEB-INF/web.xml
apache-tomcat-8.5.50/webapps/ROOT/asf-logo-wide.svg
apache-tomcat-8.5.50/webapps/ROOT/bg-button.png
apache-tomcat-8.5.50/webapps/ROOT/bg-middle.png
...
apache-tomcat-8.5.50/bin/catalina.sh
apache-tomcat-8.5.50/bin/ciphers.sh
apache-tomcat-8.5.50/bin/configtest.sh
apache-tomcat-8.5.50/bin/daemon.sh
apache-tomcat-8.5.50/bin/digest.sh
apache-tomcat-8.5.50/bin/setclasspath.sh
apache-tomcat-8.5.50/bin/shutdown.sh
apache-tomcat-8.5.50/bin/startup.sh
apache-tomcat-8.5.50/bin/tool-wrapper.sh
apache-tomcat-8.5.50/bin/version.sh

 

 

3. apache파일을 /usr/local로 이동

$ mv apache-tomcat-8.5.50 /usr/local 
$ ln -s apache-tomcat-8.5.50 tomcat8 
$ ls -al

 

버전도 확인해보자. 버전은 bin파일에 있음

/usr/local/apache-tomcat-8.5.50/bin# ./version.sh

Using CATALINA_BASE:   /usr/local/apache-tomcat-8.5.50
Using CATALINA_HOME:   /usr/local/apache-tomcat-8.5.50
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.5.50/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/apache-tomcat-8.5.50/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.50/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.50
Server built:   Dec 7 2019 19:19:46 UTC
Server number:  8.5.50.0
OS Name:        Linux
OS Version:     4.15.0-1056-aws
Architecture:   amd64
JVM Version:    1.8.0_232-8u232-b09-0ubuntu1~18.04.1-b09
JVM Vendor:     Private Build

 

4. 설정파일 Setting

export CATALINA_HOME=/usr/local/tomcat8
export CLASSPATH= ... $CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar // 추가

적용 - profile 파일은 부팅 시에 실행되기 때문에, 직접 실행하는 명령어 사용

$ source /etc/profile

톰캣 가동!

$ /usr/local/tomcat8/bin# ./shutdown.sh
$ /usr/local/tomcat8/bin# ./startup.sh

 

 

 

 

드디어 띄웠다. 역시 삽질속에서도 얻는게 많다.. 환경설정 파일 구조를 좀 더 자세하게 알았달까