AWS 배포 V1

프로젝트 백그라운드로 실행
- nohub: 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작할 수 있게 해주는 명령어

- foreground로 실행했기 때문에 nohup으로 실행해도 터미널 종료 시 함께 종료됨
- 백그라운드로 실행해야함!

- 8080 실행 중임!
- 터미널 종료하면 로그를 확인할 수 없음
- nohub은 자동으로 로그를 남김
로그 확인 nohup.out


실시간 로그 모니터링
- tail -f nohup.out

로그 파일 위치 변경

표준 출력, 표준 에러
에러 출력(2) - nohup.out


- jar 파일명 오타 → cat nohup.out 출력하면 두 번째 사진과 같은 결과가 나옴
표준 출력(1) - nohup.out


- 에러 출력, 표준 출력 모두 nohup.out에 출력함
- 정상 로그와 에러 로그를 분리해야 함
- nohup java -jar 파일명 1>log.out 2>err.out
- 이유: 배포를 위해서 작성했던 모든 명령어를 스크립드 작성(자동화)하기 위해서
- 리다이렉션 설정을 해줄 때 꺾쇠의 양 옆에는 띄어쓰기 하지 않는 것에 주의!


타임존 변경 및 종료 스크립트 작성


종료 스크립트 작성


- ps -ef | grep *.jar | grep -v grep | awk '{print $2}’
- pgrep -f *.jar

- $변수: 변수의 값을 출력 혹은 실행
- $(명령어): 명령어 결과를 리턴
cron 주기적 실행
-
부하, 에러 (서버 종료될 수 있음)
-
서버가 종료됐다는 로그를 남김 → nohup 2>err.out
-
그러나 자동 재시작이 되지 않음 → 직접 재시작을 해야함
-
자동 재시작을 하는 방법
-
cron : 주기적 실행 명령어
-
crontab -e
- * * * * *: 분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)


-
1 * * * *: 매 시각 1분에 실행
-
1 3 * * *: 매일 새벽 3시 1분
-
1 3,4 * * *: 매일 새벽 3시 1분, 4시 1분
스크립트로 cron 등록
- crontab -l
- 2.crontab_new 파일에 옮김
- crontab crontab_new 실행
- crontab -e에 추가된 내용이 들어감



cron으로 스프링 서버 재실행 하기


SPRING_PID=$(pgrep -f v1-0.0.1-SNAPSHOT.jar)
SPRING_PATH="/home/ubuntu/aws-v1/build/libs/v1-0.0.1-SNAPSHOT.jar"
echo $SPRING_PID
echo $SPRING_PATH
if [ -z "$SPRING_PID" ]; then
echo "스프링이 종료된 상태..."
else
echo "스프링이 시작된 상태..."
fi
- 서버 재실행


-
서버 종료

-
종료 후 재시작 테스트


deploy
-
deploy.sh

-
deploy 스크립트 파일 실행

-
crontab -e

-
잘 등록되어 있음
-
테스트
- 서버 중지

-
pm 5:18

-
pm 5:19


재배포 프로세스 이해
재배포 스크립트 작성 - redeploy.sh
-
기존 서버 중지
-
aws-v1 폴더를 통째로 삭제
- rm -rf /home/ubuntu/aws-v1 (강제 삭제)
-
git clone 다운
- git clone https://github.com/codingspecialist/aws-v1.git
-
gradlew 실행 권한 주기
- cd /home/ubuntu/aws-v1
- chmod u+x gradlew
-
빌드
- ./gradlew build
-
jar 실행
- cd /home/ubuntu/aws-v1/build/libs
- nohup java -jar /home/ubuntu/aws-v1/build/libs/v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out &
-
cron으로 자동 재시작
- deploy.sh
echo "crontab 등록 - spring restart..."
crontab -l > crontab_new
echo "* * * * * /home/ubuntu/cron-restart/spring-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
-
하나의 배포 스크립트를 만들어주면 좋음
- 최초: 최초 배포 프로세스
- 두 번째 이상: 재배포 프로세스
-
해결사항: 2~7번까지 서버가 멈춰있음 즉 재배포를 하게 되면 서버는 멈춤
-
재배포 시에 ec2를 새로 생성해서 거기에 재배포를 하고 (apt update, JDK 설치, crontab 다시 등록)
-
배포가 잘 됐으면 기본 서버를 종료시키고

aws-v1 문제점
- 자동화 스크립트가 없음
- 서버가 멈춤 → 재배포 할 때
- 테스트를 못 하고 바로 배포가 됨

- 사용자 폭증 - 못 버팀
- Github 코드 push만 하면 자동 재배포가 될 수 없을까?
- ec2 서버에 프로그램 설치가 귀찮음
- 엘라스틱 빈 스톡 (jdk 설치되어 있는 서버)
- 로컬 개발할 때 동일한 환경에서 개발할 순 없을까?
![업로드중..]()