3 분 소요

EC2 인스턴스는 미리 생성해둔 상태이다.

  • AWS EC2 ubuntu 20.04

1. RDS & ElastiCache 인스턴스 생성

RDS 인스턴스 생성

이 블로그를 참고하여 생성했다.

ElastiCache 인스턴스 생성

이 블로그를 참고하여 생성했다.

2. AWS EC2와 연결

EC2와 RDS 연결

참고
https://deepmal.tistory.com/9

보안 그룹 설정

EC2에서 RDS에 연결하기 위해서는 RDS의 보안그룹을 설정해주어야 한다.

  1. EC2 보안그룹 ID 확인 후 복사
  2. RDS 인스턴스의 vpc 보안그룹 클릭
  3. 1번에서 복사한 값을 인바운드 규칙에 추가
    - 유형: MySQL/Aurora
    - 포트 범위: 3306
    - 소스: 사용자 지정
    - 값: EC2의 보안그룹 ID (복사한 값)

mysql cli 설치

EC2 인스턴스에 접속한 상태에서 실행한다.

$ sudo apt install mysql-client-core-8.0

mysql 접속

$ mysql -u [마스터 사용자 이름] -p -h [RDS 인스턴스 엔드포인트]

EC2와 ElastiCache 연결

보안 그룹 설정

RDS와 마찬가지로 보안그룹을 설정해준다.

  1. EC2 보안그룹 ID 확인 후 복사
  2. ElastiCache 인스턴스의 보안그룹 클릭
  3. 1번에서 복사한 값을 인바운드 규칙에 추가
    - 유형: 사용자 지정 TCP
    - 포트 범위: 6379
    - 소스: 사용자 지정
    - 값: EC2의 보안그룹 ID (복사한 값)

gcc와 make 설치

EC2 인스턴스에 접속한 상태에서 실행한다.

$ sudo apt-get update
$ sudo apt install gcc
$ sudo apt install make

redis cli 설치

# redis-cli 설치 및 make
$ wget http://download.redis.io/redis-stable.tar.gz && tar xvzf redis-stable.tar.gz && cd redis-stable && make

# redis-cli를 bin에 추가해 어느 위치서든 사용 가능하게 등록
$ sudo cp src/redis-cli /usr/bin

스크린샷 2022-07-22 오후 3 14 41
이런식으로 설치가 완료되었다.

redis 접속

$ redis-cli -h [ElastiCache 인스턴스 엔드포인트] -p 6379

이때, [ElastiCache 인스턴스 엔드포인트]는 아래 사진과 같은 형태인데, 맨 마지막의 :6379 부분을 제외하고 입력하면 된다.
스크린샷 2022-07-22 오후 3 22 02

3. Spring Boot 프로젝트와 연동

java 11 설치

sudo apt-get install openjdk-11-jdk

+) 혹시 환경변수를 설정해야 한다면 아래를 참고하자

먼저 java 위치를 확인한다.

which java
readlink -f /usr/bin/java

다음 명령어를 실행했을 때, 나의 경우는 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 이렇게 나오는데,
뒤에 /bin/java만 제거하고 앞부분까지만 복사한다.

복사한 뒤에, 아래 명령으로 환경설정 파일인 profile을 열어준다.

sudo vi /etc/profile

스크린샷 2022-07-13 오후 8 04 09 그럼 이런 파일이 나오는데, 위와 같이 맨 아래 3줄을 추가해주면 된다.

해당 작업이 끝난 뒤, 업데이트를 위해 아래 명령어를 입력한다.

source /etc/profile

마지막으로 환경변수가 잘 세팅 되었는지 확인한다.

echo $JAVA_HOME

이 명령어를 쳤을 때, 아까 복사해준 위치가 나타나게 된다면 성공이다.

참고

git clone

나는 develop 브랜치에서 가져올거기 때문에 아래 명령을 실행했다.

$ git clone -b [브랜치 이름] --single-branch [깃헙 주소]

예시: git clone -b develop --single-branch https://github.com/...

환경변수 파일 생성

.env.gitignore에 등록해둔 환경변수 파일을 따로 생성해준다.

코드 변경

build.gradle

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java'

implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'redis.clients:jedis:3.3.0'

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://${MYSQL_ENDPOINT}:${MYSQL_PORT}/${MYSQL_DATABASE}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
    username: ${MYSQL_MASTER}
    password: ${MYSQL_PASSWORD}

    redis:
      host: ${REDIS_ENDPOINT}
      port: ${REDIS_PORT} 

참고
https://velog.io/@u-nij/Spring-Boot-AWS-RDS-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

프로젝트 빌드

$ ./gradlew build -x test 

테스트 코드는 제외하고 빌드한다.

배포

$ cd build/libs // jar 파일 있는 곳으로 이동
$ java -jar server-0.0.1-SNAPSHOT.jar

혹시 application.yml 값을 잘못 입력 했으면 수정해주고 다시 빌드 해주면 된다.
꼭 값을 수정해주고 재빌드 하는 것을 잊지 말자!

4. 배포 스크립트 작성

매번 변경된 코드를 pull -> 빌드 -> 배포 과정이 귀찮으니, 배포 스크립트를 작성해 한번에 해결하자.

디렉터리 생성

mkdir app
cd app
mkdir git
cd git

clone 받은 프로젝트 옮기기

이전에 git clone 받은 프로젝트를 app/git/ 안으로 옮긴다.

mv -R [디렉토리명] [목적지 디렉토리위치]
// mv -R naem-server/ app/git/

deploy.sh 생성

~app/git$ vi deploy.sh

아래는 deploy.sh 내용이다.

#!/bin/bash

REPOSITORY=/home/ubuntu/app/git
PROJECT_NAME=naem-server

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git Pull"

git pull origin develop

echo "> 프로젝트 Build 시작"

./gradlew build -x test

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 &


스크립트 실행

$ chmod +x ./deploy.sh // 권한 부여
$ ./deploy.sh


확인

netstat -ntl

스크린샷 2022-07-22 오후 10 09 59
8080 포트가 LISTEN 임을 확인할 수 있다.

deploy 스크립트 생성


프로세스를 종료하고 싶다면?

$ ps -ef | grep [jar 파일명].jar // pid 확인
$ kill -9 [pid] // 프로세스 중단

스크린샷 2022-07-22 오후 8 48 38

Ref.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그: ,

카테고리:

업데이트: