AWS/Docker+CICD

Github Actions, github repository 그리고 AWS ec2 간단 사용법.

sehunbang 2024. 4. 5. 17:24

( AWS를 사용하는 것은 비용이 발생할 수 있으니 주의해 주세요. )

 

1. 회원 가입 밑 ec2 만들어야 합니다.

https://sehuncodingjournal.tistory.com/category/AWS

 

'AWS' 카테고리의 글 목록

 

sehuncodingjournal.tistory.com

 

 

 

그래도 ec2 만드는거는 복습 한다 치고

 

 

 

 

 

키페어 !

비밀키 이고 잃어 버리면 복구가 안됨.!!!!

생성 하면 , 다운로드

 

 

 

 

 

이제 비밀키 있는 곳으로 이동

 

chmod 400 적용

 

 

 

 

퍼블릭 ipv4 DNS 가져와서 ssh 실행 해보기

 

ssh -i {비밀키} ec2-users@ { 퍼블릭 ipv4 DNS  }

 

 

그.... 우번투가 아니라 aws linux 이기 때문에  yum 커맨드 사용

 

 

ec2 에 jdk 설치

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

 

도커 설치 

 

sudo yum install docker

 

 

# Docker 서비스 시작

sudo systemctl start docker

 

# Docker 서비스 작동 상태 확인

sudo systemctl status docker

 

 

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

sudo systemctl enable 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

 

 

 

 

 

Github repository 설정

시크릿 키 설정. (비밀키 pem 파일에 있는거 (메모장으로 열면 보임) 키로 들록)

 

 

 

1 번 SSH_KEY

2 번 SSH_HOST

Public Ipv4 DNS

 

 

우선 앞서서 프로젝트 안에

 

boot jar jar 파일이 빌드 안에 생성 되는것을 볼수 있습니다.

 

 

 

작업 순서

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

 

.github/workflows/deploy.yml 생성

 

name: Deploy

on:
  workflow_dispatch:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up JDK 17
        uses: actions/setup-java@v2
        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: |
            kill -9 $(ps -ef | grep java | head -n 1 | awk '{print $2}')
            nohup java -jar *.jar 1> /dev/null 2>&1 &

 

( 윈도우에서 문제가 있는 경우, script: | 를 변경해 주세요 → script: \ )

 

 

서버 접속이 안되는 경우 확인 필요

  • 해당 인스턴스에 연결된 보안그룹에서 8080 포트를 open 하고 있는지 확인

 

 

  • 배포하는 동안 scp 로 copy 할 때 서버 접속이 안되는 경우,
    • DNS 와 IP 가 변경되지 않았는지 다시 한 번 확인

(고정 ip 설정 해놓지 않으면 인스턴스 재실행 할때 마다 ip 주소 바껴요!!!!!!)

 

AWS를 사용하는 것은 비용이 발생할 수 있으니 주의해 주세요. 당분간 사용하지 않는 EC2 서버는 ‘중지’ 상태로 변경해 주세요. 서버를 없애기 위해선 ‘종료’를 선택해 주세요.