[CI/CD] AWS 배포

콩퓨터·2025년 1월 23일

CI/CD

목록 보기
8/10

✅ AWS 배포

GitHub Actions를 활용해서 AWS의 EC2에 배포해보자 !!

✔️ AWS
✔️ Docker Compose 통해 컨테이너 관리

✅ Github & AWS 연동하여 CI/CD 구성

☑️ AWS 설정

1️⃣ AWS EC2 인스턴스 생성

2️⃣ 터미널에서 AWS 키페어 파일 실행 권한 설정

chmod 400 test-server.pem

☑️ 서버 설정

1️⃣ EC2 인스턴스에 접속

ssh -i test-server.pm ec2-user@[퍼블릭 IPv4 DNS]

2️⃣ jdk 설치

sudo yum install -y java-17-amazon-corretto-devel

3️⃣ Docker, Docker Compose 설치

sudo yum install docker

# Docker 서비스 시작
sudo systemctl start docker

# Docker 서비스 작동 상태 확인
sudo systemctl status docker

# Docker 서비스를 운영체제 부팅시 자동 시작하도록 설정
sudo systemctl enable docker

# docker 명령어를 sudo 없이 사용하기 위해 계정을 docker 그룹에 소속 (계정 재접속 필요)
sudo usermod -aG docker ec2-user

# docker-compose 설치
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

# 권한 부여
sudo chmod +x /usr/local/bin/docker-compose

  • Docker 버전 확인

☑️ GitHub Repository 설정

1️⃣ 새로운 Repository 생성
2️⃣ AWS EC2에서 다운로드한 Key Pair 파일 & 퍼블릭 IPv4 DNS 등록

- SettingsSecrets and variablesActions에서 다음과 같이 설정:
- SSH_KEY: Key Pair 파일
- SSH_HOST: 퍼블릭 IPv4 주소

✅ GitHub Actions Workflow 설정

☑️ .github/workflows/deploy.yml 설정

name: Deploy

on:
  workflow_dispatch:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'adopt'
          
      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        
      - name: gradlew bootJar
        run: ./gradlew bootJar
        
      - name: copy jar to server
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ec2-user
          key: ${{ secrets.SSH_KEY }}
          port: 22
          source: "./build/libs/*.jar"
          target: "~"
          strip_components: 2

      - name: SSH Commands
        uses: appleboy/ssh-action@v0.1.6
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ec2-user
          key: ${{ secrets.SSH_KEY }}
          port: 22
          script_stop: true
          script: |
            sudo yum update -y && sudo yum install -y java-21-amazon-corretto
            for pid in $(pgrep java); do
              if ps -p $pid -o args= | grep -q 'java -jar'; then
                echo "Java process with 'java -jar' found (PID: $pid). Terminating..."
                kill -9 $pid
              fi
            done
            echo "nohup java -jar ~/*.jar > ~/app.log 2>&1 &" | at now

☑️ 메인 브랜치로 merge

git add .
git commit -m "initial commit"
git push -u origin main 
  • Gradle 설치 후 bootJar 실행
  • 서버에 있는 build/libs 디렉토리 아래에 cicd-aws-0.0.1-SNAPSHOT.jar 생성 후 이를 서버로 복사

☑️ Spring 앱 실행

1️⃣ jar 파일 실행하여 Spring 앱 실행

2️⃣ 해당 인스턴스에 연결된 보안그룹에서 8080 포트 열기

3️⃣ 앱 실행


출처 : [TeamSparta]

profile
🔥💻🔥

0개의 댓글