본문 바로가기
AWS

EC2 서버에 웹 프로젝트 배포

by 행복 개발자 2021. 10. 2.
  1. 배포 단계
    • git clone 혹은 git pull을 통해 새 버전의 프로젝트를 받음
    • Gradle이나 Maven을 통해 프로젝트 빌드
    • EC2 서버에서 해당 프로젝트 실행 및 재실행
  2. 배포 스크립트 만들기 - 쉘 스크립트로 작성해 스크립트 실행만으로 배포
    1. 주의 : application-oauth.properties 또는 application-real-db.properties 파일 등 외부에 노출될 파일은 전달 public GIT에 push 하지 말고 ec2서버에 직접 넣어야 한다.

 

더보기

배포 쉘 스크립트 

# 자주 사용하는 값 변수에 저장
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=springboot-webservice

# git clone 받은 위치로 이동
cd $REPOSITORY/$PROJECT_NAME/

# master 브랜치의 최신 내용 받기
echo "> Git Pull"
git pull

# build 수행
echo "> project build start"
./gradlew build

echo "> directory로 이동"
cd $REPOSITORY

# build의 결과물 (jar 파일) 특정 위치로 복사
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 | tail -n 1)

echo "> Jar Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &

# 스프링 설정 파일 위치 지정
nohup java -jar \
    -Dspring.config.location=classpath:/application.properties,classpath:/application-real.properties,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties \
    -Dspring.profiles.active=real \
    $JAR_NAME > $REPOSITORY/nohup.out 2>&1 &