Github Page로 블로그 만들기 (with zola)
Github Pages 환경에서 zola 기반으로 정적 블로그를 생성하는 방법을 간단히 정리한다.
Github Pages의 가장 강력한 장점은 완전한 무료라는 것이다. 복잡하고 대단한 동적 렌더링 기능이 필요한 것이 아니라면 간단하고 적은 공수로 정적 페이지를 배포할 수 있다. 특히 블로그는 이러한 사용사례에 잘 맞는다.
정적 사이트 생성기에는 몇가지 선택지가 있지만, 여기서는 zola라는 오픈소스를 써보려고 한다.
빌드 성능이 꽤 빠르고 환경도 나쁘지 않다.
zola CLI 설치
프로젝트를 초기화하고 빌드하려면 전용 CLI를 설치하는 편이 좋다.
주요 패키지매니저들을 통해 제공된다.
brew install zola # MacOS
sudo pacman -S zola # Arch Linux


설치하면 다음과 같이 실행이 될 것이다.

프로젝트 초기화
빈 프로젝트에서 init을 사용하면 대화형 모드로 프로젝트 초기화를 시작한다.

적당히 기본값으로 넣어줘도 된다.
만들면 이런 식으로 프로젝트가 구성될 것이다.
content가 실제 내용물을 넣을 곳이고, static에는 이미지 파일 같은 정적리소스를 넣는 곳이다.
사용해보기
build 명령을 사용하면 즉시 컴파일해서 결과물을 public 경로에 방출한다.

다른 배포 환경이 있다면 저걸 말아서 올리면 끝이다.
로컬에서 간단하게 테스트만 해보고 싶다면 serve 명령을 사용하면 된다.


Github Page로 배포하기
먼저 페이지용 레포를 만든다.
레포 이름을 username.github.io로 해야만 username.github.io로 열리는 엔드포인트가 뚫린다.

테마 선택하기
근데 zola는 그냥 빌드용 툴체인에 불과해서, 제대로 사이트를 꾸미려면 테마를 직접 깔아줘야 한다.
https://www.getzola.org/themes/
들어가서 적당히 고르고, 거기서 안내하는대로 설치하면 된다. 난 terminus란걸 썼다.
기본적으로는 서브모듈을 받는 형태로 쓰는 편이다.

받고 toml에서 테마를 지정하면 자동으로 그걸 적용해준다. 그럴듯해졌다.
Github Action으로 배포하기
근데 귀찮은 문제가 있다. 이 zola 같은 빌드도구는 마크다운 읽어서 정적 페이지를 만들어주긴 하지만, 자동으로 해주는건 아니란 것이다.
결국 우리가 github에 마크다운 올릴때마다 그걸 인지해서 새로 빌드하고 push해주는 수단이 필요하다.
다행히 누가 이런 용도로 말아둔 액션 스크립트가 있다.
# On every push this script is executed
on: push
name: Build and deploy GH Pages
jobs:
build:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
steps:
- name: checkout
uses: actions/checkout@v6
- name: build_and_deploy
uses: shalzz/zola-deploy-action@v0.22.1
env:
# Target branch
PAGES_BRANCH: gh-pages
# Provide personal access token
TOKEN: ${{ secrets.TOKEN }}
zola 컴파일을 돌려서 gh-pages라는 브랜치에 push해주는 역할을 한다.
push하려면 토큰이 필요하니, contents write 권한을 가진 토큰만 하나 만들어서 시크릿으로 넣어주면 된다.
그러면 빌드가 돌고
이런 식으로 완성이 될 것이다.
글쓰기
글을 추가하려면 이제 content/blog에 파일만 적절히 추가하면 된다.

+++....+++ 구문으로 태그, 제목 같은 메타데이터를 정의하고, 본문은 표준 마크다운 신택스를 사용하면 된다.
그럼 잘 뜰 것이다.
이미지 등 파일 첨부
이미지를 별도로 올려서 글에 넣고 싶다면, static 경로에 먼저 파일을 올린다.

그럼 그 파일은 최종 빌드에 함께 전달되므로

그냥 그대로 마크다운 신택스를 써서 참조하면 된다.

그렇다.
참조
https://www.getzola.org/documentation/getting-started/installation/