2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Joplin+S3】閉塞環境の複数サーバで同期可能なメモアプリを導入

Posted at

背景

某案件の某クライアント (データ分析チーム) がOneNoteを利用していました。しかし、新たに構築している分析環境 (AWS上のWindows) で Microsoft Office のライセンスを利用できず、代わりとなるメモアプリが必要となりました。
メモアプリに求められる条件は以下の通り。

  • フォルダを切って階層構造を作れること
  • スクショを簡単にぺたぺた貼れること
  • 複数の環境 (今回は EC2 上の Windows Server) で同期できること
    • ただしセキュリティ上、オープンな環境にデータを出してはならない
  • できれば無料

うーん、閉塞環境で同期するのがネックになりそうですかねえ (そもそもOneNoteでも無理じゃない??)。

アプリ選定

いわゆるクラウドアプリである Notion や Evernote なんかはインターネット上に出てしまうので使えません。
そもそもインターネット経由せずに同期させようと思うと、S3にファイルを置いてエンドポイント経由で連携するのが妥当と思われます。
色々調べた結果候補に残ったのが、以下の2つでした。

  • Joplin
  • Obsidian

(どっちも聞いたことなかった)

ざっくりと機能的な比較をすると...

Joplin Obsidian
記法 Markdown Markdown
階層構造
スクショぺたぺた
S3利用した同期
日本語対応 x
タグ管理 x
キャンバス x

最初はまあまあいい勝負かなと思っていたのですが、途中である事実に気が付きました。

なんと Obsidian の商用利用は毎年1人につき 50 USD かかるとのこと。
金額自体はそこまで大きくないですが、結局こういうのって手続きが面倒なので、無料か1円以上かみたいなところありますよね。

JoplinはOSSで無料です。じゃあ、Joplinにしましょう!

構成図

image.png

プライベートサブネット上のインスタンス2台にJoplinをインストールし、同期できるか検証します。
実際の案件は専用線で接続しますが、今回はあくまでJoplinの導入が目的なのでそこはスルーします。

環境

  • Amazon EC2 (Windows Server 2022 Datacenter)
  • Joplin 2.13.15

導入手順

VPC、EC2インスタンス、S3バケット、エンドポイントの作成

この辺りは情報がたくさんあると思いますので割愛します。
インスタンスは無料利用枠のもので十分です。
セキュリティグループ設定で、各インスタンスがRDP接続できることをご確認ください。
バケットはSSE-S3で暗号化され、パブリックアクセスを全てブロックしています。
エンドポイントはGateway型のS3用を作成し、プライベートサブネット用のルートテーブルに紐づけます。

image.png

IAMユーザ・ロールの作成

Joplinの同期の際にアクセスキー、シークレットキーが必要となるので、なければIAMユーザを作成します。
アクセスキー、シークレットキーをダウンロードしておきましょう。
S3に書き込むのでロールには AmazonS3FullAccess があれば安心です。

Joplin インストール

インストーラのダウンロード・配置

こちらから実行ファイルをダウンロードします (300MBくらい)。

各Private Instanceにダウンロードしたファイルを配置します。

インストール

踏み台サーバ経由でどちらかの Private instance にRDP接続し、インストーラを起動します。

image.png

複数ユーザで使うので、全員分入れましょうか。

image.png

終わり!楽勝だね!
同じことをもう一つの Private instance でも行います。

同期設定

どちらかのPrivate InstanceでJoplinを起動します。

image.png

左下の Synchronise をクリックすると3つの選択肢が出現しますが、今回はS3を利用するので下部の「Click here to select one」を選択。

image.png

Synchronisation targetで「S3 (beta)」を選択します (ベータ版なのね)。
バケット名 (ARNではなく名前の部分のみ)、Region、アクセスキー、シークレットキーを入力し、「Check synchronisation configuration」を選択。
「Success!」と表示されれば一安心。

image.png

※試しにエンドポイントを除外して接続を試みると繋がらないので、ちゃんとエンドポイント経由してくれていそうです。

一度、同期に利用したバケットの中を見ると、

  • .resource
  • .sync
  • *****.md

といったフォルダ、ファイルが作成されています。
無事アップロードはできているようですね。

image.png

同期確認

先ほど設定したインスタンスで、試しに適当なファイルを作って、「Synchronise」します。

image.png

続いて、もう1台のPrivate Instanceから先ほど作ったメモを取得できるか確認します。
開いた段階では、初期のままです。
image.png

上記「同期設定」をこちらでも実施し、左下の「Synchronise」を押すと、

image.png

先ほど作成したメモが取得できました!

image.png

(ちゃんと別のインスタンスであることを主張するスクショ)

もちろん一方で削除すれば、もう一方からも消えます。

image.png

まとめ

セキュリティ要件が厳しいときにしかこのようなメモアプリが必要となることはないと思いますが、またいつか来るその日のために記録を残してみました。

ちょっと微妙だなと思っているのは、同期用のS3バケットを指定できますが、フォルダ単位での指定はできないので、バケット直下にmdファイルがぽんぽこ量産される点です。
そのためJoplin専用バケットを作成するのが得策かと思います。そのうちバージョンアップで改善されるかもしれませんね。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?