지킬(jekyll)로 블로그나 웹페이지를 만들거라면 열의 아홉은 github pages를 쓰고 있을테니 이 글이 크게 도움이 되지는 않겠지만, 혹시라도 로컬에서 docker를 이용해서 설치하거나 독자적인 서버를 돌릴 경우에는 참고가 되지 않을까 싶어 적어본다.

docker를 이용하는 사례는 국내 웹에서 두어 개 찾았는데 이런 마이너 정보를 찾아볼 사람이라면 어느 정도는 지식이 있다고 가정하고 그냥 아래 docker-compose.yml을 이용해서 컨테이너를 실행하면 된다.

version: '2'

services:
  jekyll:
    image: starefossen/github-pages:latest
    container_name: <your-container-name>
    restart: always
    network_mode: "bridge"
    ports:
        - 4000:4000
    volumes:
        - <your-theme-dir>:/usr/src/app
    environment:
      JEKYLL_ENV: production

이미지 이름에서도 알 수 있듯이 github-pages에서 사용하는 플러그인을 넘어서는 기능을 요구하는 페이지에 대해서는 에러를 뱉어낸다. 예를 들면 jetkyll-admin 그럴 경우에는 해당 항목을 추가 설치하는 Dockerfile을 작성해서 직접 docker image를 빌드해서 사용하는 방법 밖에는 없다. (적어도 내가 아는 한은)

대부분 사용자 옵션이며, volumes 항목만 잘 설정하면 된다. 나의 경우에는 마음에 드는 테마 github repository를 clone해서 그 경로를 mount해 주었다.

그리고 환경변수 JEKYLL_ENV가 중요한데 production으로 해주지 않으면 _config.yml에 설정한 site.url 변수가 반영되지 않고 커맨드라인 옵션에서의 hostname으로 되니 주의하길 바란다. (참고)

마지막으로 아래 예와 같이 command를 통해서 Dockerfile의 마지막 CMD를 override할 수 있다.

    command: >
      jekyll serve -d /_site --watch --force_polling -H 0.0.0.0 -P 4000

원하면 html로 publishing되는 경로인 -d /_site를 외부 경로로 mount해서 nginx의 virtualhost로 줄 수도 있다. (reverse proxy를 하면 되는데 굳이 그럴 필요가…)

이제 ftp 기능이 지원되는 에디터를 이용해서 수정/저장하면 --watch 옵션을 통해서 그 내용이 실시간 반영된다.