joplin サーバーのインストール
- Created: 2023.09.21 02:36
- Updated: 2023.11.23 23:52
- Combined: 2023.11.23 23:52
joplin サーバーのインストールで高速化するらしい
Joplinサーバーを作らなくても、NextCloudで同期できてるし、問題ないと思ってたが、次のような記述を見つけてしまった。
すると、同期が速くなった。Nextcloudでやっていたときより高速だ。それだけでもJoplin Serverを立てた価値はあったのかも知れない。 https://arimasou16.com/blog/2022/12/01/00484/
たしかにNextCloud は便利だが依存するので、ちょっと面倒くさい。NextCloudはアップデートなどでよくダウンするし、依存は少ないほうが楽だよね。joplin サーバーだけ単体運用したほうが良いかもしれない。
ただ、DockerをつくってDockerボリュームをつかってMySQLまで入れだすと流石に面倒だよね。
docker スタンドアロンで動かしてみる
ただし、docker なのでバックアップ・永続化ストレージが重要になる。
joplin のスタンド・アロンサーバーはDockerで提供されている。
docker run \ --rm \ --name joplin \ --env-file .env \ -p 22300:22300 \ joplin/server:latest
ただ、これは管理が面倒なので、永続化と再起動をdocker compsoe で実現しようと考える。
SQLiteで運用する。
docker でmysqlを取り出して移動するの面倒だよね。
設定やドキュメントを見ると、SQLiteがある。
- https://github.com/laurent22/joplin/tree/dev/packages/server
- https://raw.githubusercontent.com/laurent22/joplin/dev/.env-sample
STORAGE_DRIVER=XXXX
永続化を考える。
個人で使うのに、PostgreSQLやMySQLとかもいらないだろうしな。
sqlite とファイルをDockerボリュームでマウントすることにする。
source: "./data/db-takuya.sqlite" target: "/home/joplin/packages/server/db-takuya.sqlite"
永続化方法の候補
- PostgreSQLに保存する
- Storage Pathをつかう。
- Dockerを工夫する
- SQLiteでdocker を工夫する
公式では、PostgreSQLをdocker-compose でつかうように書いてあります。
また、StoragePathを環境変数で与えることで、ファイルをDBに保存せず、ファイルとして保存できるようです。ファイルに保存したら、ストレージ・パスを使うと、ファイル単位で使えるようになるが、ファイル数が増えると取り扱いが面倒だ。インデックスとユーザがDB管理になるようです。
何もしなければ、SQLiteにファイルとユーザーのすべてを保存するようです。
PostgreSQLはわりと重い。バックアップと復元はツールで簡単にできる。pd_dump でもいいし、SQLベースで行えて良い。
SQLiteは1ファイルで済むが、ファイルが巨大になるのがデメリットだろう。 ただ、数GB程度ならSQLiteでも良いかもしれない。だから、SQLiteを使うならStoragePathとペアになるだろう。
docker-compose.yml
ボリュームと起動ENVをいれて設定ファイルを作る。
version: "3.7" services: joplin-server: image: joplin/server:latest container_name: joplin1 env_file: "./env" environment: TZ: 'Asia/Tokyo' ports: - "127.0.0.1:22300:22300" volumes: - type: bind source: "./data/db-takuya.sqlite" target: "/home/joplin/packages/server/db-takuya.sqlite"
envファイル
## APP_BASE_URL=https://joplin.example.tld APP_PORT=22300 ## SQLITE_DATABASE=/home/joplin/packages/server/db-takuya.sqlite ## ACCOUNT_TYPES_ENABLED=1
たとえば、次のようにして簡単に作れる。
## 環境変数を作る cat <<EOF > env APP_BASE_URL=https://joplin.example.tld APP_PORT=22300 SQLITE_DATABASE=/home/joplin/packages/server/db-takuya.sqlite EOF ## DBファイルを作る DB_NAME=data/db-takuya.sqlite ## joplin server は uid=1001で動作する touch $DB_NAME sudo chown 1001:1001 $DB_NAME
起動する
起動してnginxのリバプロを向けてあげる。
nginx 側で設定を作る。
# vim: ft=nginx ts=2 sw=2 sts=2 server { server_name joplin.example.tld; add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"; listen 127.0.0.1:443 http2 ; ssl_certificate_key /etc/letsencrypt/live/joplin.example.tld/privkey.pem; ssl_certificate /etc/letsencrypt/live/joplin.example.tld/fullchain.pem; location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; } add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"; location / { client_max_body_size 1024M; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://127.0.0.1:22300; } }
この状態で、閲覧ができる
上記のような画面が閲覧できたら、無事に起動している。
ログインして状態を見る。
初期ユーザーは次の通り
- ユーザー名:admin@localhost
- パスワード: admin
初期ユーザのパスワードを変更
Adminユーザだけ存在する。
ユーザを作成する
適当なパスワードでユーザを作った
- ユーザー名: takuya@example.tld
- パスワード: dyWXXXXXX
joplinから使う。
早速使ってみる。
Joplinにはプロファイル機能があり、役割別にゼロ・ベースでノートを作ることが出来る。いわば別アカウント機能である。
EvernoteやNotionは課金ベースなので、アカウント切り替えで複数ノートを使い分けるなんて至難の業。
このあたり、Joplinはプロファイル切り替えが自由できるので、自由なソフトウェアと言える。
新しいプロファイルを作って、先程のサーバーと同期してみる
まっさらなノート環境ができたので、適当にメモを書いて
同期設定を書く
先程作ったユーザとパスワードを入れる。
同期設定を確認し
同期する
これでサーバーが動作できることがわかった。
ただし、これは、サーバー(Docker)をシャットダウンすると、データが消えます。
データベースはSQLiteに保存されており、永続化しません。
永続化する方法は、公式ドキュメントを読む限りではいくつかあるようです。
SQLiteを永続化ストレージのフォルダに放り込むことで永続化が可能です。
node-fetch 問題
sslh や nginx で問題が起きたので、sslh では regex でクリアした。
node-fetchが TLSでいい感じにSNIを扱えないのでSSLHとnginxでホスト名を見失う現象が起きた。
sslh での例
{ name: "regex"; host: "192.168.2.21"; port: "443"; regex_patterns: ["joplin\.example\.biz"] },
これはそのうちちゃんと調べて対応したい。
メール問題
ソースコードを見ていると、メール関連の環境変数やメール関連の設定が見つかるが、機能してないようである。ここはそのうち使えるようになるかもしれないし、全部消されるかもしれない。いまは触らないほうが無難だろう。
# MAILER_ENABLED=1 # MAILER_HOST=192.168.1.11 # MAILER_PORT=25 # MAILER_SECURE=none # MAILER_AUTH_USER='' # MAILER_AUTH_PASSWORD='' # MAILER_NOREPLY_NAME=joplin server admin # MAILER_NOREPLY_EMAIL=server-admin@example.tld
joplin-severを入れてよかったこと。
速い&共有ができる。
NextCloudで同期するより、数段早い。本当に速い。
WebDAVはそのままだろうから、nextcloudのDAVがphpオーバーヘッドがあって遅いことがわかる。
公式ドキュメントにもある通り、NextCloudのWEBDAVより速い。本当に速い。 https://discourse.joplinapp.org/t/joplin-server-pre-release-is-now-available/13605
.ts
で書かれたものがphp
より速いってのは、隔世の感がある。
webDAV自体が遅いのかもしれないので、nginxのwebDAVと比較してもいいかもしれないのでそのうち試そう。
ときかく、Joplinを使っていて、複数デバイスを同期するのであれば、サーバーを入れたほうがとても快適だと思うのでぜひお試しあれ。
2023-12-15 追記 共有ができる.
Joplin-serverを入れると、ノートの共有URLの発行が楽になる。
共有機能でJoplin-serverのURLで発行される。
共有URLの発行ができて、誰かにノート内容をサクッと見せることができる。HTMLやPDFやマークダウンで取り出資する必要がなくて便利です。