Github actions 과 Docker를 통한 자동 배포 설정

dawoon·2024년 9월 10일

프로젝트 진행 중 작성한 코드를 "명령 프롬프트(cmd)", "VSCode" 등에서 업데이트를 하다보니 매번 Github에 커밋, pull, push 등의 작업에 번거로움을 느껴 찾아보니 자동 배포를 설정할 수 있다는걸 알게 되었습니다.

자동 배포의 여러가지 방법 중 Github actions 과 Docker를 통해 설정을 진행하고 이를 작성해두려고 합니다.

1. GitHub Repository에 Workflow 파일 생성하기

  • VSCode가 GitHub와 연결되어 있어 업로드가 편리하기 때문에 VSCode로 해당 단계를 진행하였습니다.

(1-1) .github/workflows 디렉토리 생성

  • GitHub에서 사용 중인 프로젝트의 레포지토리에 .github 디렉토리 생성 후 내부에 workflows 디렉토리를 생성합니다.
  • 디렉토리 구조 예시
your-project/
│
├── .github/
│   └── workflows/
│       └── deploy.yml  # GitHub Actions 설정 파일
│
├── src/
│   └── ...
├── Dockerfile
├── README.md
└── ...

(1-2) deploy.yml 파일 생성 및 내용 작성

  • workflows 디렉토리 내부에 deploy.yml 파일을 만들고, 기본적으로 Docker 컨테이너를 빌드하고 서버에 배포할 수 있는 간단한 설정을 작성합니다.
name: Deploy to Server

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Build Docker image
      run: |
        docker build -t your-dockerhub-username/my-app:latest .

    - name: Deploy to server
      env:
        HOST: ${{ secrets.SERVER_IP }}
        USER: ${{ secrets.SSH_USER }}
        PASSWORD: ${{ secrets.SSH_PASSWORD }}
      run: |
        sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USER@$HOST "docker pull username/my-app && docker stop my-app && docker rm my-app && docker run -d --name my-app -p 80:80 username/my-app"

파일 작성 시 수정해야 하는 부분

  • Docker 이미지 이름 및 태그
    username/my-app은 Docker Hub에서 사용할 사용자 이름과 이미지 이름을 나타냅니다.
    (1) username 부분은 본인의 Docker Hub 사용자 이름으로 변경합니다.
    (2) my-app 부분은 프로젝트에 맞는 이미지 이름을 변경합니다.
    (3) Docker는 기본적으로 latest 태그를 사용하지만, 명시적으로 태그를 일관되게 사용하는 것이 좋습니다.
- name: Build Docker image
  run: |
    docker build -t username0117/FirstProject:latest .

  • Docker 컨테이너 이름
    현재 컨테이너 이름은 "my-app"으로 설정되어 있습니다.
    다른 이름을 사용하고 싶다면 이 부분도 수정 가능합니다.
    ⭐대문자 사용 불가!!
    예시 (your-app-name으로 수정 시)
docker stop your-app-name && docker rm your-app-name && docker run -d --restart unless-stopped --name your-app-name -p 80:80 your-dockerhub-username/your-app-name
  • 이 구성에서 중요한 부분
    (1) push 이벤트는 main 브랜치에 변경 사항이 발생할 때 트리거됩니다.
    (2) GitHub Actions가 도커 이미지를 빌드하고, SSH를 통해 서버에 접속하여 도커 컨테이너를 업데이트합니다.
    (3) "--restart unless-stopped" 옵션을 사용해 서버 재부팅 시 또는 컨테이너가 종료되었을 때 자동으로 재시작됩니다.
    (4) SSH 접속 정보는 GitHub Secrets에 설정해둡니다.

(1-3) GitHub Secrets 설정

secrets로 정의된 SERVER_IP, SSH_USER, SSH_PASSWORD는 "GitHub 레포지토리"의 Settings → Secrets and variables에서 설정해야 합니다.
이를 통해 서버의 IP 주소, SSH 사용자명, 그리고 비밀번호를 안전하게 관리할 수 있습니다.

⭐GitHub Secrets 설정 방법⭐
(1) GitHub 레포지토리의 Settings로 이동
(2) 왼쪽 메뉴에서 Secrets and variables → Actions → New repository secret 버튼을 선택하여 다음을 각각 설정

  • SERVER_IP: 서버의 IP 주소 (예: 100.100.1.100)
  • SSH_USER: 서버에서 사용하는 SSH 사용자 이름 (예:user123)
  • SSH_PASSWORD: 해당 SSH 사용자의 비밀번호

(3) 주의할 점

  • Secret 이름에는 공백이나 콜론(:), 특수 문자가 들어가면 안 됩니다.
  • 이름에는 오로지 영문 대소문자, 숫자, 언더스코어(_)만 허용됩니다.
  • Secret 이름에 콜론(:)이나 공백이 들어가 있지 않은지 다시 한 번 확인해 주세요.
  • 아래 이미지 예시와 같이 Secret을 하나씩 개별적으로 추가해야 합니다.
profile
코딩 입문

0개의 댓글