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