본문 바로가기
AWS

[AWS] 배포

by moonstal 2022. 5. 18.

흐름

  1. 로컬컴퓨터 -> 운영컴퓨터 옮기기

    1. 스프링부트 프로젝트
    2. 깃허브 업로드
    3. 환경세팅
    4. 실행

EC2서버 생성 및 고정IP 설정(엘라스틱 ip)

탄력적 ip - ec2연결 하나 무료제공
탄력적 ip 생성 후 사용 안하면 비용발생

배포

자바설치(jdk,jre)
github 다운
gradlew 실행권한주기
gradlew로 프로젝트 jar파일로 변경
java로 jar 실행(x) / nohup으로 실행(o)
시간변경

저장소 동기화
sudo apt update

저장소 보기
sudo apt-cache search jdk | grep openjdk-11

자바설치(jdk)
sudo apt install openjdk-11-jdk

깃 확인
git --version

github 다운
git clone https://github.com/프로젝트

이동
cd ~/프로젝트명

gradlew 실행권한주기
chmod u+x gradlew

현재폴더 gradlew build
./gradlew build

자바확인
java --version

cd build
ls
cd libs
ls
실행파일 만들어져있음 v1-0.0.1-SNAPSHOT.jar

실행
java -jar v1-0.0.1-SNAPSHOT.jar
java -jar \*.jar(이것도 가능)

nohup으로 백그라운드 실행

build.gradle에 
jar{
    enabled=false
}
plain.jar 생기지 않게 해줌

nohup: 리눅스에서 프로세스 실행한 터미널의 세션연결 끊겨도 지속적으로 동작하게 해줌/ 자동으로 로그남김

실행 백그라운드로
nohup java -jar *.jar &

net-tools설치
sudo apt install net-tools

8080확인
netstat -nlpt

cd libs폴더에 생성된 nohup파일 로그 보기
cat nohup.out

모니터링
tail -f nohup.out

로그파일 변경

프로세스 아이디 찾기
ps -ef

강제 종료
kill -9 18624

표준 출력 변경
nohup java -jar *.jar > mylog.out &

확인
tail -f mylog.out

표준출력, 에러 로그 파일 분리

파일 삭제
rm mylog.out

잘못적었을 경우
nohup java -jar v1-0.0.1-SNAPSHOT~1.jar &

파일 보기
cat nohup.out

에러출력 2 - nohup.out
표준출력 1 - nohup.out

정상실행
nohup java -jar v1-0.0.1-SNAPSHOT.jar &

출력 변경: 모든 명령어 스크립트작성 자동화 출력 분리해서 볼것임
nohup java -jar 파일명 1>log.out 2>err.out

잘못적었을 경우
nohup java -jar v1-0.0.1-SNAPSHOT~1.jar 1>log.out 2>err.out

에러로그 확인
cat err.out

정상실행
nohup java -jar v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out &

타임존 변경

시간 확인
timedatectl

시간 리스트
timedatectl list-timezones

서울찾아
timedatectl list-timezones | grep Seoul

변경
sudo timedatectl set-timezone Asia/Seoul

결과
Time zone: Asia/Seoul (KST, +0900)

종료 스크립트

이동
cd ~/aws-v1/build/libs

echo "안녕"

jar 찾아라 grep명령어 제외 2번째 인자
ps -ef | grep *.jar | grep -v grep | awk '{print $2}'

바로 찾기
pgrep -f *.jar

설명
pgrep --help

종료 스크립트 파일 만들기
vi spring-stop.sh

내용{
echo "Springboot Stop.."

SPRING_PID=$(pgrep -f *.jar)  $(명령어): 명령어 결과 리턴

echo $SPRING_PID   $변수:변수의 값 출력/실행

kill -9 $SPRING_PID
}

실행권한주기
chmod u+x spring-stop.sh

현재폴더 spring-stop.sh 실행
./spring-stop.sh

cron 주기적 실행

crontab -e

매분 실행
* * * * * ls -l 1>>cron.log
*의미: 분,시간,일,월,요일
1은 기본이라 생략가능 ">>"덮어쓰지말고 계속 추가

보기
cat cron.log

*표현 방법
1(분) / 1,2(분) / 1-3(분)

스크립트 만들기
vi myScript.sh

내용{
    #기존 crontab내용을 crontab_new에 옮겨라
    crontab -l 1>crontab_new

    #crontab_new파일에 echo내용 추가 job.sh매분 실행해라 
    echo "* * * * * /home/ubuntu/job.sh" 1>>crontab_new

    #crontab에 crontab_new작성 내용 반영
    crontab crontab_new  (파일만들어서 실행가능)

    #crontab_new삭제
    rm crontab_new
}

권한 추가
chmod u+x myScript.sh

실행
./myScript.sh

스크립트 만들기
vi job.sh

내용
ls -l > /home/ubuntu/cron.log

권한
chmod u+x job.sh

확인 cat cron.log

cron 으로 스프링 서버 재시작하기

mkdir cron-restart
cd cron-restart

stop스크립트
vi spring-stop.sh

내용
echo "SPRINGBOOT STOP..."
SPRING_PID=$(pgrep -f v1-0.0.1-SNAPSHOT.jar)
kill -9 $SPRING_PID

실행파일
chmod u+x spring-stop.sh

실행
./spring-stop.sh

재시작 스크립트
vi spring-restart.sh

내용{
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 "스프링 종료된 상태"
    echo "스프링 재시작 - $(date)" 1>>/home/ubuntu/cron-restart/spring-restart.log
    nohup java -jar $SPRING_PATH 1>log.out 2>err.out &
else
    echo "스프링 시작된 상태"
fi
}

실행파일
chmod u+x spring-restart.sh

실행파일실행
./spring-restart.sh

스프링 시작
nohup java -jar /home/ubuntu/aws-v1/build/libs/v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out &

로그확인
cat spring-restart.log

파일생성
vi deploy.sh

내용{
# 1. 배포 프로세스
echo "deploy start..기존서버 시작되어 있다면 종료하고 배포 시작"
echo "1. jdk install (재배포때x)"
echo "2. github project download (재배포때o)"
echo "3. gradlew 실행권한 주기 (재배포때o)"
echo "4. project build 하기 (재배포때o)"
echo "5. ubuntu timezone setting 하기(재배포때x)"
echo "6. nohup으로 spring boot 실행(재배포때o)"
  
# 2. 스프링 서버 종료시 재시작
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
}


권한
chmod u+x deploy.sh

실행
./deploy.sh

재배포 프로세스

- deploy.sh(최초 배포)
- redepoly.sh(재배포)

재배포 스크립트 작성{
1. 기존서버 중지

2. aws-v1 폴더 통째로 삭제
rm -r /home/ubuntu/aws-v1

3. git clone 다운
git clone https://github.com/플젝

4. gradlew 실행권한
cd /home/ubuntu/aws-v1
chmod u+x gradlew
 
5. 빌드
./gradlew build

6. jar 실행
nohup jva -jar /home/ubuntu/aws-v1/build/libs/v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out &

7. cron으로 자동 재시작
depoly.sh
}

문제점
자동화스크립트 없음
재배포시 서버가 멈춤
테스트 못하고 바로 배포
사용자 폭증 못버팀
github push 자동 재배포
EC2서버 프로그램 설치

https://www.youtube.com/playlist?list=PL93mKxaRDidFjQjPAzi9UxCdo2gtR-fue

'AWS' 카테고리의 다른 글

리눅스 명령어 (chmod, chown, find, 표준입출력)  (0) 2022.05.16
vi에디터 사용  (0) 2022.03.14
AWS 리눅스 명령어 프로세스  (0) 2022.03.14
AWS ppa 저장소 사용  (0) 2022.03.14
AWS apt  (0) 2022.03.14