앞서 우리는 ec2 인스턴스를 만들어 보고 ssh를 이용하여 서버에 접근하는 방법까지 익혔습니다.
이번 포스트에서는 프로젝트를 해당 서버를 통해서 배포하는 과정을 알아보겠습니다.
해당 과정은 CI/CD가 아님을 미리 알려드립니다.
1️⃣설정
먼저 우리가 생성했던 서버에서 먼저 설정해야 될 사항들을 설정하겠습니다.
-자바11 설치
스프링 프로젝트를 띄우기 위해서 우리는 자바11을 설치 하겠습니다.
설치하기 앞서 yum list java* 로 java 설치 가능 리스트 검색을 해줍니다.
java-11-amazon-corretto.x86_64 가 ec2에서 설치할 수 있는 java11 jdk임을 확인할수 있습니다.
sudo yum install java-11-amazon-corretto.x86_64 로 설치를 해줍니다. 자바를 설치해줍니다.
java -version을 통해서 정상적으로 설치 되었는지 확인해주세요
-타임존 변경
date 명령을 치면 현재 한국 시간과 동떨어져있음을 확인할수 있습니다.
sudo rm /etc/localtime
sudo ln -s /usr /share/zoneinfo/Asia/Seoul /etc/localtime
두명령어를 통해서 기존의 시간을 지우고 한국 시간으로 변경해줍니다.
date 명령으로 잘 변경 되어있음을 확인할 수 있습니다.
-Hostname 변경
ip만으로 어떤 서비스의 서버인지 확인하기 위해서 Hostname을 변경하겠습니다.
sudo vi /etc/hostname 입력 후 원하는 hostname으로 수정해줍니다.
cat /etc/hostname 입력하면 변경한 hostname이 변경된 것을 확인할 수 있습니다.
hostname 명령어를 통해 현재 설정된 hostname을 확인합니다.
hostnamectl set-hostname <변경할 hostname>을 통하여 hostname을 변경해 줍니다.
putty를 종료하고 시작하면 hostname이 잘 변경된 것을 확인할수 있습니다.
2️⃣배포
-ec2에 프로젝트 Clone받기
먼저 배포하기 전에 프로젝트를 깃을 통해 clone해줍니다.
그렇기 위해서 sudo yum install git 을 통해서 git 을 설치합니다.
mkdir ~/app && mkdir ~/app/webservice를 이용하여 git clone으로 프로젝트를 저장할 디렉토리를 만듭니다.
cd ~/app/webservice/ 를 통해서 생성 디렉토리로 이동합니다.
git clone <깃허브 repository https 주소> 를 입력하여 프로젝트를 clone해주세요.
cd 프로젝트명
ll
해당 명령어 들로 잘 복사되었는지 확인합니다.
./gradlew test 로 빌드 테스트를 해줍니다. permission denied가 뜰수 있는데 그럴땐
chmod + x ./gradlew 을 이용해서 실행 권한을 주고 다시 해보세요.
-배포 스크립트 만들기
매번 배포할 때마다 개발자가 하나하나 이런 명령어를 통해 배포를 진행하는 것은 큰 불편함을 야기합니다.
따라서 쉘 스크립트를 통해서 스크립트만 실행하여 앞의 과정들을 진행해보겠습니다.
vim ~/app/webservice/deploy.sh 로 배포를 위한 쉘 스크립트를 먼저 만들어보겠습니다.
#!/bin/bash
REPOSITORY=/home/ec2-user/app/webservice
PROJECT_NAME=dockertest
cd $REPOSITORY/$PROJECT_NAME/
echo "> Git Pull"
git pull
echo "> 프로젝트 build 시작"
./gradlew build
echo "> webservice 디렉토리로 이동"
cd $REPOSITORY
echo "> build파일 복사"
cp $REPOSITORY/$PROJECT_NAME//build/libs/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep '.*[.]jar' | grep -v plain | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
이제 생성한 스크립트에 실행 권한을 추가합니다.
chmod +x ./deploy.sh
./deploy.sh 로 스크립트를 실행해주세요.
vim nohup.out 을 사용해서 nohup.out파일을 열어서 로그를 확인해 봅니다.
nohup.out은 실행되는 애플리케이션에서 출력되는 모든 내용을 가지고 있습니다.
인스턴스의 퍼블릭 IPv4 DNS로 외부에서 접속하여 성공적으로 배포됨을 확인하였습니다.
👀참조
해당 포스팅은 이동욱님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스" 서적을 인용하였습니다.
스프링 부트와 AWS로 혼자 구현하는 웹 서비스
'개발 > DevOps' 카테고리의 다른 글
AWS - 서버 환경 구축하기(feat. window, putty...) (0) | 2022.08.24 |
---|---|
Docker - 도커에 Spring Boot(Gradle) 구축하기 (0) | 2022.08.13 |