[AWS] Docker로 github CI/CD 배포하기

ChaeYuuu·2025년 7월 3일

AWS

목록 보기
4/4
post-thumbnail

이제 docker로 CI/CD를 설정해줄 것이다.
그전에!! 해야하는 것들을 해줘야한다.

Swap 설정

우선 스왑 메모리를 설정해준다.

sudo fallocate -l 2G /swapfile # 2GB 크기의 swap 파일 생성
sudo chmod 600 /swapfile # 권한 설정 (소유자만 읽기/쓰기)
sudo mkswap /swapfile # swap 형식으로 포맷
sudo swapon /swapfile # swap 활성화

JAVA/Mysql설치

자바랑 mysql을 사용해줄것이니까 필요한 것들을 ec2내에 설치한다.

sudo apt install mysql-server
mysql -u {마스터 사용자 이름} -p -h {엔드포인트}
sudo apt install openjdk-21-jdk-y
echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc
source ~/.bashrc

로 자바 설치 및 자바 홈 경로까지 설정해준다. Gradle은 21로 빌드하기 때문에 21로 해야 나중에 오류 안 남!!

Docker 설치

Ubuntu에서는 Docker를 설치하기 위해 공식 Docker 저장소를 먼저 추가해야하기 때문에 아래 명령어를 통해 도커 저장소를 설치해준다.

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt install docker -y

로 도커를 설치해준다.

Docker로 배포

이제 설치해야하는 것을 다 설치해줬으면!! 본격적으로 CI/CD를 위해 필요한 것들을 작성해준다.

Dockerfile 작성

Dockerfile로

FROM openjdk:21-jdk-slim
EXPOSE 8080
COPY ./build/libs/*.jar ./app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

작성해주는데 자바 버전같은거랑 다른 부분은 맞춰서 수정해야한다.

deploy.yml 작성

name: CI/CD for Spring Boot with Docker

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 코드 체크아웃
        uses: actions/checkout@v3

      - name: JDK 설정
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '21'

      - name: application.yml 설정
        run: |
          mkdir -p ./src/main/resources
          echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml

      - name: Gradle 빌드
        run: ./gradlew clean build -x test

      - name: Docker 이미지 빌드 및 푸시
        run: |
          docker build -t ${{ secrets.DOCKER_USERNAME }}/blockguard_server .
          echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
          docker push ${{ secrets.DOCKER_USERNAME }}/blockguard_server:latest

  deploy:
    runs-on: ubuntu-latest
    needs: build

    steps:
      - name: EC2에 SSH 접속하여 Docker 컨테이너 재배포
        uses: appleboy/ssh-action@v0.1.10
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ubuntu
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          script: |
            docker pull ${{ secrets.DOCKER_USERNAME }}/blockguard_server:latest
            docker stop blockguard_server || true
            docker rm blockguard_server || true
            docker run -d -p 8080:8080 --name blockguard_server ${{ secrets.DOCKER_USERNAME }}/blockguard_server:latest

github에 workflows/.deploy.yml 파일을 올려준다.
여기서 APPLICATION, DOCKER_USERNAME, DOCKER_PASSWORD, EC2_HOST, EC2_PRIVATE_KEY 는 github setting에 Secretes로 등록해준다.

APPLICATION: application.yml 파일 전체
DOCKER_USERNAME: docker id
DOCKER_PASSWORD: docker password
EC2_HOST: EC2 퍼블릭 IP
EC2_PRIVATE_KEY: .pem 내용 복사 <- cat {.pem 이름}.pem 로 내용 확인 가능 (---BEGIN 부터 END-- 까지 전체 내용 복사)

EC2에서 확인

github repository에 있는 프로젝트를 클론해서 EC2에 받아온다.

git clone {repository 주소}

그리고 application.yml 파일을 작성해준다. application.yml 파일은 절대! 깃허브에 안 올리기 때문에 따로 작성해줘야한다.

mkdir -p src/main/resources
nano src/main/resources/application.yml
vi src/main/resources/application.yml

다 작성했으면 github action 돌리기 전에 수동으로 실행해보고 확인해본다!

./gradlew clean build -x test
docker build -t blockguard_server .
docker run -d -p 8080:8080 --name blockguard_server blockguard_server
docker ps

정상 작동 확인하면 이후에 Github actions 실행하면 됨

profile
아무것도 머르게떠염

0개의 댓글