목표 #
블로그 글을 쓸 때마다 직접 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 main2단계: 라즈베리파이에 Hugo 설치 #
라즈베리파이에서 직접 빌드하기 위해 Hugo를 설치합니다.
sudo apt update && sudo apt install hugo -y
hugo version
# hugo v0.131.0+extended linux/arm643단계: GitHub 저장소 clone #
라즈베리파이에서 GitHub 저장소를 가져옵니다.
git clone https://github.com/Kyungjae-Sung/codeberry.git ~/codeberry
cd ~/codeberry
git submodule update --init --recursivegit 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스크립트 동작 방식:
git fetch로 GitHub의 최신 커밋 정보를 가져옴- 로컬 커밋과 GitHub 커밋을 비교
- 다르면 → pull → 빌드 →
/var/www/html/에 배포 - 같으면 → “변경 없음” 기록 후 종료
실행 권한 부여:
chmod +x ~/deploy.sh5단계: 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 같은 서비스를 쓰면 더 정교하게 제어할 수 있지만, 홈서버 규모에서는 이 방식으로도 충분합니다.