Back

/ 3 min read

ObsidianをサーバーでホストしてSync

個人の開発環境は自作PCの上で構築したproxmox VM(ubuntu)で作業している。 例えば、最近だとClaude Codeを使うことが多いが、一連のセッションが終わった後に自分にとって学びになる部分をmarkdownで要約してもらって書き出すショートカットコマンドをよく使っている。このmarkdownを後から自分のスマホやPCなどマルチデバイスで参照できるようにしたい。

ここ数年、ドキュメンテーションツールはobsidianを使っておりsync planで課金している(元々cosenseを愛用していたが独自syntaxなのとモバイル向けはPWAということもあり操作感がちょっと惜しい感じだった)。このときにリモートのVMでもmarkdownたちをobsidian syncの上で同期させたい。

obsidian-dockerの導入

Forumをいくつか確認する限り、githubで公開されているdocker-obsidianのimageをリモートVMで起動させると良さそうというのがわかったのでこれをベースに使う。

参考: Possibility for headless syncing with a CLI/daemon

試しに以下でコンテナを起動する。

Terminal window
$ docker run -d \
--name=obsidian \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-p 3000:3000 \
-p 3001:3001 \
-v ./obsidian-config:/config \
--shm-size="1gb" \
lscr.io/linuxserver/obsidian:latest

ポートフォワードしてlocalhost:3000にブラウザでアクセスすると、ブラウザ上でobsidianのネイティブアプリが操作できることがわかる。裏側ではKasmVNCというVNCの仕組みが動いている(らしい)。

通常通りobsidian syncの設定をすればマウントしたディレクトリ上にドキュメントたちがsyncされていく。

pm2でプロセス管理

サーバーを再起動したときにもコンテナを自動再起動するようにしたい。pm2でプロセス管理する。 以下でプロセス登録。

Terminal window
$ pm2 start "docker run --rm \
--name=obsidian \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-p 3000:3000 \
-v $HOME/obsidian-config:/config \
--shm-size="1gb" \
lscr.io/linuxserver/obsidian:latest" \
--name obsidian-container

次にsystemdに登録する。startupコマンドを実行するとsystemd登録するコマンドが表示されるのでそれをコピーして実行。

Terminal window
$ pm2 startup
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env ...

次にpm2に登録したコマンド設定をsaveしておく。

Terminal window
$ pm2 save