블로그 배포 (CI/CD)
블로그 배포 (CI/CD)
GitHub main 브랜치에 push하면 웹훅으로 서버에 배포를 트리거합니다.
SSH를 사용하지 않습니다. 서버가 GitHub에서 pull → 빌드 → 배포를 수행하므로, IP 제한이 있어도 동작합니다.
배포 흐름
main브랜치에 push- GitHub Actions가 서버의
/deploy-webhook으로 POST 요청 - 서버가 webhook 수신 →
git pull→ Jekyll 빌드 →/var/www/NOTE에 복사
사전 설정
1. GitHub Secret
저장소 Settings → Secrets and variables → Actions에서 추가:
| Secret | 설명 |
|---|---|
DEPLOY_WEBHOOK_SECRET |
웹훅 인증용 비밀값 (영문/숫자 조합, 32자 이상 권장) |
# 랜덤 시크릿 생성 (macOS)
openssl rand -hex 32
2. 서버 초기 설정 (최초 1회)
서버에 SSH 접속 후:
# 1. 저장소 클론 (아직 없다면)
cd /home/ubuntu
git clone https://github.com/POBSIZ/NOTE.git
cd NOTE
# 2. Jekyll 의존성 설치
cd docs && bundle install && cd ..
# 3. 웹훅 서비스 설정
REPO_PATH=$(pwd)
sudo cp docs/tools/deploy-webhook.service /etc/systemd/system/
sudo sed -i "s/changeme/YOUR_SECRET/" /etc/systemd/system/deploy-webhook.service
sudo sed -i "s|REPO_PATH|$REPO_PATH|g" /etc/systemd/system/deploy-webhook.service
sudo systemctl daemon-reload
sudo systemctl enable deploy-webhook
sudo systemctl start deploy-webhook
# 4. nginx에 webhook 경로 추가
# /etc/nginx/sites-available/NOTE 의 server 블록 안에 추가:
#
# location = /deploy-webhook {
# proxy_pass http://127.0.0.1:9000;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-Proto $scheme;
# }
#
sudo nginx -t && sudo systemctl reload nginx
3. GitHub Secret과 서버 Secret 일치
DEPLOY_WEBHOOK_SECRET(GitHub)과 서버의 deploy-webhook.service 내 DEPLOY_WEBHOOK_SECRET 값이 동일해야 합니다.
수동 배포
Actions 탭 → Deploy Blog → Run workflow
파일 구조
| 파일 | 용도 |
|---|---|
.github/workflows/deploy.yml |
push 시 webhook 호출 |
docs/tools/deploy-webhook-server.py |
웹훅 수신 서버 |
docs/tools/deploy.sh |
서버 배포 스크립트 |
docs/tools/deploy-webhook.service |
systemd 서비스 정의 |