aws ec2 리눅스 서버에 spring 프로젝트를 빌드하고 배포해보았습니다.
해당 시리즈에서 react 배포할 때도 언급했지만, git repository를 clone 하여 서버에서 직접 build 하는 방식 대신에, 로컬에서 프로젝트를 build 하고 build 파일을 서버로 전송했습니다. 전송된 build 파일을 백그라운드에서 실행하여 배포를 진행했습니다.
우선 로컬에서 build 부터 진행해봅시다.
프로젝트 폴더로 이동해서 ./gradlew build
명령어를 입력합니다. 또는 그러면 build 폴더가 생성됩니다. build 폴더에서 배포를 위해 필요한 건 build/libs/ ******-0.0.1-SNAPSHOT.jar
파일 하나입니다.
cf.
/gradlew clean build
명령어로 clean 후 다시 빌드하면 됩니다.이전 글에서도 다루었던 내용이기 때문에 자세한 설명은 생략하겠습니다. 이번에는 폴더가 아닌 파일 하나만 전송합니다.
scp -i test.pem test.txt ec2-user@10.0.0.0:/home/ec2-user
test.pem 파일은 서버 keypair 파일, test.txt는 전송할 파일입니다. 보낼 경로는 이전에 생성한 /home/ec2-user/[프로젝트 명]
폴더로 지정했습니다.
~/Desktop/Coding/projects/OurDepartmentIs/build/libs
$ scp -i ../../../ourdepartmentis.pem OurDepartmentIs-0.0.1-SNAPSHOT.jar ec2-user@3.36.128.239:/home/ec2-user/ourdepartmentis
OurDepartmentIs-0.0.1-SNAPSHOT.jar
파일 전송이 완료됐다면, 이제 서버가 종료되도 프로세스를 유지하도록 백그라운드에서 실행해줍시다.
nohup java -jar ec2-test-0.0.1-SNAPSHOT.jar &
nohup - 세션이 끊겨도 프로그램을 종료하지 않을 때 사용하는 리눅스 명령어 입니다. (no hang up)
& - 백그라운드에서 실행하라는 커맨드입니다.
실행중인 프로세스를 확인하려면 다음과 같은 명령어를 사용합니다.
ps -ef | grep .jar
606065 pid로 실행되고 있습니다.
CURRENT_PID=$(pgrep -f ******-0.0.1-SNAPSHOT.jar)
echo "$CURRENT_PID"
sudo kill ******
https://dev.classmethod.jp/articles/use-scp-upload-scp/
https://deftkang.tistory.com/205
https://velog.io/@dev_zzame/Spring-Boot-프로젝트-무중단배포-하기feat.-running-on-background