static file 기반 블로엔진인 Hexo에서 테마로 icarus 를 사용하려고 한다. 여기서는 icarus theme를 git으로 설치한다. 그리고 최신 버전으로 업그레이드 하는 과정을 살펴본다. 또한 icarus theme의 구성 파일에 대해서 좀 더 세부적으로 살펴본다.
hexo의 구성 파일 _config.icarus.yml 에 새 icarus 테마 버전을 명시한다.
1
version:5.1.1
hexo 서버를 재시작해 정상적으로 동작하는지 확인한다. 그런데 필요한 npm 모듈 업그레이들 요구한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
$ hexo server INFO Validating config Inferno is in development mode. INFO ======================================= ██╗ ██████╗ █████╗ ██████╗ ██╗ ██╗███████╗ ██║██╔════╝██╔══██╗██╔══██╗██║ ██║██╔════╝ ██║██║ ███████║██████╔╝██║ ██║███████╗ ██║██║ ██╔══██║██╔══██╗██║ ██║╚════██║ ██║╚██████╗██║ ██║██║ ██║╚██████╔╝███████║ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ =============================================
ERROR Package hexo-component-inferno's version (1.1.0) does not satisfy the required version (^2.0.2). ERROR Please install the missing dependencies your Hexo site root directory: ERROR npm install --save hexo-component-inferno@^2.0.2 ERROR or: ERROR yarn add hexo-component-inferno@^2.0.2
정상적으로 업그레이드 되어서 server가 실행되는 것을 확인할 수 있다. 단, hexo clean 이후 에러를 만날 수 있어 보인다.
업그레이드 후 db.json 에러 대응
clean 해서 새로 생성하기 위해서 clean 명령후 generate 를 2번 정도 실행하면 보통는 db.json 에러가 없어지는데 업그레이드 후 아래 같이 계속 발생한다.
1 2 3
INFO === Registering Hexo extensions === FATAL Error: [hexo-include-markdown] Could not open db.json . at ReadFileContext.callback (/Users/qkboo/work-blog/thinkbee.github.io/node_modules/hexo-include-markdown/lib/orverwriteCache.js:22:15)
--- layout:post title:"Welcome to Jekyll!" date:2017-05-03 18:53:47+0900 categories:jekyllupdate ---
빈 메타 정보는 빈 두개의 — 로 둔다.
Front matter 에 사용할 수 있는 내장된 변수는 다음 같다:
변수
설명
layout
사용할 레이아웃 파일을 지정한다. 레이아웃 파일명에서 확장자를 제외한 나머지 부분만 입력한다. 레이아웃 파일은 반드시 _layouts 디렉토리에 존재해야 한다.
permalink
생성된 블로그 포스트 URL 을 사이트 전역 스타일 (디폴트 설정: /year/month/day/title.html)이 아닌 다른 스타일로 만드려면, 이 변수를 사용하여 최종 URL 을 설정하면 된다.
published
사이트가 생성되었을 때 특정 포스트가 나타나지 않게 하려면 false 로 설정하라.
category,categories
포스트를 특정 폴더에 넣지 않고, 포스트가 속해야 하는 카테고리를 하나 또는 그 이상 지정할 수 있다. 사이트가 생성될 때, 포스트는 그냥 평범하게 이 카테고리들에 속한 것처럼 동작한다. 두 개 이상의 카테고리들을 지정할 때에는 YAML 리스트 또는 쉼표로 구분된 문자열을 사용한다.
tags
카테고리와 유사하게, 하나 이상의 태그를 포스트에 추가할 수 있다. 또 카테고리와 동일하게, YAML 리스트 또는 쉼표로 구분된 문자열로 지정할 수도 있다.
외부 자원
이미지, 다운로드 파일 등을 사용할 때는 루트 디렉토리의 images, assets, downloads 라는 디렉토리를 만들고 그곳에 둔다. 그리고 해당 자원의 참조를 / 경로를 기준으로 삼으면 된다.
disqus.com 에서 새 사이트를 구성하고, Jekyll 을 선택하면 Universal code 를 얻을 수 있다.
#### Disqus Universal Code 설치
comments 변수
comments 변수를 YAML Front Matter에 추가하기 위해, Jekyll의 manima 테마에서 _layouts/post.html 에 변수를 추가해 준다.
1 2 3 4
--- layout:default comments:true ---
Universal code
`{% if page.comments %}` 와 `{% endif %}` 태그 사이에 Universal Embeded Code를 추가해 준다. manima 테마의 \_includes/disqus_comments.html 파일에 구성되어 있다. 코드에서production을 developement로 바꿔서 테스트 해보자.
파일 __includes/google-analytics.html 안의 {{ site.google_analytics }}에 Tracking ID가 치환 되는데, 이것은 _config.yml 파일 google_analytics: 항목에 본인의 Tracking ID를 입력한다.
1 2
# Google services google_analytics: UA—XXXXXXXX-X
#### default.html
이 파일을 _includes/head.html 파일에는 production 모드에서 analytics가 적용이 된다.
1 2 3
{% if jekyll.environment == 'production' and site.google_analytics %} {% include google-analytics.html %} {% endif %}
운영모드인 production 은 github 에 업로드시 자동으로 적용된다. 만약 다른 사이트에 업로드하려면 빌드를 한다. $ JEKYLL_ENV=production bundle exec jekyll build
group :jekyll_plugins do gem "jekyll-feed", "~> 0.6" gem "jekyll-paginate"
config.yml에서 활성화:
1 2 3 4 5 6 7 8
gems: - jekyll-feed - jekyll-paginate
#페이지 활성화 paginate: 6
Custom Domain
github page를 github.io 서브도메인 대신 본인의 도메인에 등록하려면 두 가지를 한다:
깃헙 페이지의 설정에서 custom domain 을 추가한다.
DNS에 CNAME을 등록한다.
Custom domain 추가
github 에서 github page 저장소의 Settings 에서 Custom Domain에 사용할 도메인 이름을 저장한다.
CNAME 등록
DNS에 CNAME 을 github의 USER_NAME.github.io 에 연결해 준다. 제대로 등록됐는지 dig 명령으로 확인한다.
1 2 3 4 5
$ dig docs.example.com +nostats +nocomments +nocmd ;docs.example.com. IN A docs.example.com. 3592 IN CNAME YOUR-USERNAME.github.io. YOUR-USERNAME.github.io. 43192 IN CNAME < GITHUB-PAGES-SERVER >. < GITHUB-PAGES-SERVER >. 22 IN A 199.27.XX.XXX