서버 PID 찾아서 종료 시키기
기존 프로젝트를 삭제하고 다시 다운받는 로직을 짜보도록 하자
git clone 에 sleep 3s 을 적용하는 이유: git clone이 비동기식으로 작동할 경우 다운로드를 완료하지 않고 다음 순서인 빌드로 넘어가 질 수 있기 때문이다.
만들어진 jar 파일을 스크립트로 실행해보자! ( yml 설정때문에 prod로 설정), (log.out,err.out은 프로젝트 파일 삭제할때 사라지면 안되니까 home에 만들기)
deploy.sh에 추가
참고)파일 생성 후에 chmod u+x check-and-restart.sh 꼭 해주기!
test 없이 jar 빌드하고싶을때
tar 압축
압축한 파일 옮기기
SFTP 모드로 접속
드래그 해서 옮기기
엘라스틱 빈스톡
Elastic Beanstalk 만들기
이렇게 설정하고 만들어 주면
몇분 뒤에..
Elastic beanstalk이 만들어졌고 자동으로 인스턴스도 생성 되었다.
IP 주소가 서로 다르다!! 왜그럴 까?
다음 순서와 같이 동작하기 때문이다
1. 클라이언트가 로드밸런서 80포트로 요청을 보냄
2. 로드밸런서가 EC2의 80포트로 요청
3. NGinX(프록시) 서버가 응답
4. 프록시 서버가 내부적으로 5000번 포트를 호출
5. 샘플코드가 동작
→외부 IP 요청을 거부 (클라이언트가 다이렉트로 서버에 요청 시 거부한다)
그럼 어떻게 요청해야 되는데?
→ 같은 보안 그룹으로 묶인 친구의 요청만 받는다.
같은 것을 확인 할 수 있다.. 따라서 NGinx 서버에는 로드 밸런서만 접근 가능하다!
→ jar 파일이 생성된 것을 확인 할 수 있다.
이렇게 배포를 하게 되면 5000포트로 연결되는 Java 서버를 배포하는 것이다.
근데 이게 나와버리네 띠용..
근데 이유가 있었다. 프로젝트에 기본 도메인 주소/ ← 요기 슬래쉬 주소가 없어서 그렇다고 한다.
참고) build 시에 기존에 남아있는게 있다면 ./gradlew clean build 해주면 된다.
test 코드 및 / 주소를 만들어준 뒤에 다시 build 후에 배포를 진행했더니 배포가 성공하였다!
엘라스틱 빈스톡을 만들었는데 자꾸만 인스턴스가 프리티어 t2.micro 가 아닌 t3.micro 로 만들어졌다. 인스턴스를 중지하고 유형을 바꾸려 해봤지만 새로운 t3.micro 인스턴스가 만들어지고 중지시켰던 인스턴스가 종료되었다…. 돈 나가는건 어떻게든 막아야한다ㅋㅋ..
알고보니 엘라스틱 빈스톡의 Auto scailing 이 설정되어있었는데 여기에 인스턴스 유형이 t3.micro로 설정 되어있었기 때문이고. EC2를 중지 시켜놓으면 현재 실행중인 EC2 가 없기때문에 오토스케일링으로 인해 t3.micro 가 자동으로 생성되었던 것이다!!! 아무튼 AutoScailing 설정을 t2.micro 프리티어로 바꾸고 해결 완료!
구성 → 보안 → EC2 키 페어 넣어주기
환경 적용 된 후에 Mobaxterm 연결 ( 주의! Specify username = ec2.user 이다)
nginx 서버는 80 포트로 돈다.
nginx 한테 요청하면 5000포트로 요청 한다.
이제 RDS랑 CI/CD만 마무리 하면 된다 파이팅!