GitHub Actions 배포 설정 가이드

By | 2020년 8월 12일
Table of Contents

GitHub Actions 배포 설정 가이드

GitHub 에 Push 가 이루어졌을 때, 단일 웹서버에 배포하는 workflow 를 생성합니다.

workflow 파일 생성

.github/workflows/deploy.yml

name: Deploy to Production

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest

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

    - name: Deploy to server
      uses: appleboy/ssh-action@v1.0.3
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /home/deploy/web-repo
          git fetch origin
          git reset --hard origin/main

          # /src 디렉토리 내용을 웹 디렉토리로 복사
          if [ -d "src" ]; then
            sudo rsync -av --delete src/ /var/www/html/
            sudo chown -R www-data:www-data /var/www/html
            sudo chmod -R 755 /var/www/html
            echo "$(date): Deployment completed via GitHub Actions" | sudo tee -a /var/log/deploy.log
          else
            echo "ERROR: /src directory not found"
            exit 1
          fi

          # nginx 설정 테스트 및 재로드
          sudo nginx -t && sudo systemctl reload nginx

서버 설정 (example.com)

deploy 계정 생성

sudo adduser deploy
sudo usermod -aG sudo deploy

deploy 계정으로 전환 후 디렉토리 설정

저장소가 Private 인 경우 Personal Access Token 설정을 미리 해 주어야 합니다.

sudo su - deploy
mkdir -p /home/deploy/web-repo
cd /home/deploy/web-repo

# 저장소 클론 (최초 1회)
git clone https://github.com/YOUR_USERNAME/YOUR_REPOSITORY.git .

SSH 키 생성

# deploy 계정에서 실행
ssh-keygen -t rsa -b 4096 -C "deploy@example.com"
# Enter 3번 눌러서 기본 설정으로 생성

# 공개키 확인 (GitHub에 등록용)
cat ~/.ssh/id_rsa.pub

# 개인키 확인 (GitHub Secrets에 등록용)
cat ~/.ssh/id_rsa

SSH 인증 설정

# deploy 계정에서 실행
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

sudo 권한 설정 (비밀번호 없이 실행)

# root 계정에서 실행
sudo visudo

# 파일 끝에 다음 줄 추가:
deploy ALL=(ALL) NOPASSWD: /usr/bin/rsync, /bin/chown, /bin/chmod, /usr/bin/tee, /usr/sbin/nginx, /bin/systemctl

웹 디렉토리 권한 설정

# root 계정에서 실행
sudo mkdir -p /var/www/html
sudo chown deploy:www-data /var/www/html
sudo chmod 755 /var/www/html

GitHub 저장소 설정

Deploy Key 등록 (저장소별)

  • GitHub 저장소 → Settings → Deploy keys
  • "Add deploy key" 클릭
  • Title: deploy@example.com
  • Key: 앞서 생성한 공개키(~/.ssh/id_rsa.pub 내용) 붙여넣기
  • "Allow write access" 체크
  • "Add key" 클릭

Repository Secrets 등록

  • GitHub 저장소 → Settings → Secrets and variables → Actions
  • 다음 시크릿들을 "New repository secret"으로 추가:

HOST: example.com

USERNAME: deploy

SSH_KEY:

/home/deploy/.ssh/id_rsa 파일의 전체 내용
—–BEGIN OPENSSH PRIVATE KEY—–
(개인키 내용)
—–END OPENSSH PRIVATE KEY—–

서버 환경 확인

필수 패키지 설치 확인

# nginx 설치 확인
sudo systemctl status nginx

# rsync 설치 확인
rsync --version

# git 설치 확인
git --version

로그 디렉토리 설정

sudo mkdir -p /var/log
sudo touch /var/log/deploy.log
sudo chown deploy:deploy /var/log/deploy.log

테스트

로컬에서 SSH 연결 테스트

ssh -i ~/.ssh/id_rsa deploy@example.com

답글 남기기