![[AWS] EC2 서버에 프로젝트 배포하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCAT6%2FbtssS233qfs%2FRfG4aGwOrftBt5QUxmf8Xk%2Fimg.png)
EC2에 프로젝트 Clone 받기
1. putty 실행 후, git 설치
#git 설치
sudo yum install git
#치 상태 확인
git --version
2. 프로젝트를 저장할 디렉터리 생성 후, git clone
#디렉토리 생성
mkdir ~/app && mkdir ~/app/step1
#생성한 디렉토리로 이동
cd ~/app/step1
#git clone
git clone https://github.com/rhrudska987/springboot-webservice.git
#프로젝트로 이동
cd springboot-webservice
#파일 목록 상세 보기
ll
3. 코드들이 잘 수행되는지 테스트로 검증
./gradlew test
#-bash: ./gradlew: Permission denied가 나오는 경우
chmod +x ./gradlew
주의!! (인스턴스가 멈추는 현상)
빌드를 하는 과정에서 인스턴스가 멈추는 현상이 있을 수 있습니다.
이는 free tier로 ec2를 이용하면 ram이 1기가라 이런 현상이 발생한다고 합니다.
가장 좋은 방법은 요금제를 바꾸는 거지만, 다른 해결 방법도 존재합니다!
아래 코드를 순차적으로 진행하시면 됩니다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=32
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo swapon -s
$ sudo vi /etc/fstab
맨 아래에 '/swapfile swap swap defaults 0 0'을 추가해 주시면 됩니다.

자세한 설명이 필요하신 분들은 아래 참고자료를 확인하시면 됩니다!
배포 스크립트 만들기
스크립트를 만드는 이유는 개발자가 하나하나 명령어를 실행하면 불편함이 크기에 이를 쉘 스크립트로 작성하여 스크립트만 실행하면 모든 과정을 차례로 진행되도록 하였습니다.
배포 스크립트에는 아래 과정들을 모두 포함하고 있습니다.
- git pull을 통해 새 버전의 프로젝트를 받음
- Gradle을 통해 프로젝트 테스트와 빌드
- EC2 서버에서 해당 프로젝트 실행 및 재실행
vim ~/app/step1/deploy.sh
deploy.sh에 아래 코드를 추가해 주시면 됩니다.
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=springboot-webservice
cd $REPOSITORY/$PROJECT_NAME/
echo "> Git Pull"
git pull
echo "> 프로젝트 Build 시작"
./gradlew build
echo "> step1 디렉토리로 이동"
cd $REPOSITORY
echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "현재 구동중인 애플리케이션 pid: $CURRENT_PID"
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에 실행 권한 추가
chmod +x ./deploy.sh
#deploy.sh 실행
./deploy.sh
./deploy.sh를 실행하면 nohup.out이라는 파일이 생성된 것을 확인할 수 있습니다.
nohup.out은 실행되는 애플리케이션에서 출력되는 모든 내용을 갖고 있습니다.
스프링 부트 프로젝트로 RDS 접근
RDS는 MariaDB를 사용하고 있습니다.
1. 스키마 생성 후, 테이블 생성
테이블의 경우, 프로젝트를 실행하면 나오는 쿼리를 사용하시면 빠르게 생성 가능합니다.
2. 프로젝트 설정
MariaDB 드라이버를 build.gradle에 등록
implementation 'org.mariadb.jdbc:mariadb-java-client'
서버에서 구동될 환경 구성.
src/main/resources/에 application-real.yml 추가 후, push
3. EC2 설정
RDS 접속 정보는 보호해야 할 정보이기에 EC2 서버에 직접 설정 파일을 둬야 합니다.
vim ~/app/application-real-db.yml
아래 코드를 추가합니다.
spring:
jpa:
hibernate:
ddl-auto: none
datasource:
url: jdbc:mariadb://rds엔드포인트:3306(기본은 3306)/springboot-webservice(db이름)
username: db계정
password: db계정 비밀번호
driver-class-name: org.mariadb.jdbc.Driver
마지막으로 deploy.sh를 수정합니다.
nohup java -jar -Dspring.config.location=classpath:/application.yml,/home/ec2-user/app/application-real-db.yml,classpath:/application-real.yml $REPOSITORY/$JAR_NAME 2>&1 &
위의 과정까지 마쳤으면 ./deploy.sh를 실행합니다.
AWS EC2 도메인으로 접속
EC2 인스턴스의 퍼블릭 IPv4 DNS로 접속하시면 EC2 서버에 접근할 수 있습니다.
참고자료
스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당
Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 스왑 파일로 사용할 메모리를 할당하려고 합니다. 어떻게 해야 하나요?
repost.aws
[도서] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
'AWS' 카테고리의 다른 글
[AWS] RDS 생성 후, 연결하기 (0) | 2023.08.13 |
---|---|
[AWS] EC2 서버 환경 만들기 (0) | 2023.08.12 |
느리더라도 단단하게 성장하고자 합니다!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!