AWS EC2로 서버 배포하기

Minyuk·2023년 2월 14일
0
post-thumbnail

클라우드 서비스

  • 인터넷을 통해 서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것
  • 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 지원, 개발자가 직접 해야 할 일을 AWS가 지원

1) Infrastructrue as a Service(IaaS)

  • AWS의 EC2, S3 등
  • 기존 물리 장비를 미들웨어와 함께 묶어 둔 추상화 서비스, IT 인프라를 대여

2) Platform as a Service (Paas)

  • AWS의 Beanstalk, Heroku 등
  • Iaas를 한번 더 추상화한 서비스, 많은 기능이 자동화

3) Software as a Service (Saas)

  • 구글 드라이브, 드랍박스 등
  • 소프트웨어 서비스

AWS 서버환경 만들기

1) 회원가입

  • AWS 공식사이트에서 무료 계정 만들기

2) EC2 인스턴스 생성하기

  • region을 서울로 변경
  • Amazon Linux AMI 선택
  • t2.micro 사양 선택 (프리티어, 월 24시간 x 31일 = 744시간 제한)
  • 스토리지 용량 30GB로 변경
  • 보안 그룹(방화벽) 설정
    - 유형 | 프로토콜 | 포트 범위 | 소스
    • ssh , TCP, 22, 내 IP (AWS EC2에 터미널로 접속할 때)
    • 사용자 지정 TCP, TCP, 8080, 사용자 지정 0.0.0.0/0
    • HTTPS, TCP, 443, 사용자 지정 0.0.0.0/0
  • pem키 선택
    - 기존에 생성된 pem 키가 있다면 선택 없으면 생성
    • 인스턴스는 지정된 pem(비밀키)와 매칭되는 공개키를 가지고 있어, 해당 pem키 외에는 접근 불가

3) EIP 할당

  • 인스턴스의 IP가 매번 변경되지 않고 고정 IP를 가지게하기 위해 사용
  • AWS의 고정 IP를 Elastic IP(탄력적 IP)
  • EIP 새 주소를 할당 받아 생성한 EC2 주소를 연결 (EC2와 꼭 연결하기 or 사용 안할 때 삭제)

4) EC2 서버에 접속

쉽게 ssh 접속하기

  • pem키 복사

    cp pem키를 내려받은 위치 ~/.ssh/

  • 복사가 되었다면 pem키 권한 변경

    chmod ~/.ssh/pem키명

  • config 파일 생성

    vim ~/.ssh/config

Host 원하는 서비스 명
	HostName ec2의 탄력적 IP주소
	User ec2-user
	IdentityFile ~/.ssh/pem키 이름
  • 권한 설정

    chmod 700 ~/.ssh/config

  • 접속

    ssh config에 등록한 서비스명

EC2 서버 필수 설정

  • Java 설치 : 프로젝트 버전과 동일하게 설치
  • 타임존 변경 : 한국 시간대
  • 호스트네임 변경 : 현재 접속한 서버의 별명 등록

5) RDS 생성 및 EC2에서 접근 확인

6) EC2 서버에 프로젝트 배포

EC2에 프로젝트 Clone 받기

  • Git 설치

    sudo yum install git

  • 프로젝트를 저장할 디렉토리 생성

    mkdir ~/app && mkdir ~/app/project

  • 생성한 디렉토리로 이동

    cd ~/app/project

  • GitHub에서 https 주소 복사

    git clone 복사한 주소

  • 코드들이 잘 수행되는지 검증

    ./gradlew test

배포 스크립트 만들기

  • deploy.sh 파일 생성

    vim ~/app/project/deploy.sh

  • deploy.sh

#!/bin/bash

REPOSITORY=/home/ec2-user/app/oldbook
PROJECT_NAME=Old-Book-Store

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git pull"

git pull

echo "> 프로젝트 Build 시작"

./gradlew clean build -x test

echo "> oldbook 디렉토리로 이동"

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

  • 로그 출력

    vim nohup.out

profile
학습 내용 기록하기

0개의 댓글