gollum をつかってみたい

rails について調べていたら、gollumにたどり着いた。
git で管理される wiki アプリケーションだそうだ。
readme 通り素直には進められなかったので、メモしておきたい。

目次

参考

実行環境

  • OS:CentOS7
  • nginx 1.16.1
  • ruby2.5.7(rbenv により導入)

導入

gollum インストール

1
2
3
4
5
6
7
8
mkdir gollum
cd gollum
#yum group install -y "Development Tools"

gem install gollum

#エラー発生
#CMake 3.5.1 or higher is required. You are running version 2.8.12.2 等々

qiita - [Linux][cmake] 最新の cmake をインストールする方法を参考に cmake を更新する。

1
2
3
4
5
6
7
8
9
cd ~
wget https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz
tar xvf cmake-3.6.2.tar.gz
cd cmake-3.6.2
./bootstrap && make && make install

#バージョン確認
cmake --version
#=>cmake version 3.6.2
1
2
3
4
5
6
7
8
9
cd ~
cd gollum
gem install gollum
# Cmakeのバージョンを上げたことでインストールが通るようになる
# 15分くらいかかった。

git init
gollum .
# 4567番ポートで起動する。

4567 番ポートでアプリケーションが起動するので、nginx に 4567 番へのポート転送を設定する。
(ポート設定で 80 番を設定してあげるのでもいいだろうけれども)

/etc/nginxnginx.confを以下のように作成する。

/etc/nginxnginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://localhost:4567;
}
}
}

作成できたら、sudo nginx -s reloadで設定を再読み込みする。
ブラウザで設定したサーバーにアクセスする。

すると、以下の画面になる。

github の wiki っぽさ。
最初から編集画面が開くので面食らうが、要はトップページを一番最初に作れということらしい。

そのあともう 1 ページ作成し、「Overview」を開くと次のようになります。

gollum の管理する git のディレクトリでgit logを実行してみます。
結果は、次のようになります。

git log実行結果
1
2
3
4
5
6
7
8
9
10
11
12
# git log
commit 200bf26d490977c0f04f76d3b377094cc3e167a9
Author: Anonymous <anon@anon.com>
Date: Fri Apr 10 23:49:21 2020 +0900

Created roverC買いたかった (markdown)

commit 7769d15513944636d09d709f9ddba8007b667f21
Author: Anonymous <anon@anon.com>
Date: Fri Apr 10 23:47:40 2020 +0900

Created Home (markdown)

確かに、ファイルの作成が git 管理されています。
すごい。

調べると、「マルチバイト文字の対応がよくない」という記述を見かけましたが、今のところ問題なし。github-markdowngem を導入して、一部対応しない標準のマークダウンの記法に対応させるというんものもありましたが、こちらも問題なし。
gollum を単独でインストールして稼働させても実用上確認した限り問題なかった。

バックグラウンド実行

gollum .をコマンドラインから実行することで試してきたが、ssh を切断すると gollum は停止してしまう。
なので、バックグラウンド実行させる。
nohup gollum . &を用いて実行します。

こちらで、ssh を切断しても gollum の実行が継続します。

systemd サービスとして実行する

マークダウン Wiki Gollum の紹介と導入に、
systemd サービスとして実行をしている方がいらっしゃるので、こちらを参考にします。

/etc/systemd/system/gollum.serviceを以下の通り作成しました。

/etc/systemd/system/gollum.service
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Gollum wiki server
After=network.target

[Service]
Type=simple
ExecStart=/root/.rbenv/versions/2.5.7/bin/ruby /root/.rbenv/versions/2.5.7/bin/gollum /root/gollum
Restart=always

[Install]
WantedBy=default.target

こちらが作成できたら、以下のコマンドで起動します。

1
2
3
systemctl daemon-reload
systemctl restart gollum.service
systemctl enable gollum.service

再度ブラウザから、アクセスすると gollum が開きます。
一度 reboot してみましたが、起動時点で gollum が起動できました。
サービス登録できました。

カスタマイズ

css

起動時に--cssをつけると、管理対象のディレクトリにあるcustom.cssを読み込むようになります。

custom.css を以下のように作成しました。

custom.css
1
2
3
4
h1 {
border-left: 4px solid #f00;
margin-left: 10px;
}

試しに、h1 要素の左側に赤い線を入れてみました
注意点は、設置した後にgit commitする必要がありました。

ブラウザでの表示は次のようになります。

ファイルアップロード

--allow-uploadsをつけて起動する、ことで gollum のエディタに画像をドラッグするだけでアップロードできるようになる。

編集禁止

--no-editをつけて起動することで、編集禁止にできた。
次のように、編集にかかわるメニューが削除される。

サイドバー と ヘッダー、フッター

管理対象のディレクトリに_Sidebar.mdを作成することでサイドバーとして読み込むようになります。

ブラウザでの表示は次のようになります。

今度は、フッターを作成します。
管理対象のディレクトリに_Footer.mdを作成することでフッターとして読み込むようになります。

今度は、ヘッダーを作成します。
管理対象のディレクトリに_Header.mdを作成することでヘッダーとして読み込むようになります。
「ここがヘッダー」の部分です。

「ヘッダーをそこに差し込まれましても」な感じなので、あんまり用途無いような気がします。
(後述のレイアウト変更をしてから使えば有効とは感じます。)

サイドバー と ヘッダー、フッターの編集は、記事の編集画面から行えます。

絵文字有効化

--emojiをつけて起動することで、次のように絵文字を使えるようになります。

使用できる絵文字の範囲が、掴み切れなかったのが残念なところ。
:smile:とか:cry:は使用できた。

独自テンプレートの使用

--template-dir [テンプレートのディレクトリ]を指定することで、独自のテンプレートを充てることができます。

/root/.rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/gems/gollum-5.0.1/lib/gollum/templatesに標準テンプレートを発見。
こちらをコピーして使います。
gollum に管理させるのディレクトリにtemplatesディレクトリを作成して、そこにコピーします。

すべてのページに変更を試みるときは、layout.mustacheを編集します。

layout.mustache(抜粋)
1
2
3
4
5
6
<body>
<div>
<h1>タイトル</h1>
</div>
<div class="container-lg clearfix">{{{yield}}}</div>
</body>

編集して、--template-dir [作成したtemplates]を与えて実行します。
「タイトル」の部分が表示されるようになりました。

gollum の管理するディレクトリの配下にテンプレートが入ることで、gollum で gollum のテンプレートを編集できるのでは?と期待しました。
結果として.mustacheファイルは、ダウンロードされました。残念です。
別のディレクトリに、作ればよかったな感じます。


今回は、gollum を導入して簡単なカスタマイズを試しました。
データベースを使用しなくとも、CURD がすべてできるというのが素晴らしいと感じました。
編集禁止機能を使用して立ち上げた gollum と別ポートで立ち上げた制限なしの gollum を共存させれば、
編集用と公開用の分離もできます。
認証機能は、nginx 側でフォローすればイイでしょう。

ではでは。