April 27, 2014

OpenShift に Jekyll をホスティングした話

  • jekyll は Ruby で書かれた、いわゆる static site generator というやつ
  • これをベースにした Octopress なんかが有名
  • Ruby より Python が好きな人は Pelican を使うようだ
  • Jekyll にしろ、Octopress にしろ Pelican にしろ、GitHub Pages に簡単にホスティングできるっつーことで人気らしい
  • なお、一般的に以下の手順でブログを生成、アップロードするそうだ
    1. vim なり markdown エディタで記事を書く
    2. html ジェネレートコマンド叩く
    3. 内蔵のローカルサーバ (WEBrick の様だ) を立ち上げてブラウザで確認
    4. rakemake コマンドで GitHub Pages や Amazon S3 にアップロード
  • つまり、ローカル環境に jekyll なり octopress なり実行できる環境整えて、コマンドを叩かねばならない
    • いかにシンプルに git で記事を管理できるとは言え、たかが blog を書くだけに大げさである
    • ・・・というわけで、その環境も一緒に全部 OpenShift に乗せればよくね?というのが始まり

OpenShift に Jekyll をホスティングするとどうなるか

  • 記事を書くクライアントには git コマンドと適当なエディタだけあれば良い
    • jekyll なり octopress のコマンドは OpenShift 上で叩かれる
  • つまり手順が以下のようになる
    1. 記事を適当なエディタで書く
    2. git add, git commit, git push で OpenShift にデプロイ、終了
  • なにこれハイパー楽である
    • 更に git commitgit now にしちゃうとすげー楽

OpenShift の話

  • OpenShift の良いところ
    • 3 インスタンス (最小スペック) まで無料
      • これはホントに無料
      • クレカ登録すら不要
    • 昔触ったときは Custom domains や Auto scaling は無償枠だとダメだった気がするんだけど、今は無償枠でいけるようだ
      • ちなみにサービス開始当初は確か OpenShift Express, OpenShift Flex, OpenShift Power ってサービススタックだった気がするけど、いまは OpenShift Online という様だ
    • ssh で入れる(・・・!)
      • 自由度半端ない
      • 普通に入って bash が叩ける圧倒的安心感
      • bashenv みると大体の作りが分かる
      • デプロイに失敗したときなどトラブルシューティングが比較的しやすい
    • オートスケール、楽勝です
      • ha-proxy ベースの様だ
      • カートリッジ作成時にチェックを入れるだけ (または rhc app create <app name> -s)
      • 無償枠でも 3 インスタンス分あるので、いきなり 3 台分オートスケールいける
  • OpenShift の不満なところ
    • 無償枠のインスタンスは確か Amazon EC2 で動いていたと記憶しているんだけど、これ恐らく日本じゃないリージョンの様だ
      • つまるところ、ssh なり git のアクセスがちょっと待たされる感ある
      • 180 ms くらい待ちある
      • 我慢できるけど、そのうち途中に master レポつくって hook から aync で投げるようにしたい

やったこと

  • OpenShift のクイックスタートに Jekyll は用意されている
  • ソースの bin/control みると分かるんだけど、path の指定方法がちょっと不十分に見える
    • というわけで、このレポから fork された codemiller/openshift-jekyll-cartridge を利用しようと思った
    • けど、別の問題もあって jekyll コマンド実行時に LANG 指定しておかないと日本語の記事をビルドしてくれない・・・
    • 結局 fork して追記した
$ rhc app create blog https://raw.github.com/kazuhisya/openshift-jekyll-cartridge/master/metadata/manifest.yml  -s
  • 最後の -s はオートスケールにするために付けた
  • あとは簡単
  • 適当なテーマを適用して、記事を作る
$ cd blog
$ vim _posts/2014-04-18-hello-world.md
  • 最後に git add, git commitgit push で終了
$ git add -A; git commit -m "hello world"; git push

© Kazuhisa Hara 2014-2018