AWS EC2 서비스를 통해서 인스턴스에 하나 만든다.
(프리티어 micro
size, Ubuntu 20.04LTS
선택)
여기서 보안그룹에 들어가서
네트워크 인바운드 규칙을 추가시켜준다!
인바운드 규칙 편집
을 클릭하고 HTTP 80포트와 사용자지정 8080포트를 넣어준다. 0.0.0.0/0
은 IPv4버전의 모든 아이피를 대상으로 허용한다는 말이다.
MobaXterm(SSH 원격접속 프로그램)을 통해서 pem키를 등록하여 EC2 인스턴스에 들어간다.
keygen, 파일전송 프로그램 다 들어가 있고 여러모로 putty보다 훨씬 나은 프로그램이다.
여기 빨간 사각형 안에 ssh-key로 만든 pem파일
을 넣어주면 들어가 진다!
ec2 우분트 인스턴스라면, login as :
로 ubuntu
로 들어가 주면 된다.
$ login as : ubuntu
수동으로 칠 명령어는 다음과 같다.
$ sudo apt update
$ sudo apt install openjdk-11-jdk
$ java -version
$ ## sudo apt-get install git ## ubuntu는 이미 git이 깔려있음.
$ git clone https://github.com/mooh2jj/cpu-bound-application-1.git
$ cd cpu-bound-application-1/
$ ./mvnw clean package
빌드도구는 maven 과 gradle이 있다.
빌드 명령어./mvnw clean package
하면 처음에는 권한부여 거절이 돼서 안될 것이다. 빌드를 해주는 mvnw파일에 실행
권한부여를 해줘야 한다. 리눅스에서 실행권한을 편집하는 명령어 chmod
사용하면 된다.
$ chmod +x mvnw
## x(executable) 유저(user)에게 실행권한을 부여한다는 뜻
$ ./mvnw clean package
다시 해보면 성공! target 폴더가 생성되고 여기에 jar 파일이 생겼을 것이다.
# 항시 jar를 실행할시 그 폴더위치에서 명령어를 친다.
$ cd target
$ java -jar cpu-0.0.1-SNAPSHOT.jar
❗ 실습할 환경은 gradle이므로 다음 명령어로 실행해야 한다!
## gradle도 마찬가지
$ chmod +x gradlew
$ ./gradlew clean build
$ cd build/libs
$ nohup java -jar cpu-0.0.1-SNAPSHOT.jar 2>&1 &
## 파일 실시간으로 끝 내용을 봄
$ tail -f nohup.out
✳️ 참고
nohup : 일반적인 리눅스 프로세스는 SSH 세션이 종료될 경우 백그라운드 여부와 관계 없이 종료된다. nohup을 사용하면 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어
2>&1
: 표준 에러 출력 스트림(2)을 표준 출력 스트림(1)으로 리디렉션&
: 프로세스를 백그라운드에서 실행nohup.out
: 에러와 출력 메시지를 모두 nohup.out 로그 파일로 저장
jar 파일이 EC2 인스턴스에 배포된 것을 터미널에서 확인한 후,
이제 실제 웹에서도 배포되었는지 확인하기 위해 웹을 킨다.
[퍼블릭 IPv4 주소]:8080/hello
# 어플리케이션 프로세스 죽이기
$ ps -ef | grep "8080"
$ kill -9 {pid}
위 과정들의 절차를 한번에 파일로 실행
할 수 있는 게 shell script
파일이다. vi 편집기로 만들어주면 된다.
shell script 문법 참고 블로그 : https://probe29.tistory.com/47
hello.sh
#!/bin/bash
# 쉘 스크립트의 시작
# echo 함수 사용
echo "Hello Bash!"
deploy.sh
#!/bin/bash
# 1
REPOSITORY=/home/ubuntu
PROJECT_NAME={본인의 깃 레포지토리 프로젝트 이름}
# 2
cd $REPOSITORY/$PROJECT_NAME/
# 3
echo "> Git Pull"
git pull origin main
# 4
echo "> 프로젝트 Build 시작"
./gradlew clean build
# 5
echo "> git 디렉토리로 이동"
cd $REPOSITORY
echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
# 6
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
# 7
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
# 8
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
# 9
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
$ sudo chmod +x deploy.sh
# deploy.sh 실행
$ ./deploy.sh
💥 주의사항
/bin/sh^M: bad interpreter: No such file or directory 오류 발생 시
이것은 윈도우에서 스크립트 파일을 만든 뒤, linux 에서 실행했기 때문에 나타나는 오류이다.
정확히는 줄 끝 (줄바꿈)을 의미하는 개행문자가 달라서 발생하는 문제인데 이것의 해결을 위해서는 다음의 방법 중 한 가지로 처리한다.
vi -b deploy.sh
vi 의 바이너리 모드로 들어가면 ^M
이라는 문자가 보인다. 이것을 지워주면 된다.