배포하기 3에서 이어짐
deploy.sh 파일을 열어서 8번 작성
# 8. start jar
nohup java -jar Dspring.profiles.active=prod ${JAR_PATH} 1>${HOME}/log.out 2>${HOME}/err.out &
echo "8. start server complete"
여기까지하면 서버 실행하는것까지 완료가 되며 확인하려면
netstat -nlpt 로 확인하면된다.
(만일에 netstat가 없으면 apt install net-tools 로 설치)
--------크론등록--------
# 9. cron registration
touch crontab_new
echo "* * * * * ${HOME}/check-and-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
echo "9. cron registration complete"
1분마다 check-and-restart.sh를 실행
1>>crontab_new >>의 의미는 덮어씌운다는 의미
이후 check-and-restart.sh 파일을 생성하자
vi check-and-restart.sh
파일 생성 후 아래와 같이 입력 후 저장한다.
#!/bin/bash
source ./var.sh
if [ -z "$PROJECT_PID" ]; then
nohup java -jar -Dspring.profiles.active=prod ${JAR_PATH} 1>${HOME}/log.out 2>{HOME}/err.out &
fi
[ -z "$PROJECT_PID" ] -> PROJECT_PID의 길이가 0일경우 실행
이후 check-and-restart.sh 파일에도 실행권한을 줘야함
chmod u+x check-and-restart.sh
그리고 ./deploy.sh
하면 서비스가 죽어도 크론이 다시 재시작시키는걸 확인할 수 있다.
이제 check-and-restart.sh, deploy.sh, var.sh 파일만 있으면 배포/재배포/크론까지 가능
**만일 spring프로젝트를 빌드할떄 test코드 없이 해야할경우 (보통은 있어야함 하나 생성 추천)
./gradlew build -x test
라고 작성하면된다.
deploy.sh 완성본
#!/bin/bash
# 1. env variable
source ./var.sh
echo "1. env variable setting complete"
# 2. cron delete
touch crontab_delete
crontab crontab_delete
rm crontab_delete
echo "2. crontab delete compleate"
# 3. server checking
if [ -n "${PROJECT_PID}" ]; then
# re deploy
kill -9 $PROJECT_PID
echo "3. project kill complete"
else
# first deploy
# 3-1 apt update
sudo apt-get -y update 1>/dev/null
# 3-2 jdk install
sudo apt-get -y install openjdk-11-jdk 1>/dev/null
echo "3-2 jdk install complete"
# 3-3 timezone
sudo timedatectl set-timezone Asia/Seoul
echo "3-3. timezone setting complete"
fi
# 4. project folder delete
rm -rf ${HOME}/${PROJECT_NAME}
echo "4. project folder delete complete"
# 5. git clone
git clone https://github.com/${GITHUB_ID}/${PROJECT_NAME}.git
sleep 3s
echo "5. git clone complete"
# 6. gradlew +x
chmod u+x ${HOME}/${PROJECT_NAME}/gradlew
echo "6. gradlew chmod complete"
# 7. build
cd ${HOME}/${PROJECT_NAME}
./gradlew build
echo "7. gradlew build complete"
# 8. start jar
nohup java -jar -Dspring.profiles.active=prod ${JAR_PATH} 1>${HOME}/log.out 2>${HOME}/err.out &
echo "8. start server complete"
# 9. cron registration
touch crontab_new
echo "* * * * * ${HOME}/check-and-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
echo "9. cron registration complete"
var.sh 완성본
#!/bin/bash
GITHUB_ID="codingspecialist"
PROJECT_NAME="aws-v2-last"
PROJECT_VERSION="0.0.2"
PROJECT_PID="$(pgrep -f ${PROJECT_NAME}-${PROJECT_VERSION}.jar)"
JAR_PATH="${HOME}/${PROJECT_NAME}/build/libs/${PROJECT_NAME}-${PROJECT_VERSION}.jar"
export GITHUB_ID
export PROJECT_NAME
export PROJECT_VERSION
export PROJECT_PID
export JAR_PATH
AWS 배포하기 2 (L3) 엘라스틱빈스톡(ELB) - ssh접속 (0) | 2022.12.13 |
---|---|
AWS 배포하기 1 (L3) 엘라스틱빈스톡(ELB) (0) | 2022.12.13 |
AWS 배포하기 3 (L2) 서버종료 및 프로그램 설치 (0) | 2022.11.16 |
AWS 배포하기 2 (L2) 재배포를 고려한 cron종료 (0) | 2022.11.16 |
AWS 배포하기 1 (L2) 환경변수와 bashrc (0) | 2022.11.16 |