19.01.01 Ruby버전, Gemfile내용 수정

이 포스팅에서는 macOS환경에서 rbenv를 사용해 Jekyll블로그를 생성하고, 이를 GitHub Pages에 배포하는 방법을 다룬다.


Jekyll?

Jekyll은 일반적으로 블로그를 만들기 위해 사용하는 정적 사이트 생성기이다.
데이터베이스를 사용하지 않고 git과 같은 버전관리 시스템을 사용해 포스트들을 관리하며, 정적 웹사이트이기 때문에 단순 파일 서빙만으로 블로그를 만들 수 있다.

정적 웹 사이트라는 특징덕에 GitHub에서는 Jekyll블로그를 서빙하기 위한 시스템을 제공하며 무료로 사용가능하다.

또한 포스트(소스)의 형태를 HTML이 아닌 개발자 친화적인 다른 마크업(대부분의 경우 Markdown)을 사용할 수 있으며, 데이터베이스를 쓰지 않는다는 점은 역으로 버전관리 시스템을 사용해서 작성한 글 들을 편리하게 관리할 수 있다는 장점을 준다.

데이터베이스를 쓰지 않기 때문에 댓글기능은 타사 서비스를 사용하거나(disqus) 직접 만들어야 한다.

설치

Jekyll을 로컬환경에서 실행하기 위해서는 특정 버전 이상의 Ruby가 필요하다. macOS에 기본설치된 Ruby는 버전이 낮기때문에, 시스템의 Ruby를 업그레이드하거나 Ruby의 버전관리도구를 사용하는 방법이 있다.
개인적으로 시스템에 이미 설치된 파이썬이나 루비를 변경하는것을 선호하지 않기 때문에, 여기서는 Ruby의 버전관리도구중 하나인 rbenv를 사용한다.

Ubuntu Linux사용자들은 이 포스팅을 참조한다.

Homebrew설치

rbenv를 설치하기 위해 macOS용 패키지 관리자인 Homebrew를 이용한다.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • Homebrew에 대한 자세한 내용은 공식 페이지에서 확인 할 수 있다.
  • 이미 Homebrew가 설치되어 있는경우 brew update를 이용해 Homebrew를 최신버전으로 업데이트해준다.

이미 설치되어있던 ruby삭제

이미 Homebrew를 사용하던 경우, 앞으로 rbenv에서 Ruby의 실행을 관리할 것이므로 기존에 설치된 Ruby를 지워준다.

brew uninstall ruby

rbenv설치

brew install rbenv ruby-build

rbenv를 위한 설정을 셸 설정파일에 추가

zsh을 쓰는 경우 ~/.zshrc, 기본 bash를 쓰는 경우 ~/.bash_profile에 작성한다.

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

설정파일을 작성한 후 터미널을 종료하고 새로 열어준다

rbenv를 이용해 ruby설치, 전역에서 사용할 ruby버전 지정

➜ rbenv install 2.5.3
➜ rbenv global 2.5.3
➜ rbenv versions
  system
* 2.5.3 (set by /Users/lhy/.rbenv/version)

*표가 붙은 부분이 현재 사용하고 있는 Ruby버전을 나타낸다.

새 ruby버전 설치 후 rehash작업

rbenv rehash

rehashrbenv가 관리하는 루비 명령어들을 ~/.rbenv/shims디렉토리에 셸 스크립트 파일로 복사해주는 역할을 한다.
gem을 설치하거나 새 Ruby버전을 설치한 경우 해당 명령을 실행해주어야 하며, 위의 셸 설정파일에 추가한 rbenv init -명령어에는 rehash기능이 포함되어있다. 터미널을 새로 열면 자동으로 rehash명령이 수행되므로 위 명령어를 실행하거나 새 터미널 창을 열면 된다.

RubyGems, Gem, bundler

RubyGemsRuby패키지 관리자이며, 각 패키지는 Gem이라고 불린다. 설치해야 할 Gemjekyllbundler, github-pages이다.

일반적으로 Ruby의 패키지들은 RubyGems를 이용해 관리되며, 시스템 어디에서나 설치된 Gem들을 사용할 수 있다.
하지만 프로젝트별로 필요한 각 패키지(Gem)들의 버전이 다를 수 있으며, 이러한 의존성 문제를 해결하기 위해 bundler라는 패키지를 사용한다. (bundler역시 RubyGem의 패키지이다)
bundlerGemfileGemfile.lock파일을 이용해 현재 프로젝트 폴더에서 사용하는 패키지 버전들을 관리한다.

github-pagesGitHub에서 사용하는 Jekyll과 관련된 의존성 패키지들을 지원하는 Gem이다. 로컬에서 Jekyll을 이용해 사이트를 생성할때와는 다르게, GitHub에 코드를 업로드 했을 때 자동으로 사이트가 생성될 때는 GitHub에서 사이트가 생성되기 위한 여러 요소들이 필요한데, 이러한 부분들을 처리해주기 위한 지원 패키지 역할을 한다.

gem install jekyll bundler github-pages

Jekyll블로그 생성 및 로컬 실행

필요한 Gem들을 설치한 후, Jekyll블로그를 생성할 폴더의 상위 폴더에서 아래 명령을 실행하고 결과를 확인한다.

➜ jekyll new <블로그명>
➜ cd <블로그명>
➜ ls -al
drwxr-xr-x   9 lhy  staff   306B  6 17 17:13 .
drwxr-xr-x@ 61 lhy  staff   2.0K  6 17 17:12 ..
-rw-r--r--   1 lhy  staff    35B  6 17 17:13 .gitignore
-rw-r--r--   1 lhy  staff   953B  6 17 17:13 Gemfile
-rw-r--r--   1 lhy  staff   1.2K  6 17 17:13 Gemfile.lock
-rw-r--r--   1 lhy  staff   1.4K  6 17 17:13 _config.yml
drwxr-xr-x   3 lhy  staff   102B  6 17 17:13 _posts
-rw-r--r--   1 lhy  staff   525B  6 17 17:13 about.md
-rw-r--r--   1 lhy  staff   213B  6 17 17:13 index.md

github-pages버전을 동적으로 설정하도록 Gemfile을 아래 내용으로 덮어씌운다.

Gemfile

source 'https://rubygems.org'

# github-pages
require 'json'
require 'open-uri'
versions = JSON.parse(open('https://pages.github.com/versions.json').read)
gem 'github-pages', versions['github-pages'], group: :jekyll_plugins


#ruby RUBY_VERSION

# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
#     bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
# gem "jekyll", "3.4.3"

# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "minima", "~> 2.0"

# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins

# If you have any plugins, put them here!
group :jekyll_plugins do
   gem "jekyll-feed", "~> 0.6"
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

실행 전 bundle로 관리되는 패키지들을 업데이트 시켜준다

gem install bundler
bundle update
bundle install

실제 정적 사이트를 생성하고, 테스트를 위한 로컬 서버를 실행한다.

bundle exec jekyll serve

127.0.0.1:4000으로 접속하면 아래와 같은 페이지를 확인할 수 있다.
Jekyll_Welcome

글 작성

Jekyll의 글은 기본적으로 Markdown을 사용하며, _posts폴더내부에서 YYYY-MM-DD-title.markdown형식을 가진 파일 하나당 하나의 글이 된다.

기본예제에 글이 하나 있으니 해당 내용을 기반으로 새 글을 작성해본다. 이 포스팅에서는 Jekyll에서의 글 작성법이나 문법은 다루지 않는다. 자세한 내용은 아래의 링크를 참조한다.

Jekyll 공식사이트 (영문)
Jekyll 공식사이트 (한글)

GitHub에 배포

로컬에서 jekyll serve명령어를 사용하면 _sites폴더가 생성되며, 해당 폴더의 내용들이 정적 사이트 생성 결과물이 된다.
GitHub Pages에 배포할 때는 이 결과물이 아닌 Jekyll소스 자체를 사용한다. Gitssh의 정의와 사용법에 대해서는 설명하지 않는다.

저장소 생성

GitHub Pages를 이용해 Jekyll블로그를 만들 때는, <자신의 유저명>.github.io라는 이름의 저장소를 만들어야 한다.
ex)LeeHanYeong사용자의 저장소 이름은 LeeHanYeong.github.io라는 이름을 가져야 한다.

Pages_Repository Pages_Repository

로컬 git저장소 생성 및 .gitignore작성

Jekyll블로그 폴더에서 실행한다. 리모트 저장소 주소를 git@으로 시작하고 싶다면 GitHub계정에 SSH-Key가 등록되어 있는 상태여야 한다.

Ruby, macOS, Jekyll에서 Git으로 버전관리에서 제외할 파일 목록을 위해 .gitignore파일을 생성해준다

vi .gitignore

내용에는 .gitignore(Ruby, Jekyll, macOS)의 내용을 붙여넣는다.

리모트 저장소에 push

.gitignore파일을 작성한 후 아래와 같이 리모트 저장소에 로컬 저장소의 내용을 업로드한다.

➜ git init
➜ git add -A
➜ git commit -m 'First commit'
➜ git remote add origin git@github.com:LeeHanYeong/LeeHanYeong.github.io.git
➜ git push origin master

작동확인

Jekyll_GitHub_Pages