본문 바로가기
DevOps

jar 파일 생성 및 AWS 배포 작업

by 이숴 2023. 3. 3.
반응형

사전 작업

경로안에 한글이 있으면 안된다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (매우 중요) 빌드 자체가 안될 수 있다.

윈도우 환경의 경우 git Bash 에서 진행, 맥은 터미널로 가능.

 

 

jar 파일 생성

aws에서 돌리기전 필요한 것은 jar파일이다.

 

jar 파일?

클라우드 환경에서 돌리기 위해 로컬에서 build를 통해 만든 프로젝트 어플리케이션의 SnapShot이라고 생각하면 된다.

이 파일을 서버에 넣어서 24시간 굴리는 것이다.

 

jar 파일 만들기

1. git환경에서 프로젝트 경로로 들어간다.

 

2. 빌드를 해서 jar파일을 생성하자 이때 wrapper 파일이 없어서 빌드가 안될 수도 있다.

gradle wrapper 명령어를 통해 wrapper 파일을 생성해주자.

./gradlew build

 

그래도 정말 만에 하나 빌드가 그래도 안될 때가 있다.

  • gradle 버젼이 낮거나 경고 메세지 때문에 그럴 경우가 생긴다.
  • 그럴 때는 경고, 오류를 해결해주거나, 
./gradlew —debug build
  • 상단의 명령어로 강제로 실행시킬 수 있다.

 

3. 프로젝트루트/build/libs 경로에 들어가서 jar파일이 프로젝트명_SNAPSHOT-plain.jar가 아닌 프로젝트명_SNAPSHOT.jar파일로 생성되었는지 확인해보자.

 

  • jar파일이 -plain 파일로 생성되었다면 확인해볼 것
더보기

프로젝트에 build.gradle 파일에 아래로 내려가보면 bootJar 영역이 있을 것이다. 해당 영역안에

enabled = true 를 설정해주고,

 

맨 하단에

jar {

enabled = false

}

를 설정해서 실행 파일이 무엇인지 설정한다.

 

aws 회원가입하기, 인스턴스 생성

1. ec2 를 검색하여 즐겨찾기 해두기, 우측 상단에 위치를 서울로 변경

2. 인스턴스 시작을 눌러서 생성하기

3. 이름 설정, amazon-linux, 프리티어 설정, 64비트, t2.micro(예시), 키페어 생성에서 컴터에 .ssh폴더에 넣어놓기 (해당 폴더가 없다면 ssh생성방법을 검색)

4. 키페어 유형 RSA, 키형식.pem

5.

mv ~/Downloads/키이름.pem ~/.ssh/

6.

chmod 600 키이름.pem

7. VPC(기본값), 서브넷(ap-northeast-2a)-아파트동호수같은개념, ip자동할당:활성화, 방화벽: 보안그룹 생성(그룹이름 규칙에 맞춰서), 보안그륩 규칙 ssh 위치무관, 설명:ssh(무관)

8. 스토리지 16gb, 인스턴스 시작

9. 좌측에 보안그룹에 이름 설정

 

git에서 서버 들어가기 (접속)

ssh -i ~/.ssh/키이름.pem ec2-user@퍼블릭ip주소
  • ls -la 서버 목록 확인

 

aws서버에서 에플리케이션 실행

jar 파일을 서버로 옮겨보자

 

깃을 두개 띄워서 해본다.

  1. 프로젝트루트/build/libs 경로로 들어와서 scp로 복사
  2. scp -i ~/.ssh/키이름.pem ./jar파일이름.jar ec2-user@퍼블릭ip주소:/home/ec2-user
  3. 반대 주소로도 가능 (SCP, RSYNC도 많이 사용)

서버에 접속해있던 깃에서 확인

 

서버 내에서

  1. sudo amazon-linux-extras install java-openjdk11 (아마존 리눅스 서버를 안쓰면 yum, apt 명령어를 사용, 필자도 잘 모르니 검색 추천)
  2. java -version 으로 설치되었는지 확인
  3. java -jar 프로젝트스냅샷.jar

 

그러나 실행하여도 퍼블릭ip주소:8080으로 들어가도 실행되지 않는다. 그래서

aws에서

  1. 보안그룹-보안그룹id클릭-인바운드규칙-편집-규칙추가-
  2. 유형:사용자 지정 tcp, 소스 유형:Anywhere-IPv4, 설명(맘대로) 저장
  • curl
더보기

ex) curl -X GET “http://퍼블릭주소:8080/posts/1”

 

nohup

서버내에서 에플리케이션 실행중에도 다른 작업을 해야한다. 그렇기 때문에 사용할 명령어

nohup java -jar 프로젝트스냅샷.jar

 

파일 로그 확인(실시간)

tail -f nohup.out

현재 띄워져 있는 프로세스 확인(서버)

ps aux

ps aux | grep java (java를 찾아 띄움, grep은 문자열을 찾는 명령어)

ex) ps aux | grep 어플리케이션

ex) nohup을 한 git 창에서 작업을 하고 싶다.

nohup java -jar 프로젝트스냅샷.jar& (뒤에 &)**를 붙이면 실행 프로세스를 백그라운드로 넘김

net stat -lntp (자주쓰는 명령어 꼭 구글링, 열려있는 포트 확인)

nohup & grep netstat

 

고정 아이피 추가

  1. aws 창 좌측에 탄력적 IP 들어가기
  2. 탄력적 IP 주소 할당 클릭-경계그룹 있는거 선택-할당
  3. 이름 설정-작업-탄력적 IP 주소 연결-리소스유형 인스턴스-인스턴스 선택-프라이빗ip주소 선택-재연결 체크(잘모르니 찾아보고 공부하자)
  4. 변경된 고정ip주소로 서버에 들어가보자.
ssh -i ~/.ssh/키이름.pem ec2-user@고정퍼블릭ip주소
  1. ip주소를 ec2에서 빼고 싶다면 작업-탄력적 IP 주소 릴리즈(안된다면 설정확인)
  2. 연결해제한다고해서 돈이 안빠져나가는 것은 아님. 릴리즈를 통해 삭제해야 돈이 안나간다. (무려 1달러가 나간다고한다 ㄷㄷㄷㄷㄷㄷ)

마지막으로 인스턴스 서버 중지 또는 종료하기(종료하면 근데 재실행이 안되서 다시 봐야함)

반응형

댓글