EC2에 프로젝트 Clone 받기
먼저 EC2에 Git 설치
sudo yum install git
설치가 완료되면 설치상태를 확인
git --version
깃이 성공적으로 설치되면, clone할 프로젝트 디렉토리를 생성한다.
Git repository에서 HTTPS주소를 복사한다.
복사후 EC2 서버에 git clone을 진행
git clone 복사한 주소
책과 다른점으로 git 에서 Password를 토큰 형식으로 사용하도록 변경되었기 때문에 Password에 토큰 값을 넣으면 된다.
Username for 'https://github.com': seungsoo
Password for 'https://seungsoo@github.com':
git clone이 끝난 후 repository이름의 디렉토리가 생성되고, 하위에 파일이 복사되어있다.
그리고 코드들이 잘 수행되는지 테스트로 검증한다.
./gradlew test
테스트 코드가 무한로딩 발생으로 링크를 참고하였다.
배포 스크립트 만들기
sh 파일생성
vim ~/app/step1/deploy.sh
deploy.sh 작성
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=SpringBoot_Aws_Study
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)
echo "현재 구동중인 애플리케이션 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 &
생성한 스크립트에 실행 권한 추가
chmod +x ./deploy.sh
스크립트 실행
./deploy.sh
실행 후 로그확인
vim nohup.out
로그내에
No qualifying bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' available
다음과 같은 에러가 발생한다.
외부 Securiry 파일 등록하기
ClientRegistrationRepository를 생성하려면 ClientId와 ClientSecret이 필수이다.
Local에서 실행시 application-oauth.properties가 있어 문제되지 않았지만, 깃허브에는 gitignore로 제외시킨상태이다.
공개된 저장소에 ClientId와 ClientSecret를 올릴 수 없으니, 서버에서 직접 이 설정들을 가지고 있게한다.
properties 파일생성
vim ~/app/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 &
배포후 스크립트 실행시
'no main manifest attribute in' 라는 에러가 발생하였다.
- 에러 설명 : jar파일에서 처음 호출할 Main 메소드를 찾지 못했다.
해결방법은 링크를 참고하였다.