본문 바로가기

개발공부/AWS

EC2 배포 - Shell Script

 

 

EC2에서 애플리케이션을 배포하는 Shell 스크립트를 작성하려면, 다음과 같은 작업을 자동화할 수 있습니다.

스크립트 주요 기능:

  1. 시스템 패키지 업데이트
  2. Java 및 Gradle 설치 (Spring Boot 애플리케이션 배포 시)
  3. 애플리케이션 실행 및 로그 관리
  4. 방화벽 설정

📌 EC2 배포용 Shell Script (deploy.sh)

sh
복사편집
#!/bin/bash

# 1️⃣ 업데이트 및 필수 패키지 설치
echo "🚀 시스템 패키지 업데이트 중..."
sudo apt update -y && sudo apt upgrade -y

# 2️⃣ Java 및 필수 패키지 설치 (필요 시 추가)
echo "☕ Java 및 필요 패키지 설치 중..."
sudo apt install -y openjdk-17-jdk unzip curl git

# 3️⃣ Gradle 설치 (Gradle 사용 시)
echo "📦 Gradle 설치 중..."
wget <https://services.gradle.org/distributions/gradle-8.5-bin.zip> -P /tmp
sudo unzip -d /opt/gradle /tmp/gradle-8.5-bin.zip
echo "export PATH=/opt/gradle/gradle-8.5/bin:\\$PATH" >> ~/.bashrc
source ~/.bashrc

# 4️⃣ 애플리케이션 배포 디렉토리 설정
APP_DIR="/home/ubuntu/app"
JAR_NAME="myapp.jar"

echo "📁 애플리케이션 디렉토리 설정..."
mkdir -p $APP_DIR
cd $APP_DIR

# 5️⃣ 기존 실행 중인 애플리케이션 종료 (포트 8080 기준)
echo "🛑 기존 애플리케이션 종료 중..."
APP_PID=$(pgrep -f $JAR_NAME)
if [ -n "$APP_PID" ]; then
  sudo kill -9 $APP_PID
fi

# 6️⃣ 새 애플리케이션 배포 (GitHub 또는 S3에서 다운로드)
echo "⬇️ 최신 애플리케이션 다운로드 중..."
sudo rm -rf $APP_DIR/*
git clone <https://github.com/username/myapp.git> $APP_DIR
cd $APP_DIR

# 7️⃣ 빌드 및 실행 (Gradle 사용 시)
echo "🏗️ 애플리케이션 빌드 중..."
./gradlew build

echo "🚀 애플리케이션 실행 중..."
nohup java -jar build/libs/$JAR_NAME > app.log 2>&1 &

# 8️⃣ 방화벽 설정 (필요 시)
echo "🔒 방화벽 규칙 추가 (포트 8080 열기)"
sudo ufw allow 8080

echo "🎉 배포 완료! 애플리케이션이 실행되었습니다."


📌 실행 방법

  1. EC2에 접속 후 deploy.sh 파일을 생성
  2. sh 복사편집 nano deploy.sh
  3. 위 스크립트 내용을 붙여넣고 저장
  4. 실행 권한 부여
  5. sh 복사편집 chmod +x deploy.sh
  6. 실행
  7. sh 복사편집 ./deploy.sh

📌 추가 사항

  • GitHub/S3에서 JAR 파일을 직접 다운로드하는 경우 git clone 부분을 수정
  • Spring Boot 외 다른 언어(Node.js, Python 등)로 개발된 경우 실행 명령 수정
  • AWS CodeDeploy, Docker 등을 사용할 경우 추가 설정 필요

이 스크립트를 사용하면 EC2 서버에서 자동으로 Spring Boot 애플리케이션을 배포하고 실행할 수 있습니다. 🚀

 

 

 

 

 

 

  1. backend api server
    if [ ! -f "$JAR_FILE" ]; then
        echo "JAR 파일 '$JAR_FILE'이 존재하지 않습니다. 빌드 실패."
        exit 1
    fi
    # 애플리케이션 종료
    stop_application
    # 애플리케이션 시작
    start_application
    
  2. reboot.sh
  3. frontend
  4. if [ ! -d "$BUILD_DIR" ]; then echo "빌드 디렉토리 '$BUILD_DIR'이 존재하지 않습니다. 빌드 실패." exit 1 fi # 애플리케이션 종료 stop_application # 애플리케이션 시작 start_application

'개발공부 > AWS' 카테고리의 다른 글

RDS 화이트리스트 설정하기  (0) 2025.02.13
EC2 크기에 따른 비용 절감  (0) 2025.02.13
RDS - 화이트리스트 추가 및 후기  (1) 2025.02.13
GCP(Google Cloud Platform)란?  (0) 2025.02.13
AWS vs GCP 의 장단점과 차이점  (0) 2025.02.13