지난 포스팅에서 github에 올린 웹 애플리케이션을 aws 인스턴스에 배포하는 방법을 알아보았다.
https://kth990303.tistory.com/329
이번 포스팅에서는 터미널에서 특정 sh 파일을 실행하기만 하면 위 과정이 자동으로 이루어지는 작업을 기록해보려 한다.
aws ec2 인스턴스는 이미 생성이 돼있다는 가정 하에 포스팅을 작성한다.
1. 셸 스크립트 (deploy.sh) 작성
우아한테크코스의 백엔드 크루 조조그린이 기가 막히게 예쁘게 작성해준 스크립트를 따로 수정해서 정리해본 것이다.
echo =========================================
echo 기존 repository 디렉토리 제거
echo =========================================
rm -r -f repository
echo =========================================
echo 새로운 repository 디렉토리 생성 후 이동
echo =========================================
mkdir repository
cd repository
echo =========================================
echo 배포하고자 하는 프로젝트를 git 에서 clone
echo =========================================
git clone -b {브랜치명} --single-branch {레포지토리 주소.git}
echo =========================================
echo bootJar 생성
echo =========================================
cd {레포지토리명}
./gradlew bootJar
echo =========================================
echo 기존 서버 프로세스 종료
echo =========================================
sudo kill -9 $(sudo lsof -t -i:{실행 프로세스 port 번호})
echo =========================================
echo 서버 실행
echo =========================================
cd build/libs
chmod 755 {배포 jar 파일}
nohup java -jar {배포 jar 파일} &
echo =========================================
echo 디렉토리 위치 초기화
echo =========================================
cd /home/ubuntu
echo =========================================
echo 빌드 완료
echo =========================================
이 스크립트를 실행시키면 깃허브에서 /home/ubuntu 위치에서 웹 애플리케이션을 클론하여 빌드한다.
만약 해당 Port에서 실행중인 프로세스가 있으면 그 프로세스를 종료시키고 서버를 실행시키는 스크립트이다.
해당 명령어 내용이 궁금하다면 맨 위에 올린 포스팅을 참고하자.
2. 해당 셸 스크립트 인스턴스에 등록하기
해당 셸 스크립트가 존재하는 디렉토리로 이동한 후에, 터미널에 아래 명령어를 입력해주자.
scp -i {키페어 이름}.pem {셸스크립트명} ubuntu@{ec2-ip}:/home/ubuntu
키페어 권한으로 위 셸 스크립트를 aws ec2 인스턴스에 보내주자. 나는 위 셸 스크립트명을 deploy.sh로 작성했기 때문에 scp -i key-kay.pem deploy.sh ubuntu@{ec2-ip}:/home/ubuntu 로 작성해주었다. 뒤에 :/home/ubuntu 를 붙여주는 것을 명심하자.
참고로 과거에 이미 이 명령어를 입력했었는데, 기억이 안나고 키워드만 기억난다면 아래 명령어를 입력해주면 입력 이력들이 나온다.
history | grep {키워드}
3. aws 인스턴스에 접근
인텔리제이의 start SSH 또는 터미널에서 aws 인스턴스에 접근해주자.
ssh -i {키페어} ubuntu@{ec2-ip}
4. 셸 스크립트 실행
이제 셸 스크립트를 실행시켜주자!
./deploy.sh
다행히 성공적으로 빌드가 완료됐다. 애플리케이션 서버 코드에 문제가 없다면 제대로 작동이 될 것이다.
swagger이 작동되는 것을 확인하여 서버가 정상적으로 배포됨을 확인할 수 있었다!
만약 의도대로 돌아가지 않는다면 아래 명령어를 통해 nohup.out을 확인하여 어떤 에러가 발생했는지 확인해보자.
cd repository/build/libs // nohup 파일 존재하는 디렉토리 이동
cat nohup.out // nohup 결과 조회
위 명령어를 입력하면 실행하면서 어디에 예외가 발생했는지 알 수 있다.
만약 repository에 build/libs 디렉토리가 존재하지 않는다면 재실행해보도록 하자.
재실행해도 안된다면 셸 스크립트 명령어를 본인 환경에 맞게 잘 수정했는지 확인해보아야 한다.
웹 인스턴스와 db 인스턴스가 분리돼있을 경우, 위 방법은 로컬의 h2 테스트 db를 사용하여 진행될 것이다.
다음 포스팅에서는 db까지 연동하여 배포하는 방법을 기록해보도록 하겠다!
'Infra > Aws' 카테고리의 다른 글
[AWS] AWS Educate에서 더 이상 무료 프리티어 기능을 제공해주지 않는 것 같다 (0) | 2022.08.08 |
---|---|
[AWS] Mysql + 웹 애플리케이션 AWS에 자동 배포하기 (0) | 2022.06.08 |
[AWS] 인텔리제이에서 AWS 인스턴스에 접속하기 (0) | 2022.06.03 |
[ERROR][AWS] Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-200] 해결 (2) | 2022.06.03 |
[AWS] AWS EC2를 이용하여 스프링 웹 애플리케이션 배포해보기 (2) | 2022.06.01 |