# OCI서버에 프로젝트 클론뜨기
sudo apt install git
git --version
mkdir ~/workspace && cd ~/workspace
가장 먼저, git을 설치해준 뒤 workspace 폴더를 만들어준다.
git clone {github regository https address}
그리고, 생성한 github 레포지토리에 들어가서 https 주소를 복사하고 git clone 명령어를 통해서 로컬에 다운받는다.
cd {프로젝트명}
sudo chown +x gradlew
./gradlew test
gradlew를 실행하기 위해서는 execute 권한을 주어야한다.
gradlew를 통해서 전체 test를 수행해준다.
git pull
앞으로 github의 최신 코드를 다시 로컬로 당겨오려면 git pull 명령어를 통해서 최신 코드를 당겨올 수 있다.
## 배포 스크립트 만들기
서버에서 git pull을 당기고,
gradle을 통해서 프로젝트 빌드와 테스트를 마친 뒤,
프로젝트를 실행하는
3단계를 새로운 코드를 작성할 때 마다 매번 실행해주어야한다.
굉장히 귀찮은 일이므로 배쉬(bash)스크립트를 통해서 이를 자동화 한다.
#!/bin/bash
REPOSITORY=/home/ubuntu/workspace
PROJECT_NAME=springboot-aws-webservice
cd $REPOSITORY/$PROJECT_NAME/
echo "> git pull"
git pull
echo "> 프로젝트 build 시작"
./gradlew build
echo "> 디렉토리 이동"
cd $REPOSITORY
echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.jar)
echo "현재 구동중인 애플리케이션 pid: $CURRNET_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 &
./deploy.sh
이후 위 명령어를 실행하면 자동으로 최신코드로 pull을 당기고, jar을 빌드하고, 배포하게 된다.
tail -100f nohup.out
nohup을 통해서 세션이 끊겨도 프로세스가 종료되지 않도록 했으므로 nohup.out에 로그가 저장된다.
tail 명령어를 통해서 nohup.out의 내용 중 가장 마지막 100줄을 읽어준다.
그러면 ClientRegistrationRepository를 찾을 수 없다는 에러가 발생하면서 애플리케이션 실행에
실패했다는 오류가 발생했다는 것을 알 수 있다.
## 오류 발생 원인과 security파일
ClientRegistrationRepository를 찾을 수 없다는 에러가 발생한 이유는 clientId와 clientSecret이 설정되어 있지 않아서 그렇다.
로컬에서 실행할 때는 application-oauth.yml이 있어서 문제가 없었지만 .gitignore에 해당 파일이 등록되어 있어
github에는 올라가지 않아 이런 오류가 발생하게 된다.
1. 보안 문제로 public한 github에는 올리지 않은 것이니 application-oauth.yml를 따로 복사하여 서버에 저장해두자.
2. 아래와 같이 deploy.sh를 변경해주자.
...
nohup java -jar \
-Dspring.config.location=classpath:/application.yml,$REPOSITORY/yml/springboot-aws-webservice/application-oauth.yml \
$REPOSITORY/$JAR_NAME 2>&1 &
-Dspring.config.location
옵션은 스프링 설정 파일 위치를 지정하게 된다.
classpath:가 붙게 되면 jar안에 있는 resources 디렉토리를 기준으로 경로가 생성되고,
나머지는 외부 절대 경로를 사용해주면 된다.
# EC2에 소셜 로그인하기
## 방화벽(포트) 오픈
앞으로 구축할 서비스에 외부에서 접근하려면 8080포트가 열려있어야한다.
## 도메인 등록 (내도메인 한국)
안타깝게도, AWS와 달리 OCI에서는 도메인을 제공하지 않는다.
학교에서 여러 프로젝트를 할 때 내도메인.한국을 애용했기 때문에(갱신기간이 지나서 갱신해도 무료)
이번에도 내도메인.한국을 사용했다.
이렇게 서버의 IP를 할당해주기만 하면 무료로 쉽게 등록이 가능하다.
## 구글, 네이버 OAuth URI 등록
구글에서는 승인된 리디렉션 URI를 추가하고,
네이버에서는 서비스 URL을 수정하고 네이버 로그인 Callback URL를 하나 더 추가하여 준다.
이후 등록한 도메인에 접속하여 로그인 해보면
정상적으로 소셜로그인이 되는 것을 알 수 있다.