[Devops] github actions로 자동 배포 설정하기 (react docker 배포)

2023. 2. 16. 22:35·개발/Devops
728x90
반응형
 

[AWS] github actions로 자동 배포 설정하기 (github 배포)

AWS 배포한 후 추가로 코드를 수정했을 때 자동으로 서버에 적용해주면 좋을것 같다라는 생각으로 시작했다. 찾아보니 여러 툴이 있었지만 가장 간편하게 보였던 github action을 이용해봤다. 아래

diary-blockchain.tistory.com

github 배포에 이어서 도커배포도 해봤다.

대부분 비슷하지만 도커 설치 하고 actions부분에서 실행하는 코드가 살짝 다르다.

 

name: Docker Image CD

on:
  push:
    branches:
      - prod

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build & Push the Front Docker image
        uses: docker/build-push-action@v2
        with:
          context: ./frontend
          file: ./frontend/dockerfile
          push: true
          tags: ${{ secrets.DOCKER_FRONT_REPO }}
          build-args: |
            REACT_APP_BASE_URL=${{ secrets.REACT_APP_BASE_URL }}
            REACT_APP_FABRIC_URL=${{ secrets.REACT_APP_FABRIC_URL }}

      - name: Deploy Front to prod
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.FRONT_HOST }}
          username: ${{ secrets.AWS_USERNAME }}
          password: ${{ secrets.AWS_PASSWORD }}
          port: 22
          script: |
            sudo docker rm -f $(docker ps -qa)
            sudo docker rmi ${{ secrets.DOCKER_FRONT_REPO }}
            sudo docker pull ${{ secrets.DOCKER_FRONT_REPO }}
            sudo docker run --rm -d -p ${{ secrets.AWS_PORT }}:80 ${{ secrets.DOCKER_FRONT_REPO }}

1. 환경 구축

EC2 : Amazon Linux

 

(1) EC2 아이디, 비밀번호 설정

EC2 터미널 이동 -> 아이디, 비밀번호 설정 -> 비밀번호로 접근 허용

깃허브에서 EC2에 접근하는 방법은 비밀키를 만들 수도 있지만 간단하게 아이디, 비밀번호를 통해 접근할 수도 있다.

 

GitHub - appleboy/ssh-action: GitHub Actions for executing remote ssh commands.

GitHub Actions for executing remote ssh commands. Contribute to appleboy/ssh-action development by creating an account on GitHub.

github.com

위 링크에서 키를 만드는 방법을 볼 수 있다.

 

나는 비밀번호를 통해 접근하도록 설정할 것이다.

EC2 터미널 이동후 아래 코드 작성

sudo passwd ec2-user

나는 기본으로 주어지는 ec2-user 에 대해서 비밀번호를 설정하고 접근을 허용해줄 예정이다.

 

 

sudo vi /etc/ssh/sshd_config

PasswordAuthentication 부분을 yes로 변경하고 저장

sudo service sshd restart

sshd 다시 시작하면  아이디, 비밀번호로 ec2에 접근할 수 있다.

(2) 도커 설치

sudo yum update -y
sudo yum install docker -y
sudo usermod -a -G docker ec2-user
sudo service docker start

도커를 설치하고 권한을 준 후 도커를 실행한다.

 

도커 컴포즈까지 설치해야하면 아래와 같이 설치해준다.

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

2. Actions 추가

깃 허브 레퍼지토리에 Actions가 있다 클릭해서 추가한다.

그러면 .github/workflows에 yml파일이 하나 생성된다. git hub에서 조건에 맞으면 이 파일을 자동으로 읽는 것이다.

 

3. yml 파일 작성

on:
  push:
    branches:
      - prod

yml파일을 작동시킬 조건을 적는 곳이다.

위 같은 경우는 prod 브런치에 push 하는 이벤트를 on 하도록 설정해줬다.

 

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build & Push the Front Docker image
        uses: docker/build-push-action@v2
        with:
          context: ./frontend
          file: ./frontend/dockerfile
          push: true
          tags: ${{ secrets.DOCKER_FRONT_REPO }}
          build-args: |
            REACT_APP_BASE_URL=${{ secrets.REACT_APP_BASE_URL }}
            REACT_APP_FABRIC_URL=${{ secrets.REACT_APP_FABRIC_URL }}

      - name: Deploy Front to prod
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.FRONT_HOST }}
          username: ${{ secrets.AWS_USERNAME }}
          password: ${{ secrets.AWS_PASSWORD }}
          port: 22
          script: |
            sudo docker rm -f $(docker ps -qa)
            sudo docker pull ${{ secrets.DOCKER_FRONT_REPO }}
            sudo docker run --rm -d -p ${{ secrets.AWS_PORT }}:80 ${{ secrets.DOCKER_FRONT_REPO }}

ubuntu-latest 환경에서 작동하도록 설정하고

name은 적고 싶은걸 적으면 된다.

uses는 정해진 형식이 있다.

나는 appleboy/ssh-action@master 라는 정해진 action을 사용했고 틀을 맞춰주었다.

 

screts 는 github에서 제공하는 비밀 변수이다. .env라고 생각하면 된다.

해당 github 레퍼지토리 -> settings -> secrets and variables -> Actions 에서 키값과 밸류값을 설정할 수 있다.

 

HOST_DEV는 이부분을 넣으면 된다.

USERNAME 은 ec2-user, PASSWORD는 아까 설정한 비밀번호를 넣어주면 된다.

 

도커를 이미 알고있다면 위 코드들을 보면 흐름을 이해할 수 있을 것이다.

도커 컨테이너 전체 제거 ->  이미지 pull -> 이미지 실행

4. 자동배포

prod 브런치에 푸시하면 자동배포가 시작된다.

이렇게 볼수 있고 클릭해서 보면 실시간으로 진행되는 과정도 볼수 있다.

 

728x90
반응형

'개발 > Devops' 카테고리의 다른 글

[Devops] ELK 디스크 부족 이슈 S3로 해결하기 - ubuntu 22.04  (0) 2023.11.23
[Devops] ELK Stack 8.x 설치 - ubuntu 22.04  (0) 2023.11.13
[Devops] spring boot 블루/그린 무중단 배포 (gitlab ci, docker, nginx)  (0) 2023.06.19
[Devops] react 무중단 배포 (gitlab ci, s3, cloudfront)  (0) 2023.06.19
[Devops] github actions로 자동 배포 설정하기 (nodejs 배포)  (1) 2023.02.16
'개발/Devops' 카테고리의 다른 글
  • [Devops] ELK Stack 8.x 설치 - ubuntu 22.04
  • [Devops] spring boot 블루/그린 무중단 배포 (gitlab ci, docker, nginx)
  • [Devops] react 무중단 배포 (gitlab ci, s3, cloudfront)
  • [Devops] github actions로 자동 배포 설정하기 (nodejs 배포)
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    node.js
    30일챌린지
    React
    erc20
    html
    컨테이너
    하이퍼레저
    go언어
    nodejs
    명령어
    go
    ERC721
    블록체인
    프로그래머스
    30일 챌린지
    node
    mysql
    도커
    CSS
    js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[Devops] github actions로 자동 배포 설정하기 (react docker 배포)
상단으로

티스토리툴바