저번 시간에는 파일질라를 통해 프로젝트 파일을 수동으로 빌드하여 배포를 해보았습니다.
이번에는 깃허브 ssh url을 통해 더욱 쉽게 배포를 해보겠습니다!
AWS에 접속
먼저 AWS에 접속하여 줍니다.
$ ssh -i [pem 키페어 주소] ubuntu@[탄력적 ip 주소]
SSH Key 생성
.ssh 디렉토리로 이동합니다
$ cd ~/.ssh
이제 키페어를 ssh key를 생성해봅시다!
$ ssh-keygen -t rsa -C [깃허브 계정 이메일]
SSH Key Git 연동
생성된 ssh key를 깃허브에 추가해줍니다.
$ cat id_rsa.pub
먼저 cat id_rsa.pub를 치게되면

이렇게 ssh-rsa ~~~~~ 깃허브 메일 주소가 나오는데 이걸 복사 해줍니다
※ 참고로 git bash에서 복사는 Ctrl + Insert, 붙여넣기는 Shift + Insert 입니다.
GitHub: Let’s build from here
GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea...
github.com
Github 로그인 -> Settings -> SSH and GPG keys를 클릭합니다.

New SSH key를 클릭한 후에 아까 생성하고 복사해 뒀던 SSH Key를 넣어주시면 됩니다!

Git Clone
자 이제 SSH Key도 다 입력을 완료했으니 깃허브를 통해 프로젝트를 EC2에 clone 해봅시다~

복사하고 싶은 프로젝트에 SSH탭에서 나온 주소를 복사합니다!
그후 git bash로 돌아와서 clone하고싶은 디렉토리로 이동 후에
$ git clone [복사한 SSH 주소]

이렇게 추가가 된 것을 알 수 있습니다.

- 먼저 프로젝트에 맞는 자바 버전이 적용 되었는지 확인을 합니다!
- clone된 프로젝트에 들어갑니다!
$ cd [프로젝트명]
- build를 합니다
$ ./gradlew build

여기서 permission denied라고 뜨면 당황하지 마세요!!!!
gradlew를 실행할 수 있는 권한이 없기 때문입니다.
$ chmod +x gradlew
다시 ./gradlew build를 하면 성공!

빌드가 완료되면 build/libs 디렉토리가 생성되고
프로젝트명-0.0.1-SNAPSHOT.jar 파일이 생성 되는 것을 알 수 있습니다.
java -jar [파일명].jar

배포 스크립트 만들기
배포 스크립트를 왜 만들까요???
만약 프로젝트에 변경사항을 서버에 적용하고 싶을 때 배포 스크립트를 쓰지 않으면
아래 명령어들을 일일히 번거롭게 쳐야 합니다!
git pull -> build 시작 -> build 디렉토리 이동 -> build 파일 복사 -> 실행 중인 pid 확인 -> 있으면 종료
-> 변경한 프로젝트 배포...
하지만 이 명령어들을 스크립트로 만들어서 ./depoly.sh를 실행하게되면 간단하게 변경사항을 적용할 수 있습니다!!!!
자 먼저 변경사항이 있는 프로젝트에 들어갑니다!
※ 깃에 변경사항이 push가 되어있어야 합니다.
$ nano ./deploy.sh
deploy.sh라는 쉘 스크립트를 만듭니다.
아래 REPOSITORY와 PROJECT_NAME에 본인의 파일 경로와, 프로젝트 이름을 입력해줍니다!
#!/bin/bash
REPOSITORY=/home/ubuntu
PROJECT_NAME=thymeleaf-basic
cd $REPOSITORY/$PROJECT_NAME
echo "> Git Pull"
git pull
echo "> 프로젝트 Build 시작"
./gradlew clean build
echo "> step1 디렉토리 이동"
cd $REPOSITORY
echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
echo "> 현재 구동적인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
작성 완료하고 나오면 deploy.sh 파일이 생기는 것을 알 수 있습니다.

$ ./deploy.sh
자 이제 스크립트르 실행하면 ~~~ 에러가 뜹니다!!! :(
당황하지 말고 아까 gradlew 실행권한을 부여한 것처럼 실행 권한을 추가해줍니다!
$ chmod +x ./deploy.sh

그 다음 다시 실행 해보면...

기존에 실행되던 서버를 죽이고, 깃으로부터 PULL해온 변경사항을 추가한 JAR파일을 새로 배포됩니다.
아래 사진을 보시면 수정된 코드가 배포 된 것을 알 수 있습니다


참고
다음 포스팅에서는 디비연결을 해볼게요 그럼 이만!!!

'백엔드 > AWS' 카테고리의 다른 글
| [AWS] 가상 서버에 내장 DB설치 (EC2, MariaDB) (0) | 2024.07.07 |
|---|---|
| [AWS] 포트 포워딩 (0) | 2024.07.07 |
| [AWS] EC2를 이용한 서버 구축 4 (FileZilla로 프로젝트 올리기) (0) | 2024.07.02 |
| [AWS] EC2를 이용한 서버 구축 3 (SSH 접속, Git Bash, Tomcat 설정) (0) | 2024.07.01 |
| [AWS] EC2를 이용한 서버 구축 2 (Ubuntu 24.04 LTS 인바운드 규칙, 보안그룹, 탄력적IP 설정) (0) | 2024.07.01 |