こんにちは。2024年現在の感覚だと、数年前あたりからNotionというノートアプリ・サービスが人気です。僕はObsidianをメインで使ってますけどね。

その人気もあってか、近頃は自前のサーバーで動かすことができる、セルフホスティング用のNotionライクなウェブアプリがそこそこ増えてきました。

今回はその中で1番導入しやすかった、「Docmost」をDockerで導入できたので、その方法をまとめました。

Docmost

まずDocmostがどんなサービスか、公式サイトのリンクなどを貼っておきます。

Open-source collaborative wiki and documentation software | Docmost

まず公式サイトがこちら。 キャッチフレーズは「Open-source collaborative wiki and documentation software」です。共同編集ができるWikiやドキュメントを残すためのソフトウェアという感じでしょうか。

これがオープンソースで導入できるってんだから素晴らしい。

近頃はよくNotion関連の本なども増えたからか、仕事でこうした外部サービスを使う人が多いような印象があります。ただ僕が気になるのは、「そのサービス、業務で使って良いの?セキュリティポリシーに抵触しない?」ということ。

学校の先生も例外ではありません。守秘義務あるよね?個人情報じゃなくても、Notionに業務に関わる内容書いて大丈夫?勤務先の自治体で許可されてんの?と、活用事例を見るたびに心配になります。「活用する際はセキュリティポリシーの確認を」とか言いながら、活用したくなる事例を発信しまくるのも、個人的には良いこととは思えません。

そこでセルフホスティングの出番です。職場の内側にサーバーを用意できればこうした問題も解決できます。その分、サーバーを扱う知識が必要ですけどね。それでも外部のサービスに情報を置くことなく、活用できるわけです。

導入方法(Dockerでほいっ)

で、導入方法ですが、公式のドキュメントではDockerでの導入方法が記載されていました。

Installation | Docmost - Documentation

ただ後述するSMTPの設定が必要だったりするので、僕自身がGitHubで公開しているdocker-compose.ymlをCloneした方が楽かなと思います。

$ git clone https://github.com/jun3010me/docmost
$ cd docmost
$ nano docker-compose.yml

僕は楽をしたくてnanoで開いてますが、エディタは適当に。

中身はこんな感じです。

services:
  docmost:
    image: docmost/docmost:latest
    depends_on:
      - db
      - redis
    environment:
      APP_URL: "http://ドメイン名を入れる(ローカルならlocalhost):3000"
      APP_SECRET: "openssl rand -hex 32の結果を貼り付ける"
      DATABASE_URL: "postgresql://docmost:STRONG_DB_PASSWORD@db:5432/docmost?schema=public"
      REDIS_URL: "redis://redis:6379"
      MAIL_DRIVER: "smtp"
      SMTP_HOST: "メールサーバーのホスト名"
      SMTP_PORT: "587"
      SMTP_USERNAME: "メールサーバー認証用のユーザー名"
      SMTP_PASSWORD: "メールサーバー認証用のパスワード"
      MAIL_FROM_ADDRESS: "差出人のメールアドレス"
      MAIL_FROM_NAME: "Docmost"
      SMTP_SECURE: "false"
    ports:
      - "3000:3000"
    restart: unless-stopped
    volumes:
      - docmost:/app/data/storage

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: docmost
      POSTGRES_USER: docmost
      POSTGRES_PASSWORD: STRONG_DB_PASSWORD
    restart: unless-stopped
    volumes:
      - db_data:/var/lib/postgresql/data

  redis:
    image: redis:7.2-alpine
    restart: unless-stopped
    volumes:
      - redis_data:/data

volumes:
  docmost:
  db_data:
  redis_data:

日本語で書いた部分を、適宜自分の環境に合わせて編集する必要があります。あとはdbのユーザー名やパスワードがデフォルトだと不安な方も変更しとくと良いでしょう。

編集が終わったら上書き保存して、compose upしてみます。

docker compose up -d

これで指定したドメインにブラウザからアクセスすると、初期画面が表示されます。

最低限の設定

初期設定画面

ここで決めるのは、Docmostのワークスペースの管理者のアカウントです。ワークスペースの名前は後から変更できないので慎重に決める必要があります。しかもワークスペースそのものは増やせません。

次の画面

進めていくとGeneralが作成されていることがわかります。ここでGeneralをクリックして先に進みます。

Docmostの最初のページ

あとはNotionと似たような画面が出てきます。左側の一覧からページを増やすと、スラッシュコマンドを使って編集できるページが出来上がります。

各パーツで記述した様子

Notionと比べるとデータベースがないので物足りないかもしれませんが、まぁ最低限の機能はあるかなという感じです。数式がLaTex形式で貼れるのは好印象です。

他のユーザーを追加するには

ユーザー追加の画面

画面右上のワークスペース名をクリックしてManage membersを開くと、ユーザーを追加する画面が表示されます。

ただ、Docmostに新規のユーザーを追加するためには、今のところメールで招待するしかありません。個人的にはここが1番苦労したところでした。

docker-compose.ymlにはSMTP関連の記述があり、DocmostにSMTP関連の記述をすることで招待メールを送ってくれるようになります。海外のフォーラムなどを漁ってみると、コンテナ内でメールサーバーを立ち上げる記述をdocker-composeに追記しているものも発見しました。

ただDockerで気軽にメールサーバーを立ち上げたとしても、Gmailのアカウントにメールするにはハードルが高いんですよね。

Gmailへのメール送信がエラーになって返ってくる現象でお困りのお客様へ | さくらのサポート情報

僕が1番ハマったのがここでした。Gmailのアドレスに向かってDocmostの招待メールを送ろうとした時、SPFレコードやらDKIMやらDMARCやらを設定して、やっとこさ送ることができました。これが同一ネットワーク内にメールサーバーとクライアントがあるなら、もっと楽だったんだろうなぁと思います。それか、DBでポスグレを使っているので、レコードを直接増やすのもありかも。

ひとまずjun3010.meをさくらのレンタルサーバーで運用しているので、僕自身はレンタルサーバーのメールを使うことにしました。docker-compose.yml内のSMTP関連にはメールの設定資料などを見ながら追記しました。

Docmost以外の選択肢

ちなみにですが、Notionライクなウェブアプリでセルフホスティング可能なサービスがDocmost以外にもあります。

1番よくまとまっていたのがこちらのサイトでした。

Open Source Alternatives To Notion

  • Affine Pro
  • Appflowy
  • Outline

などが有力候補でした。ただ、Affine ProはMacアプリしか用意されてなかったので今回は除外しました。AppflowyはMac・Win・LinuxなどのOS用アプリが用意されていていたものの、逆にブラウザから利用できないというのがデメリットに感じたので除外。

この2つは通常利用するなら本家のサーバーを使うなら有料プランを利用する必要があり、自前でサーバーを用意してアプリ内で設定することで、無料で使える感じでした。無料で使えるのは良かったんですけどね。OSのプラットフォームに依存せず、ブラウザから使える方が利便性が高いなと思ったので今回は使いませんでした。

最後のOntlineというサービス。もう、アウトラインという名前そのものが強すぎて、普通に検索しても上位に表示されません。

公式サイトはこちら。

Outline – Team knowledge base & wiki

個人的には結構これは使えそうだなという印象でした。ただ、このサービスのサーバー側にユーザー情報を保存する仕組みが用意されておらず、シングルサインオンを行うことが前提でした。企業によってはその方がありがたいかもしれませんけどね。

ちょくちょく検索して調べてみると、このOutlineの認証にSlackが使えるそうなので、Slackを日常的に使っている企業内のナレッジ共有ツールとして利用しているブログなどを複数お見かけました。認証に使用しているサービスを使っているなら、むしろ自鯖でユーザーを管理する手間が省けるというメリットがあります。

Docmostはちょくちょくアップデートされてる

僕自身は勤務先ではMicrosoft一択なのでMicrosoft Loopを主に使っています。ただこうしたNotionライクなサービスを別で用意したい場合は、Docmostは結構使えると思いました。しかも公式のGitHubを見てみると、割と頻繁に機能を追加しているようで、これからもアップデートが楽しみだなという印象です。個人的にはこうしてブログで話題にして、少しでも利用者が増えて欲しいと思うサービスです。

DocmostのページにMarkdownの記述をコピペした様子

Markdown記法を認識してくれるのも気に入りました。Obsidianで書き溜めてきたメモをコピペするだけで、そのままDocmostのデザインとして残せますから。使いが凄く楽です。エクスポートする際はMarkdownかHTMLを選べるのもグッド。

今回、ブログ記事を書くにあたって、RaspberryPiでも動作確認ができましたし、UbuntuServerでもDockerを使って導入することができました。結構気軽に導入できるので試してみてください。

Open-source collaborative wiki and documentation software | Docmost