본문 바로가기
Docker AND Cloud

[AWS] aws에 배포하기

by 어떻게말이름이히힝 2025. 1. 20.

AWS에서 ec2 생성
ec2에 docker, docker compose
github secretkey 기능을 활용하여 action secret key에 AWS pair key 설정(SSH_KEY, SSH_HOST)

github workflow 설정(main으로 merge 시 배포하도록 설정)아래 코드는 amazon-linux 기준으로 작성된 .github/workflows/deploy.yml 파일이며, 이외 리눅스를 사용할 시 리눅스 명령어에 맞게 수정이 필요하다.

 

1. EC2 생성( Ubuntu Server 22.04 LTS (HVM) )

 

2. 키페어를 받아주고

putty 설치

Category-> Connection -> SSH -> Auth -> Credentials에 ppk를 올려서 접속해준다.

login as : 가 뜨면 ubuntu 를 입력해주면 접속이 완료 된다.

 

3. 자바 설치를 위해 아래 명령어를 차례대로 입력해준다.

 

wget -O - https://apt.corretto.aws/corretto.key | sudo gpg --dearmor -o /usr/share/keyrings/corretto-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/corretto-keyring.gpg] https://apt.corretto.aws stable main" | sudo tee /etc/apt/sources.list.d/corretto.list

 

sudo  sudo apt-get update

 

sudo apt-get install -y java-17-amazon-corretto-jdk

 

정상적으로 설치 되었다면 아래 화면이 뜬다.

 

4. 도커 설치를 위하여 아래 명령어를 차례대로 입력해준다.

 

sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

 

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

sudo apt update


sudo apt install docker-ce docker-ce-cli containerd.io

 

sudo systemctl start docker


sudo systemctl enable docker

 

sudo systemctl status docker

 

정상적으로 설치되었다면 아래와 같이 뜬다.

 

5. docker-compose도 설치해준다.

 

sudo usermod -aG docker ubuntu

 

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-compose version

 

정상적으로 과정이 완료되었다면 아래와 같이 뜬다.

 

6. aws에서 받았던 키를 메모장으로 열어서 복사해준다음 github의 아래 메뉴로 가 SSH_KEY를 등록해준다.

(여기서 ppk로 받았다면 puttygen을 설치해서 pem 파일로 변환해주도록 하자)

SSH_HOST도 AWS 의 해당 인스턴스의 ' 퍼블릭 IPv4 DNS ' 항목을 복사해 붙여넣도록 하자.

 

 

 

 

7. 프로젝트소스/.github/workflows/deploy.yml 파일을 넣어준다.

(따로 폴더 생성이 안되있으니 .github 폴더부터 만들면 된다.)

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: Make application.yml
        run: |
          cd ./src/main/resources
          touch ./application.yml                                    
          echo "${{ secrets.YML_SECRET }}" > ./application.yml
        shell: bash

      - name: gradlew bootJar
        run: ./gradlew bootJar

      - name: copy jar to server
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ubuntu
          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: ubuntu
          key: ${{ secrets.SSH_KEY }}
          port: 22
          script_stop: true
          script: |
             for pid in $(pgrep java); do
              if ps -p $pid -o args= | grep -q 'java -jar'; then
               echo "Java 프로세스 발견 (PID: $pid). 종료 중..."
               sudo kill -9 $pid
              fi
             done
             nohup java -jar ~/*.jar > ~/app.log 2>&1 &

 

8. 위 github Actions 스크림트는 main에 푸시 될때 실행되기 때문에 main에 푸시해보자.

gradle-wraper.properties가 없다는 오류가 뜰 경우 intellij 오른쪽에 gradle -> build setup의 init과 wrapper를 눌러보자.

만들어졌으면 다시 메인으로 push 해준다.

 

안된다면 다시 실행시켜보자, 

 

워크플로우가 완료되면 이런식으로 뜬다.

 

EC2 서버에도 정상적으로 안착한 것이 확인되었다.

'

9. RDS 연결이 안된다면 VPC-> 라우팅을 확인할 것.

라우팅 테이블을 0.0.0.0/0으로하고 인터넷 게이트웨이로 설정해주면 된다.

 

 

이제 ec2 url로 회원가입 요청을 보내면 성공하는 걸 볼 수 있다.