Backend/강의

[🐋 Docker + CI/CD] 4. AWS 연동

가지코딩 2025. 7. 3. 01:01

🐋 목차

    1. AWS 회원 가입 & 로그인
    2. EC2 설정
    3. 서버 설정
    4. github repository 설정
    5. 프로젝트 설정
    6. EC2 인바운드 규칙 설정
    7. 배포 확인
    8. 인스턴스 중지

1. AWS 회원 가입 & 로그인

https://portal.aws.amazon.com/billing/signup

 

AWS Console - Signup

 

portal.aws.amazon.com

 

이메일 인증, 주소 등록, 카드 등록, 본인 인증 등의 절차를 거쳐 회원가입을 진행한 

로그인 한다 !


2. EC2 설정

왼쪽 위 검색창에서 ec2 를 입력 후 선택

 

 

ec2 화면에서 ‘인스턴스’ 를 선택

 

 

인스턴스 시작 버튼 클릭

 

 

인스턴스 생성

  • 이름 : my-server
  • Amazon Machine Image(AMI) : Amazon Linux 2023 AMI
  • 인스턴스 유형 : t2.micro

 

 

키 페어 생성

  • ‘새 키 페어 생성’ 클릭
    • 키 페어 이름 : my-server-keypair
    • 키 페어 유형: RSA
    • 프라이빗 키 파일 형식: pem
    • ‘키 페어 생성’ 후 다운로드

 

 

네트워크 설정

  • 보안 그룹 생성 선택
  • Allow SSH traffic from , ‘위치 무관’ 선택
  • 인터넷에서 HTTPS 트래픽 허용 선택
  • 인터넷에서 HTTP 트래픽 허용 선택

 

 

인스턴스 시작 클릭 !


3. 서버 설정

ec2 접속

  1. .pem 파일 권한 설정 (chmod 400)
  2. ssh 로 접속
ssh -i test-server.pem ec2-user@{퍼블릭 IPv4 DNS 주소}

 

 

ec2 에 jdk 설치

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

 

ec2에 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

4. github repository 설정

새로운 repository 생성 !

  • Settings > Secrets and variables > Actions 로 이동
  • Repository secrets 에 key 추가
    • SSH_KEY: .pem 파일 내용 복사
    • SSH_HOST: 퍼블릭 IPv4 DNS 주소 복사


5. 프로젝트 설정

https://github.com/gajicoding/cicd-aws/tree/11f4a77a9db8cb029a07f870be1f329dcd704a6d

 

GitHub - gajicoding/cicd-aws

Contribute to gajicoding/cicd-aws development by creating an account on GitHub.

github.com

 

.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

 

 

* 작업 순서

  • 코드 checkout
  • JDK 설정
  • gradlew 실행
  • jar 파일 전송
  • jar 파일 실행


6. EC2 인바운드 규칙 설정

인스턴스 > 보안 > 보안 그룹 > 인바운드 규칙 편집


7. 배포 확인


8. 인스턴스 중지

AWS를 사용하는 것은 비용이 발생할 수 있으니 주의해야 한다 !!!

 

사용하지 않는 EC2 서버는 ‘중지’ 상태로 변경. 서버를 없애려면 위해선 ‘종료’ 선택

 

 


번외

docker 로 배포하기 !

강의에서 ec2 에 docker 환경 설정은 해주었지만, docker 를 사용하여 배포하지는 않았다...

 

궁금한건 직접 해보기

 

https://github.com/gajicoding/cicd-aws/tree/cad62e7622af1fae48c4a3db98017bdae13f2339

 

GitHub - gajicoding/cicd-aws

Contribute to gajicoding/cicd-aws development by creating an account on GitHub.

github.com