Skip to content

Instantly share code, notes, and snippets.

@sigridjineth
Last active April 23, 2020 02:46
Show Gist options
  • Save sigridjineth/249ca7052659502868faab0dab1819d8 to your computer and use it in GitHub Desktop.
Save sigridjineth/249ca7052659502868faab0dab1819d8 to your computer and use it in GitHub Desktop.
API AWS EC2 Instance에 수동 배포하기

API AWS EC2 인스턴스에 수동 배포하기

문서의 목적

  • AWS EC2 인스턴스를 사용하여 API를 수동 배포하는 방법에 대해 학습한다.
  • Ubuntu 18.04 기준이며, Amazon Linux일 경우에는 패키지를 관리할 경우 yum 명령어를 사용하면 된다.

0단계: ssh를 통해 EC2 인스턴스에 접속한다.

  • 다음의 명령어를 통해 접속한다. pem 키 파일이 준비되어 있어야 한다.
  • 참고로 pem 파일에 따옴표로 표기되어 있지 않으면 인식을 못하여 패스워드를 물어본다.
  • 또는 sudo chmod를 통해 권한을 부여하지 않으면 키를 인식하지 못한다는 점에 유의하자.
ssh -i "당신의 pem 키 파일 주소" 인스턴스 URL

1단계: Git 저장소 준비

  • 다음의 명령어를 실행하여 리눅스에 Git을 설치한다.
$ sudo apt-get update
$ sudo apt-get install git
  • 적절한 곳에 Git 저장소를 pull 하도록 한다.
$ git clone --single-branch --branch <브랜치 이름> <브랜치 저장소 URL>
예: git clone --single-branch --branch be/test/mockapi https://github.com/codesquad-member-2020/dust-4.git

2단계: Java 설치하기

  • 다음의 명령어를 통해 자바 버전을 확인한다.
$ java -version
  • 다음의 명령어를 통해 자바 8 버전을 설치한다.
sudo apt-get install openjdk-8-jdk
  • 설치가 완료되었으면 인스턴스의 자바 버전을 8로 변경한다.
$ sudo /usr/sbin/alternatives --config java
그리고 난 후 2를 엔터한다.

3단계: ./gradlew 이용하여 빌드하기

  • git 프로젝트 폴더로 이동한다. 해당 폴더에는 src 폴더와 gradlew 파일이 존재하여야 한다.
  • 다음의 명령어를 통해 gradlew에 권한을 부여한다. 참고로 gradlew는 gradle이 설치되지 않아도 프로젝트를 실행할 수 있도록 해주는 gradle wrapper라고 한다.
$ sudo chmod 777 ./gradlew
  • 다음의 명령어를 통해 gradlew 빌드를 실행한다. 참고로 sudo ./gradlew test를 입력하면 테스트를 실시할 수 있다.
  • 다음으로 빌드를 실행하면 테스트가 자동으로 실행되어 빌드 시간이 오래 걸릴 것이다. 이 때에는 sudo ./gradlew build -x test 명령어를 이용한다.
$ sudo ./gradlew build
  • 빌드가 되고 나면 {프로젝트}/build/libs 안에 .jar 파일이 생기게 된다. 위의 경로로 아래의 명령어를 통해서 실행시킬 수 있다.
  • nohup 명령어는 터미널이 꺼지더라도 백그라운드로 톰캣이 실행될 수 있도록 해주는 명령어다.
  • nohup 없이 그냥 java -jar로 실행할 경우 터미널로 실행되지만, 터미널이 꺼지면 톰캣 서버도 멈추는 것 같다..
$ nohup java -jar 해당 .jar파일 &
  • 아마 nohup: ignoring input and appending output to ‘/home/ec2-user/nohup.out 라고 뜨고 아무것도 안나올 텐데 잠깐 기다려준 후 인스턴스에 접속하면 정상적으로 처리됨을 알 수 있다. 꼭 8080 포트를 붙여서 접속하도록 하자.
  • 만약에 그래도 안될 경우 nohup.out에 관련 오류가 기록되어 있을 것이다. 다음의 명령어를 통해 파일에 접근해서 오류를 확인해본다.
vim nohup.out

4단계: 재배포를 하고 싶을 경우 8080 포트를 kill하자

  • 가끔 git pull해서 프로젝트의 수정사항을 가져온 후 다시 빌드하고자 하는 경우가 있을 것이다.
  • 이 때에는 아래의 에러를 심심찮게 만날 수 있다.
***************************
APPLICATION FAILED TO START
***************************

Description:

Web server failed to start. Port 8080 was already in use.

Action:

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.
  • 8080 포트에서 동작하는 프로세스를 죽이라고 하니까 다음을 진행한다.
  • 다음의 명령어를 통해 8080 포트에서 동작하는 프로세스를 확인한다.
lsof -i:8080
  • 다음의 명령어를 통해 8080 포트에서 동작하는 프로세스를 죽인다. 리스트가 보이지 않을 때까지 반복한다.
kill $(lsof -t -i:8080)
  • 다음의 명령어를 사용하면 더 확실하게(?) 죽일 수 있다고 한다.
kill -9 $(lsof -t -i:8080)
@honux77
Copy link

honux77 commented Mar 31, 2020

당연히 기존 자바 프로세스를 먼저 죽여야 하는데요. jps 등의 명령을 활용하는 것도 좋아요.

@honux77
Copy link

honux77 commented Mar 31, 2020

hup과 &는 둘 중 하나만 써도 될 겁니다. 확인해 보세요.

@sigridjineth
Copy link
Author

sigridjineth commented Mar 31, 2020

Amazon Linux를 사용하여 배포했는데 이 때 설치 명령어는 yum을 사용했습니다.
공유를 위해 우분투 전용 설치 명령어를 찾아서 이를 사용해보고 올렸습니다.

@sigridjineth
Copy link
Author

특정 브랜치만 클론하려면 다음의 명령어를 활용하도록 한다.

git clone -b mybranch --single-branch git://sub.domain.com/repo.git

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment