본문으로 건너뛰기
  1. 블로그/

GitHub push 한 번으로 라즈베리파이 자동 배포하기

성경재
작성자
성경재
홈랩, 셀프호스팅, AI/ML, 데이터 분석에 관심이 많습니다.

목표
#

블로그 글을 쓸 때마다 직접 rsync로 파일을 전송하는 건 번거롭습니다. 이 글에서는 아래 흐름으로 자동화하는 방법을 정리합니다.

git push → GitHub → 라즈베리파이 자동 감지 → 빌드 → 배포

구조 개요
#

  • 맥미니: Hugo로 빌드, GitHub에 push
  • GitHub: 소스코드 저장소
  • 라즈베리파이: 5분마다 GitHub 확인, 변경사항 있으면 자동 빌드 & 배포
  • cron: 라즈베리파이에서 배포 스크립트를 주기적으로 실행하는 역할

1단계: GitHub 저장소 설정
#

GitHub에 새 저장소를 만들고 맥미니에서 push합니다.

cd codeberry
git remote add origin https://github.com/Kyungjae-Sung/codeberry.git
git branch -M main
git add .
git commit -m "Initial Hugo + Blowfish site setup"
git push -u origin main

2단계: 라즈베리파이에 Hugo 설치
#

라즈베리파이에서 직접 빌드하기 위해 Hugo를 설치합니다.

sudo apt update && sudo apt install hugo -y
hugo version
# hugo v0.131.0+extended linux/arm64

3단계: GitHub 저장소 clone
#

라즈베리파이에서 GitHub 저장소를 가져옵니다.

git clone https://github.com/Kyungjae-Sung/codeberry.git ~/codeberry
cd ~/codeberry
git submodule update --init --recursive

git submodule update는 Blowfish 테마를 함께 가져오기 위해 필요합니다.

4단계: 자동 배포 스크립트 작성
#

~/deploy.sh 파일을 생성합니다.

#!/bin/bash

SITE_DIR="~/codeberry"
WEB_DIR="/var/www/html"
LOG_FILE="~/deploy.log"

cd $SITE_DIR

# GitHub에서 최신 코드 확인
git fetch origin main >> $LOG_FILE 2>&1

LOCAL=$(git rev-parse HEAD)
REMOTE=$(git rev-parse origin/main)

if [ $LOCAL != $REMOTE ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') 새 코드 감지 - 배포 시작" >> $LOG_FILE

    git pull origin main >> $LOG_FILE 2>&1
    git submodule update --recursive >> $LOG_FILE 2>&1

    hugo --gc --cleanDestinationDir -d $WEB_DIR >> $LOG_FILE 2>&1

    echo "$(date '+%Y-%m-%d %H:%M:%S') 배포 완료" >> $LOG_FILE
else
    echo "$(date '+%Y-%m-%d %H:%M:%S') 변경 없음" >> $LOG_FILE
fi

스크립트 동작 방식:

  1. git fetch로 GitHub의 최신 커밋 정보를 가져옴
  2. 로컬 커밋과 GitHub 커밋을 비교
  3. 다르면 → pull → 빌드 → /var/www/html/ 에 배포
  4. 같으면 → “변경 없음” 기록 후 종료

실행 권한 부여:

chmod +x ~/deploy.sh

5단계: cron으로 자동 실행 등록
#

cron은 리눅스에서 특정 시간마다 명령어를 자동 실행하는 기능입니다.

crontab -e

아래 줄을 추가합니다:

*/5 * * * * ~/deploy.sh

*/5 * * * *의 의미: 매 5분마다 실행

6단계: 동작 확인
#

스크립트를 직접 실행해서 테스트합니다.

bash ~/deploy.sh
cat ~/deploy.log

출력 예시:

2026-03-23 15:06:32 변경 없음

이제 맥미니에서 git push를 하면 최대 5분 이내에 codeberry.work에 자동 반영됩니다.

앞으로의 블로그 작성 흐름
#

# 1. 새 글 폴더 생성
mkdir -p content/posts/새글제목

# 2. index.md 작성

# 3. 로컬 미리보기
hugo server -D --bind 0.0.0.0

# 4. GitHub에 push
git add .
git commit -m "새 글: 제목"
git push

# → 5분 이내 codeberry.work 자동 반영!

배포 로그 확인
#

배포가 잘 되고 있는지 언제든 로그로 확인할 수 있습니다.

# 라즈베리파이에서
tail -20 ~/deploy.log

마치며
#

cron + shell script 조합은 단순하지만 강력합니다. 별도의 CI/CD 서비스 없이도 push 한 번으로 자동 배포가 가능합니다. GitHub Actions 같은 서비스를 쓰면 더 정교하게 제어할 수 있지만, 홈서버 규모에서는 이 방식으로도 충분합니다.