IT 개발/AWS

5. AWS EC2(2) - Utuntu 자바(JDK, JRE), 톰캣 설치 및 war파일 배포

미웡할꺼야 2020. 12. 14. 18:28

[참고] 리눅스와 보안 - lesstif.com

[참고] Apache Tomcat8-Documemtation

[참고] AWS Ubuntu 시간 변경하기 - Dev Stack - 티스토리

[참고] Ubuntu 패키지 관리 툴: apt 사용법 - taewan.kim 블로그

[참고] How To Uninstall JDK From Linux ? – Novice Stuffs

[참고] AWS(2) - 우분투서버에 자바, 톰캣설치 - 하면된다

[참고] [Linux] 우분투에서 아파치톰캣 설치하기 - 코딩팩토리 - 티스토리

[참고] 우분투에 톰캣 설치 시 디렉터리 - 순간적인 백업 - 한스월드

[참고] Difference between Nano and Vim - Ask Ubuntu

 

[이전] 4. AWS EC2(1) - 인스턴스 생성 및 접속

[다음] 6. AWS EC2(3) - GEmail Error 시 대처(번외 S3 Error 얘기)

 

운영체제(OS) : Windows 10 64bit, Linux Ubuntu 18.04
개발환경 : JDK 8, Tomcat 8.5
개발도구 : PuTTY(푸티), FileZilla(파일질라), Eclipse IDE

모든 과정은 일반 계정으로 진행.
Ubuntu 14 이상은 apt-get 대신 apt 명령어 사용을 권장(참고).

 

1) PuTTY를 통해 인스턴스에 접속.

 

PuTTY를 통해 인스턴스에 연결


Ubuntu 기본 세팅

2) man apt 또는 info apt 입력 > DESCRIPTION_update (apt-get(8)) 확인 > 화면상에 q키 입력 > sudo apt(또는 apt-get) update 입력 > (apt update 사용 시) sudo apt list --upgradable 입력 > package update 확인.

  • apt(또는 apt-get) update : 등록된 저장소 내 전체 패키지 인덱스 파일(목록) 동기화(최신화).

  • apt(또는 apt-get) update 하지 않을 경우 apt install 명령어를 사용해 javatomcat 설치가 불가하다.

  • clear : 터미널 내용 초기화.

  • 어떤 List에서 나오려면 보통 q를 누르면 된다.

  • help에 나오지 않는 내용은 man 또는 info 명령어 사용. man -k-kkeyword의 약자.

man apt 또는 info apt 입력 > DESCRIPTION_update (apt-get(8)) 확인 > 화면상에 q키 입력
sudo apt-get update 입력 > package update 확인
apt update 하지 않을 시


3) date 입력 > default UTC 확인 > timedatectl list-timezones|grep Seoul 입력 > Asia/Seoul 확인 > sudo timedatectl set-timezone Asia/Seoul 입력 > date 입력 > KST 확인.

  • 리전을 서울로 두고 인스턴스를 생성해도 기본적으로 timezone이 UTC(협정 세계시)로 설정된다. 안 바꿔도 상관없지만 KST(한국 표준시) 기준으로 시간을 다뤄야 하는 거면 Server와 HTTP통신을 위해 맞춰주는 것이 좋다. 왜냐하면 해당 OS의 시간을 따라가기 때문이다.

  • timedatectl list-timezones : 변경 가능한 timezone 대륙/도시 목록.

  • timedatectl set-timezone [대륙/도시] : timezone 변경.

  • grep : 파일의 내용에서 특정 문자열 찾기.

  • timezoneroot 권한으로 바꿀 수 있다. 일반 계정으로 바꿀 시 root계정 비밀번호를 요구한다.

UbuntuOS 시간 변경
일반 계정으로 timezone 변경 시


Ubuntu Java(JDK, JRE)

4) JDK, JRE 확인 : javac -version, javac, java -version, java 입력.

  • Command '???' not found, but can be installed with(명령을 찾을 수 없지만 다음 명령을 설치할 수 있습니다)

JDK, JRE (좌)삭제 및 (우)설치 확인


5)

JDK 설치 : sudo apt install openjdk-[버전]-jdk-headless 입력 > Y 입력.

JRE 설치 : sudo apt install openjdk-[버전]-jre-headless 입력.

JDK, JRE 전체 삭제 : sudo apt purge --auto-remove openjdk[버전 또는 *] 또는 sudo apt autoremove --purge openjdk[버전 또는 *] 입력 > Y 입력 > sudo apt autoclean 입력.

  • headless : GUI(Graphical User Interface) 없는 웹 브라우저. 웹 브라우저와 유사한 환경에서 웹 페이지의 자동 제어를 제공, CLI(Commend-Line interface)나 네트워크 통신을 통해 실행된다.

  • JDK 안에 JRE가 포함되어 있기에 JDK만 설치해도 된다.

  • * : 전체를 가리킴. query에 *랑 같은 의미.

  • apt autoclean : 설치 / 업그레이드 후 다운로드된 패키지는 보관하되, 구 버전 패키지만 삭제.

  • 삭제 후 javac 또는 javac -version 입력 시 openjdk 설치 명령어나 나오지 않는다면 ubuntu를 껐다 켜면 된다.

jdk, jre 설치
jdk, jre 삭제


Ubuntu Tomcat

6) tomcat 확인 : sudo systemctl status tomcat[버전 | *] 입력 > (설치되었을 경우) q 입력.

  • 설치 후 tomcat active를 보면 running 상태이다.

tomcat (좌)삭제 및 (우)설치 확인


 

7) apt search tomcat 입력 > apt lib에 tomcat8, 9 확인.

  • apt list 명령어 이용 시 모든 apt lib이 나오기에 apt search [찾을 내용]으로 찾는 게 편하다.

apt search tomcat 입력
apt lib에 tomcat8, 9 확인


8)

tomcat 설치 : sudo apt install tomcat[버전] 입력 > Y 입력.

tomcat-docs, examples, admin 설치 : sudo apt install tomcat[버전]-docs tomcat[버전]-examples tomcat[버전]-admin 입력 > Y 입력.

tomcat 전체 삭제 : sudo apt purge --auto-remove tomcat[버전 | *] 또는 sudo apt autoremove --purge tomcat[버전 | *] 입력 > Y 입력 > sudo apt autoclean 입력.

  • tomcat-docs, examples, admin 미설치 시 tomcat 홈페이지를 통해 접근하면 404 Error가 발생된다.

  • tomcat manager를 통해 원격 배포하려면 tomcat[버전]-admin을 설치해야 한다.

  • tomcat[버전]-docs은 참조 문서이다. 굳이 설치를 안 해도 tomcat 공식 홈페이지에도 나와있다.

  • tomcat[버전]-examples는 예제이다. tomcat 공식 홈페이지에는 없지만 딱히 필요 있지도 않다.

tomcat 설치
tomcat-docs, examples, admin 설치
tomcat-docs, examples, admin 미설치 시 404 Error 발생
tomcat 전체 삭제


9) tomcat 버전 확인 : sudo /usr/share/bin/version.sh 입력.

  • apt를 통해 tomcat 설치 시 디렉터리 위치는 지정되어있다.

tomcat 버전 확인

 

HOME 디렉터리 : /usr/share/tomcat[버전]/

bin 디렉터리 : 각종 *.sh(startup.sh를 포함) 파일 및 bootstrap.jar, tomcat-juli.jar 파일.

lib 디렉터리 : 많은 *.jar 파일, 모두 link되었다.( /usr/share/java/에 들어있는 tomcat관련)

defaults.md5sum, defaults.template, logrotate.md5sum, logrotate.template

 

CONF 디렉터리 : /etc/tomcat[버전]/

Catalina 디렉터리, policy.d 디렉터리

catalina.properties, context.xml, jaspic-provider.xml, logging.properties, server.xml, tomcat-users.xml, tomcat-users.xml.save, web.xml

 

LOG디렉터리 : /var/log/tomcat[버전]/

각종 Log파일과 압축파일들, 과거 Log파일들은 .gz로 압축하여 보관.

 

웹ROOT 디렉터리 : /var/lib/tomcat[버전]/

lib 디렉터리 : 비어있음.

policy 디렉터리 : catalina.policy 파일 존재.

webapps 디렉터리 : 웹서비스 루트 디렉터리.

conf 디렉터리 : /etc/tomcat[버전] 디렉터리의 링크.

logs 디렉터리 : /var/log/tomcat[버전] 디렉터리의 링크.

work 디렉터리 : /var/cache/tomcat[버전] 디렉터리의 링크.


10)

tomcat 시작, 중지, 상태확인 : sudo systemctl [start | stop | status] tomcat[버전] 또는 sudo service tomcat[버전] [start | stop | status] 입력 > (status 확인 시) q 입력.

  • 처음 tomcat 설치 시 start 중이다.

  • tomcat start or stop 할 경우 CLI에 Action에 따른 변화가 나오지 않기에 status로 확인해야 한다.

tomcat start, stop status로 확인

 

네트워크 통계로 상태확인 : netstat -tnlp 또는 ss -tnlp 입력 > (default tomcat port) 8080 port 확인.

netstat가 없을 경우 : apt search netstat 입력 > apt lib에 net-tools 확인 > sudo apt install net-tools 입력.

  • ss와 netstat의 차이점 : ssnetstat보다 더 빨리 정보를 확인할 수 있다.

  • 속도 확인은 time [netstat | ss]로 확인.

(좌)netstat -tnlp , (우)ss -tnlp
(좌)time netstat , (우)time ss


11) sudo nano /var/lib/tomcat[버전]/conf/tomcat-users.xml 입력 > (그림 참고) role, user 추가 > 화면상에 Ctrl+X 클릭 > 화면상에 y키 클릭 > 화면상에 Enter키 클릭 > sudo systemctl restart tomcat[버전] 또는 sudo service tomcat[버전] restart 입력 > 

  • tomcat-users.xml 웹ROOT 디렉터리(/var/lib/tomcat[버전])/conf에서 수정하든 CONF 디렉터리(/etc/tomcat[버전])에서 수정하든 똑같다.(9번 항 참고)

  • nano 밑에 Commend에서 ^=Ctrl키 이다.

  • nano는 단순하고 사용하기 쉽고 마스터하기 쉬운 반면 vim은 강력하고 마스터하기 어렵다(참고).

tomcat-users.xml - role, user 추가
화면상에 Ctrl+X 클릭 > 화면상에 y키 클릭 > 화면상에 Enter키 클릭


12) 웹 브라우저 실행 > URL에 "퍼블릭 IPv4 [주소 | DNS]:[tomcat port]" 입력 > tomcat 접속 확인.

만약 접속이 안될 경우 : sudo ufw allow [tomcat port]/tcp 입력 > tomcat 접속.

  • 접속이 안 되는 것은 Linux server 방화벽에 의해 차단된 것. ufw 명령어를 이용.

tomcat 접속
tomcat-docs, examples 접속
tomcat-admin 접속


tomcat manager에서 war파일 원격 배포

13) URL에 "퍼블릭 IPv4 [주소 | DNS]:[tomcat port]" 입력 > manager webapp 링크 클릭 > Deploy_WAR file to deploy에서 파일 선택 클릭 > 배포할 war파일 선택 > Deploy 클릭 > 배포 완료 확인 > URL에 "퍼블릭 IPv4 [주소 | DNS]:[tomcat port]/[context]" 입력.

  • war파일 배포웹 브라우저 tomcat manager 탭이 계속 Loading상태로 나오는 것은 업로드 중이라는 것이다. Chrome을 사용할 경우 우측 하단에 "업로드 중(??%)..."이라고 업로드 진행을 확인할 수 있다.

  • 어떠한 Action을 할 경우 상단 Message로 알려준다.

  • 인터넷 속도가 느릴 경우 Timeout으로 인해 배포를 실패할 때도 있다.
    Message: FAIL - Deploy Upload Failed, Exception: [org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. java.net.SocketTimeoutException]

  • Start, Stop, Reload, Undeploy=시작, 중지, 재시작, 배포 삭제.

tomcat manager에서 war파일 원격 배포 및 배포 완료
tomcat manager에서 war파일 원격 배포 중
war파일 배포 완료 후 구동 확인


Local경로에서 war파일 배포

14) 웹 브라우저에서 "filezilla" 검색 > Download FileZilla Client 클릭 > Download FileZilla Client 클릭 > Download 클릭 > FileZilla 설치.

  • 다른 OS, 시스템 종류를 다운로드하고 싶을 경우 Download 페이지의 More download options에서 확인 가능.

FileZilla 다운로드


15)

연결 방법 1 : 좌측 상단 "사이트 관리자 열기" 아이콘 클릭 > New site 클릭 > 프로토콜(t): SFTP , 호스트(H): 퍼블릭 IPv4 [주소 | DNS] > 로그인 유형(L): 키 파일 , 사용자(U): AMI의 기본 사용자 이름 , 키 파일(K): EC2 인스턴스 ppk파일 > 연결 클릭 > 확인 클릭 > 연결 완료 확인.

연결 방법 2 : 편집(E) - 설정(S)... 클릭 > 연결 - SFTP 클릭 > 키 파일 추가(A)... 클릭 > EC2 인스턴스 ppk파일 추가 > 확인 클릭 > 좌측 상단 "사이트 관리자 열기" 아이콘 클릭 > New site 클릭 > 프로토콜(t): SFTP , 호스트(H): 퍼블릭 IPv4 [주소 | DNS] > 로그인 유형(L): 일반 , 사용자(U): AMI의 기본 사용자 이름 > 연결 클릭 > 연결 완료 확인.

  • site의 이름은 이름 바꾸기(R)로 바꿀 수 있다. 이름은 EC2 인스턴스와 연관된 이름으로 바꾸는 것이 구분이 쉽다.

  • 연결 방법 1로 연결할 경우 매번 알림창 "알 수 없는 호스트 키"가 계속 나온다. 항상 이 호스트를 신뢰하고 이 키를 캐시에 등록(A)=체크를 하면 site를 삭제하지 않는 이상 알림창이 더 이상 나오지 않는다.

FileZilla로 EC2 인스턴스에 연결 방법 1
FileZilla로 EC2 인스턴스에 연결 방법 2
연결 완료


16) 리모트 사이트: /home/ubuntu로 접근 > ubuntu 디렉터리 클릭 > 본인 PC에 있는 war파일을 ubuntu 디렉터리로 드래그 앤 드롭.

  • webapps 디렉터리의 게스트(공개) 권한쓰기 권한이 없어 Permission denied(권한 거부)로 인해 war파일을 넣을 수 없다.

  • FileZilla Client에서 디렉터리 권한 수정이 불가하다.

ubuntu 디렉토리에 war파일 넣기

 

webapps 디렉터리에 바로 war파일을 넣고 싶을 경우

해당 파일 및 디렉터리 권한만 변경 : sudo chmod [변경할 퍼미션값] [경로/변경될 파일 및 디렉터리]

모든 하위 디렉터리와 파일까지 권한 변경 : sudo chmod -R [변경할 퍼미션값] [경로/변경될 디렉터리]

현재 디렉터리 기준 모든 디렉터리와 파일 권한 변경 : chmod [변경할 퍼미션값] *

  • 권한 수정할 파일 또는 디렉터리에 접근한 경우 CLI명령어에 경로는 빼도 된다.
    (ex. /var/lib/tomcat[버전]/conf 경로에 접근한 경우 sudo chmod [변경할 퍼미션값] [변경될 파일 및 디렉터리])

  • 아래 그림에서 보다시피 d(directory), r(read), w(write), x(excute)이다. 권한이 없는 것은 첫 번째를 제외, '-'로 표현.

  • ls -al 명령어로 파일 및 디렉터리 권한 확인 가능.

  • 일반 계정으로 접두어 sudo를 안 붙일 시 "chmod: changing permissions of 파일명 혹은 디렉토리명: Operation not permitted" 경고 알림 발생.

파일 및 폴더(디렉토리) 권한 읽는 법
bin폴더(디렉토리) 권한 변경 및 확인


17)

배포 : PuTTY로 접속 > sudo mv [파일명].war /var/lib/tomcat[버전]/webapps 입력 > cd /var/lib/tomcat[버전]/webapps 입력 > sudo service tomcat[버전] restart 또는 sudo systemctl restart tomcat[버전] 입력 > URL에 "퍼블릭 IPv4 [주소 | DNS]:[tomcat port]/[context]" 입력.

배포 삭제 : PuTTY로 접속 > sudo systemctl stop tomcat[버전] 또는 sudo service tomcat[버전] stop 입력 > cd var/lib/tomcat[버전]/webapps 입력 > sudo rm -r [배포된 디렉토리명] [war파일명] 입력.

  • ls -al 명령어를 이용하여 war파일 이동, 배포, 삭제 확인.

  • tomcat restart 혹은 stop, start 했는데도 배포된 파일이 없을 경우 tomcat restart 혹은 stop, start 한 상태에서 URL에 "퍼블릭 IPv4 [주소 | DNS]:[tomcat port]/[context]" 입력 후 접속하면 배포된 파일이 생성되며 해당 사이트로 정상적으로 접속되어있다.

  • 배포 삭제 시 war파일배포된 디렉터리 둘 다 삭제해야 한다.
    배포된 디렉터리만 삭제할 경우 tomcat restart 시 남아있는 war파일로 인해 다시 배포된다.
    war파일만 삭제할 경우 배포된 디렉터리는 남아있기에 정상 동작한다. 만약 이전 버전과 같은 이름의 새 버전의 war파일을 배포하려 할 때 기존에 있는 배포된 디렉토리명과 겹쳐 새 버전의 war파일이 배포되지 않는다.

war파일 이동 및 배포 확인


마무리

요약

clear : 터미널 내용 초기화.
help : 터미널 기본 명령어 정보 확인.
man : Manual pages의 준말. 명령어들의 매뉴얼을 제공. help에서 확인 불가한 명령어 확인 가능.
info : 명령어의 사용 방법, 옵션 등을 나타냄. man에 비해 제공되는 명령어가 한정적. help에서 확인 불가한 명령어 확인 가능.
whatis : 명령어에 대한 기능을 간략하게 나타냄. 완전히 키워드가 일치해야만 해당 명령어 확인 가능.
sudo apt autoclean : 설치 / 업그레이드 후 다운로드된 패키지는 보관하되, 구 버전 패키지만 삭제.
apt search [검색할 내용] : apt lib에 있는 내용 검색.

apt 업데이트 : sudo [apt | apt-get] update > (apt 사용 시) sudo apt list --upgradable

Ubuntu Server 현재 위치의 시간으로 변경 : sudo timedatectl set-timezone [대륙/도시]
JDK, JRE 확인 : [javac | java] -version, [javac | java]
JDK, JRE 설치 : sudo [apt | apt-get] install openjdk-[버전]-[jdk | jre]-headless
JDK, JRE 부분, 전체 삭제 : sudo [apt | apt-get] [purge --auto-remove | autoremove --purge] openjdk[버전 | *]
tomcat 시작, 중지, 상태 확인 : sudo systemctl [start | stop | status] tomcat[버전] 또는 sudo service tomcat[버전] [start | stop | status]
네트워크 통계로 상태 확인 : ss -tnlp
tomcat 설치 : sudo [apt | apt-get] install tomcat[버전] tomcat[버전]-docs tomcat[버전]-examples tomcat[버전]-admin
tomcat 부분, 전체 삭제 : sudo [apt | apt-get] [purge --auto-remove | autoremove --purge] tomcat[버전 | *]

tomcat 디렉터리
HOME 디렉터리 : /usr/share/tomcat[버전]
CONF 디렉터리 : /etc/tomcat[버전]
LOG디렉터리 : /var/log/tomcat[버전]
웹ROOT 디렉터리 : /var/lib/tomcat[버전]


Linux도 처음이지만 CLI도 몇 번 해본 것 빼곤 처음이라 익숙해지느라 힘들었다.

 

Java, Tomcat 설치나 삭제 시 Ubuntu APT 명령어를 이용하는 것이 편하다.

만약 따로 tar.gz파일로 설치 시 환경 변수Ubuntu Service에 등록해야 하며 삭제할 때 설치 프로그램만 삭제하는 게 아닌 앞서 설정한 환경 변수Ubuntu Service도 삭제해야 하는 등 신경 쓸게 많으며 CLI로 작업해야 돼서 불편하다.

 

tomcat manager로 war파일 원격 배포

장점 : 장소를 구애받지 않고 war파일을 배포할 수 있다.

단점 : war파일 업로드하는데 시간이 걸리고 인터넷이 구릴 경우 배포 실패할 수도 있다.

로컬에서 war파일 배포

장점 : 바로 war파일을 배포할 수 있다.

단점 : 인스턴스 보안 그룹에서 SSH IP 접속 범위를 한정시키면 장소의 구애를 받으며, 만약 범위를 위치 무관으로 해도 PuTTY, FileZilla 설치하고 CLI로 이것저것 해야 하며 war파일과 pem파일을 들고 다녀야 하기 때문에 불편하다.

 

개인적인 결론으로 tomcat manager를 이용하는 것이 효율적이다.

 

[이전] 4. AWS EC2(1) - 인스턴스 생성 및 접속

[다음] 6. AWS EC2(3) - GEmail Error 시 대처(번외 S3 Error 얘기)