docker-compose で imgur を使わない HackMD 環境を構築

HackMD(https://hackmd.io/) は Webブラウザで動く Markdown エディタです。

HackMD の素晴しい特徴として複数のクライアントによるリアルタイム同時編集機能があります。1人でも Web ブラウザを複数起動させれば試せるのでぜひ実際に試してみていただきたいのですが、複数の編集がリアルタイムに画面に反映されるのは今までにない体験で、かなり楽しいです。使いどころを問われると答えに窮しますが、それはこれから探っていくとして……。

この HackMD の OSS として CodiMD があります。CodiMD は公式が docker-compose.yaml を提供してくれているので自分でも簡単に環境構築を行えます。

この際、一つだけ落し穴があって注意する必要があります。HackMD は編集画面上に画像をそのままペーストできるのですが、その時の画像の保存先がデフォルトで imgur なので Ctrl + V した瞬間に全世界に公開されてしまうのです。これはうっかり大惨事を引き起しかねません。

docker-compose.yaml を数行変更するだけでこれを回避できるので、今回はその手順で環境を構築してみます。普段は Debian なのですが、今回は使っているサーバの都合で Ubuntu 18.04 LTS です。

ubuntu@dev:~$ cat /etc/os-release | grep VERSION=
 VERSION="18.04.2 LTS (Bionic Beaver)"
ubuntu@dev:~$ git clone https://github.com/hackmdio/docker-hackmd.git
 Cloning into 'docker-hackmd'…
 remote: Enumerating objects: 731, done.
 remote: Total 731 (delta 0), reused 0 (delta 0), pack-reused 731
 Receiving objects: 100% (731/731), 222.28 KiB | 702.00 KiB/s, done.
 Resolving deltas: 100% (343/343), done.

docker-hackmd/docker-compose.yml を編集します。app の environment 下に CMD_IMAGE_UPLOAD_TYPE と CMD_DOMIN を追加します。CMD_IMAGE_UPLOAD_TYPE の指定だけではエラーを吐くらしいので CMD_DOMAIN も指定します。

もう一つ、自分の場合は CMD_URL_ADDPORT = false を追加しました。これを入れないとすべての URL に :3000 が付加されてしまい、サイトの表示が崩れてしまいました。直接ポートを指定して使う場合は問題になりませんが、今回は Nginx によるリバースプロキシを経由してサブドメインで運用する予定なのでポートの指定は不要でした。

   - HMD_DB_URL=postgres://hackmd:hackmdpass@database:5432/hackmd
   - CMD_IMAGE_UPLOAD_TYPE = filesystem
   - CMD_DOMAIN = hmd.kuratsuki.net
   - CMD_URL_ADDPORT = false
 ports: 

編集が完了したら docker-compose up して HackMD を起動します。

ubuntu@dev:~/docker-hackmd$ sudo docker-compose up -d
 [sudo] password for ubuntu:
 Pulling database (postgres:9.6-alpine)…
 9.6-alpine: Pulling from library/postgres
 bdf0201b3a05: Pull complete
 365f27dc05d7: Pull complete
 bf541d40dfbc: Pull complete
 2042c4eafdd8: Pull complete
 925cd0367a3b: Pull complete
 47c141dded4c: Pull complete
 751c0956cd65: Pull complete
 a9a85eacf5bb: Pull complete
 ba84e9ab01c0: Pull complete
 Pulling app (hackmdio/hackmd:1.2.0)…
 1.2.0: Pulling from hackmdio/hackmd
 f189db1b88b3: Pull complete
 3d06cf2f1b5e: Pull complete
 687ebdda822c: Pull complete
 99119ca3f34e: Pull complete
 e771d6006054: Pull complete
 b0cc28d0be2c: Pull complete
 7225c154ac40: Pull complete
 7659da3c5093: Pull complete
 8138c3c27b70: Pull complete
 3ac8c3e5ade3: Pull complete
 b2c8cd9cc032: Pull complete
 53f21b305291: Pull complete
 bb60fd15638c: Pull complete
 6b6e9067f162: Pull complete
 Creating docker-hackmd_database_1 … done
 Creating docker-hackmd_app_1      … done

起動したら http://CMD_DOMAINで指定した名前またはIPアドレス:3000/ を開きましょう。ここで CMD_DOMAIN とは異なる名前でアクセスすると画面が思いっきり崩れます。CSS を相対 URL 指定ではなく絶対 URL 指定しているようです。

docker-compose up は初回だけで、2回目以降は docker-compose start/stop を使いましょう。環境を再構築したいときは docker-compose rm で一旦削除するだけです。docker-compose は便利ですね。

参考

  • https://github.com/hackmdio/codimd/blob/master/README.md