Spring boot 프로젝트 sever 배포 스크립트 만들기!

zooju·2022년 10월 1일
1
post-thumbnail

기존의 방법

기존에는 git을 아예 사용하지 않고 배포를 진행했다.

  1. 프로젝트 수정

  2. git commit(just 기록용)

  3. 수정된 프로젝트 빌드

    ./gradlew clean build
  4. scp로 ec2 서버에 Jar 파일 전송

    scp -i [서버 pem] [프로젝트 Jar 파일 경로] [파일을 저장할 ec2 경로]
  5. ec2 서버 접속

  6. 기존 실행되던 파일 다 종료 및 삭제

    kill $(lsof -t -i:8080)
    rm daoTool-0.0.1-SNAPSHOT.jar & rm nohup.out
  7. 새로 들어온 파일 실행

    nohup java -jar daoTool-0.0.1-SNAPSHOT.jar & > /dev/null

겪었던 불편함

  • 기존의 방법을 사용한 이유
    • git을 사용하면 gitignore를 해둔 파일이 올라가지 않기 때문에, 로컬과 서버가 파일이 달라 실행 오류가 날 수 있다고 생각했기 때문
    • 네트워크 수업시간에 scp 명령어를 배운 뒤, Jar 파일을 직접 전송하는 것이 용량도 적게 차지하고 편할것이라고 생각했기 때문
  • 방법을 바꾼 이유
    • 내용이 변경될 때 마다 scp, kill, rm 을 실행해주는데 오타등의 사소한 이유로 다시 배포를 하기 위해 똑같은 명령어를 계속 반복해서 쳐야할 때가 꽤 많았다.
    • 프로젝트를 진행할 수록 build, scp 모두 소요시간이 커졌다.

새로 변경한 방법

  • 반복해서 작성하는 shell 명령어를 script를 통해서 하나의 명령어로 실행할 수 있도록 수정하자!
  • git을 활용하자!
  1. local에서 최신 프로젝트를 git push 해주기

  2. 서버에 폴더 생성해주기

    ec2 환경에서 app 폴더를 생성해주었다.

  3. application.yml → application.properties 로 바꾸기

Yaml Converter - MAGEDDO

  1. git ignore한 파일 생성해주기

    application.yml이 가장 대표적으로 없는 파일이었기 때문에 생성해줬다.

  1. git pull 해주기!

  2. gradlew 파일에 권한 부여해주기

    chmod +x ./gradlew
  1. deploy.sh 스크립트 생성해주기
    #!/bin/bash
    REPOSITORY=/home/ec2-user/app/step1
    PROJECT_NAME=dao-tool-server
    cd $REPOSITORY/$PROJECT_NAME/
    echo> Git Pull”
    git pull
    echo> 프로젝트 Build 시작”
    ./gradlew build
    echo> step1 디렉토리로 이동”
    cd $REPOSITORY
    echo> Build 파일 복사”
    cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
    echo> 현재 구동중인 애플리케이션 pid 확인”
    # CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
    CURRENT_PID=$(lsof -i tcp:8080 | awk ‘NR!=1 {print$2})
    echo “현재 구동중인 애플리케이션pid: $CURRENT_PIDif [ -z “$CURRENT_PID]; then
        echo> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다.”
    else
        echo> kill -9 $CURRENT_PIDkill -9 $CURRENT_PID
        sleep 5
    fi
    echo> 새 애플리케이션 배포”
    #JAR_NAME=$(ls -tr $REPOSITORY/ |grep jar|tail -n 1)
    JAR_NAME=$(ls -tr $REPOSITORY/*.jar | tail -n 1)
    echo> JAR Name: $JAR_NAMEnohup java -jar \
        -Dspring.config.location=classpath:/home/ec2-user/app/application.properties \
        $JAR_NAME 2>&1 &

  1. 권한 부여해주기

    chmod +x deploy.sh
  1. 배포 실행하기

    ./deploy.sh
  1. 잘 배포 되었는지 확인하기
    생성된 nohub.out을 vim으로 확인하면 success 여부를 알 수 있다!!

이렇게 하면 git push를 했을 때 마다 위의 명령어만 쳐주면 그 외는 자동으로 실행해준다!

앞으로 로컬에서 git push를 하면 서버를 건들 필요도 없이 바로 해주는 travis ci도 적용해보고 싶다.


Reference

[책] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

profile
이것 저것 새로운 분야에 관심이 많은 서버 개발자

0개의 댓글