CreateField Blog

オープンソースを使って個人でWebサービスを開発・運営していたブログ

Deploy to HerokuボタンでGitベースのWiki gollumを無料で簡単に作れるようにした

GitHubのWikiが検索できなくて不便だなぁとか思ったりしてたら、このWikiはGitベースでできており、gollumというオープンソースで公開されていることを知りました。

github.com

そこで、ちょろっと試すためにHerokuで動くようにしてみました。 GitHubのトークンとHerokuのアカウントがあれば数分で個人用のWikiがつくれます。既存のGitHubのWikiを指定して開くこともできます。gollumには一応簡単な検索機能はあるようです。

Deploy

naoa/gollum-on-heroku · GitHub

  • デモ

Gollum on Heroku

追加機能

Herokuでの利用を想定して以下の機能を追加しています。

  • GitHubへの同期

gollumでは更新があるとローカルのgitリポジトリにcommitされます。そのため、Herokuではdynoが再起動されると更新が消えてしまいます。

そこでサーバ起動時にGitHubのリポジトリをcloneし、Wikiが更新されると自動的にGitHubにpushするようにしています。*1

  • Basic認証

gollumのフロントエンドはSinatraで非常にシンプルに実装されており、認証機能などはありません。環境変数で全ページもしくは編集機能のみをBasic認証を設定できるようにしています。

  • 複数のgitリポジトリを利用可

1つのgitリポジトリだけでなく、複数のgitリポジトリを指定して起動できるようにしています。

必要なもの

環境変数で以下を指定する必要があります。

  • GitHubのPersonal access tokens GITHUB_TOKEN

これを指定しておかないと、Heroku上で直接更新しても再起動時に消えてしまいます。*2 GitHubのsettings -> Personal access tokensから取得することができます。

  • リモートのgitリポジトリのURL GIT_REPO_URL_1 GIT_REPO_URL_2~

wikiによって生成されたmdファイルなどが保存されるgitリポジトリを指定します。 既存のGitHubの任意のリポジトリのwikiを直接指定することもできます。*3 複数指定することができます。複数指定した場合、リポジトリ名ごとにURLが割り当てられます。*4

  • 編集者のアカウントAUTHOR_NAME emailアドレス AUTHOR_EMAIL

git config user.name, user.emailとかで設定するやつを設定しておきます。 これがないとGitHubのコミット履歴がunknownになっちゃいます。*5

  • Basic認証用のアカウント BASIC_AUTH_USERNAME BASIC_AUTH_PASSWORD

認証が必要な場合。編集機能のみを保護したい場合はBASIC_AUTH_MANAGE_ONLYにtrueを設定します。

  • その他gollumの起動オプション GOLLUM_~

gollumの起動オプションを指定できます。詳細は以下参照。

https://github.com/gollum/gollum#configuration

おわりに

gollumは非常にシンプルでちょっとした個人用のwikiをさくっと使うためにはいいかもしれません。 またSintatraベースでカスタマイズしやすそうです。

共同で利用するには、OAUTH認証を追加したりsession['gollum.author']を設定したり、もう少し手を加える必要がありそうです。

*1:サイズがでかくなってくるとcloneに時間がかかるようになり、起動が遅くなるかも。

*2:ローカルなどで更新してDeployするだけであれば、なくてもいいかもしれません。

*3:GitHubのwikiってリポジトリ名に.wikiってつけてgit cloneなどすると直接取得できるんですね。初めて知りました。たとえば、https://github.com/naoa/test.wiki

*4:その場合、今のところルートはなにもありません。

*5:ちなみにGitHubのコミットログってアカウントの認証関係なく、適当にemailアドレス設定すると勝手に人の名前使えそうですね。