EC2 Server 배포

iseon_u·2023년 3월 22일
0

Book

목록 보기
14/16
post-thumbnail

CH08 - EC2 Server 배포


EC2에 프로젝트 Clone

  • EC2 에 git 설치

    sudo yum install git
    git —version

  • 프로젝트 저장 디렉토리 생성

    mkdir ~/app && mkdir ~/app/step1
    cd ~/app/step1

  • git clone

    git clone 깃주소

  • 테스트 검증

    ./gradlew test

  • 실행 권한

    chmod +x ./gradlew

배포 스크립트 만들기

  • deploy.sh 파일 생성

    vim ~/app/step1/deploy.sh

  • 배포 스크립트
#!/bin/bash

#1
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=pgrrr-springboot-webservice

#2
cd $REPOSITORY/$PROJECT_NAME/

#3
echo "> Git Pull"

git pull

echo "> 프로젝트 Build 시작"

#4
./gradlew build

echo "> step1 디렉토리로 이동"

cd $REPOSITORY

echo "> Build 파일 복사"

#5
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/

echo "> 현재 구동중인 애플리케이션 pid 확인"

#6
CURRENT_PID=${pgrep -f ${PROJECT_NAME}.*.jar)

echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"

#7
if [ -z "$CURRENT_PID" ]; then
		echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
		echo ">kill -15 $CURRENT_PID"
		kill -15 $CURRENT_PID
		sleep 5
fi

echo "> 새 애플리케이션 배포"

#8
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)

echo "> JAR Name: $JAR_NAME"

#9
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
  1. REPOSITORY=/home/ec2-user/app/step1
    • 자주 사용하는 값은 변수로 저장
    • 쉘은 타입 없이 변수 선언
    • $ 변수명으로 변수 사용
  2. ch REPOSITORY/REPOSITORY/PROJECT_NAME/
    • git clone 받았던 디렉토리로 이동
  3. git pull
    • 디렉토리 이동 후, main 브랜치의 최신화
  4. ./gradlew build
    • 프로젝트 내부의 gradlew 로 build를 수행
  5. cp ./build/libs/*.jar $REPOSIROTY/
    • build 의 결과물인 jar 파일을 복사
    • jar 파일 모아둔 위치로 복사
  6. CURRENT_PID=$(pgrep -f springboot-webservice)
    • 기존에 수행 중이던 스프링 부트 애플리케이션 종료
    • pgrep 은 process id 만 추출하는 명령어
    • -f 옵션은 프로세스 이름으로 찾는다
  7. if ~ else ~ fi
    • 현재 구동 중인 프로세스의 여부를 판단해 기능 수행
    • process id 값이 있으면 해당 프로세스 종료
  8. JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
    • 새로 실행할 jar 파일명 찾기
    • tail -n 으로 최신 파일을 변수에 저장
  9. nohup java -jar REPOSITORY/REPOSITORY/JAR_NAME 2>&1 &
    • jar 파일만으로 웹 애플리케이션 서버 실행 가능
    • 터미널을 종료해도 애플리케이션은 계속 구동될 수 있도록 nohup 명령어 사용
  • 배포 스크립트에 실행 권한 추가

    chmod +x ./deploy.sh

  • 스크립트 실행

    ./deploy.sh

  • 애플리케이션 로그 확인

    vim nohup.out

외부 Security 파일 등록

  • application-oauth.properties
    • 깃허브에 없는 파일
    • 서버에 직접 설정 파일 저장
  • properties 파일 생성

    vim /home/ec2-user/app/application-oauth.properties

    • application-oauth.properties 내용을 추가하고 저장
  • application-oauth.properties 사용하도록 수정
    nohup java -jar \
    		-Dspring.config.location=classpath:/application.properties,/home/ec2-user/app/application-oauth.properties \
    		$REPOSITORY/$JAR_NAME 2>&1 &
profile
🧑🏻‍💻 Hello World!

0개의 댓글