Calibreのコンテンツサーバ機能はとても便利だ。Webブラウザから蔵書を検索できるのは利便性が高い。できればインターネット上からアクセスできると、外で本をダウンロードできるし、また本屋で「これ積んでるっけ?」と悩まなくて済む(読め)。
ということで、Calibreの本棚(コンテンツサーバ)をインターネット上に公開しつつ、自分以外はアクセスできない状態にしたい。前提条件として、Cloudflareでドメイン管理していること(Cloudflareのサービスを利用するので)。
Calibreの機能としてはユーザアカウントを管理してパスワード保護したうえで外部公開、みたいなのがドキュメントにあるのだけれど(calibre コンテンツサーバー — calibre 7.10.0 ドキュメント)、Cloudflare使うほうが簡単かつ安全かなと思う。
前提と環境
前提
- Cloudflareでドメインを管理している
- ネームサーバもCloudflare
ホストマシンはMacを使うが、WindowsでもLinuxでもできるはず。以下の環境。
- M2 Pro Mac mini 2023
- macOS 14.4.1
- cloudflared 2024.4.1 (built 2024-04-22T22:16:50Z)
- Calibre 7.10
Cloudflare Tunnelを利用する。これは使うと簡単にNAT越えっぽいことができる。構成的には以下のような感じになる。
つまり books.example.com にアクセスすることで、localhostのコンテンツサーバにアクセスできるようにする。これだけ見ると全世界に本棚公開やんけとなるが、素晴らしいことにGUIで設定ポチポチするだけで、メールアドレスによる認証ができる。
Cloudflareのサービスをめっちゃ使うので、Cloudflareでドメイン管理していることが前提条件となる。
手順のメモ
UIとかどうせ変わりそうだから、かなり雑に手順。まぁだいたいわかるでしょくらいの感じで。
Calibreでコンテンツサーバを起動する
まぁまずは言わずもがなだけれど、Calibreで「接続/共有」よりコンテンツサーバを起動する。デフォルトだとlocalhostの8080だろう。
Cloudflareでトンネル作成する
- Cloudflareのコンパネにログイン
- Zero Trustを起動してNetworksのTunnelsよりトンネルを作成する
- 流れに沿って設定していく。トンネル名はなんかわかりやすいヤツを適当に。ホストマシンに
cloudflared
をインストールしてトンネル開通- Macの場合はhomebrewでインストールのうえ、
/Library/LaunchDaemons/com.cloudflare.cloudflared.plist
にplistファイルが作成される- エラーログは
/Library/Logs/com.cloudflare.cloudflared.err.log
に出るのでなんかおかしかったら見るとよい - デーモンの起動や停止は
launchctl start(stop) com.cloudflare.cloudflared
で。
- エラーログは
- 疎通したらダッシュボードにその旨が出るので確認
- Macの場合はhomebrewでインストールのうえ、
- Public Hostnameからpublic hostnameを追加する。サブドメイン適当に決める
- ここで決めたサブドメインはDNSのレコードにCNAMEで登録される
- 疎通先を http://localhost:8080 にする
これで設定したドメインにアクセスするとCalibreのコンテンツサーバにアクセスできるようになる。
Accessで認証入れる
このままだと全世界に自分の本棚が公開されてしまい、著作権法上も大きな問題であるし、自分の尊厳も問題になると思われるため(本棚による)認証を入れる。
- Zero TrustよりAccess -> ApplicationsよりApplicationを追加
- Self-hosted
- 名前はなんかわかりやすいやつにする。ドメインは上で設定したドメインにしてNext
- ポリシーの名前はなんか適当に決める
- Configure Rulesはメールアドレスにして、許可するメールアドレスを指定してNext
- IPアドレスの指定とかもできる
- CORSとかCookieの設定ができるが特に何もせずAdd an application
- 必要があればやる
これで当該ドメインにアクセスするとメールアドレスの認証が求められる。メールアドレスを入力すると、6桁の一時パスが送られるのでそれを使ってログイン。とても便利。
応用: Dockerでコンテンツサーバを別のインスタンスで起動する
Dockerでコンテンツサーバのコンテナを作ることにより、自動的にサーバ起動させるとか、特定の本棚のみ公開するとかも可能だ。なんでわざわざDockerを使うかというと、calibre-serverのインスタンスは同時に複数起動できないためだ。なのでコンテンツサーバ専用のコンテナを作成する感じ。
これによってGUIのCalibreの起動状況を確認しなくてよくなったり、pdfなどの資料の共有をしたり、共有時にプライベートのあらやだ奥さんみたいな本が間違って目に入るような事故を起こさずにすんだりなど、けっこう便利に使えるのだが、書き始めるとそれだけで記事になってしまうため割愛。気が向いたら記事にする。
(追記)記事にした。
所感: 自宅サーバ復活の予感
10年くらい前に自宅サーバは浪漫枠みたいな記事を書いた。
しかし、Cloudflare TunnelとDockerのおかげで、一時は浪漫枠になったかと思われた自宅サーバに復活の機運を感じる。今までネットワークの設定とかインフラのメンテナンスがめんどくさすぎ問題のために、自宅サーバなんかもうやってられませんわという感じだったのだが、Cloudflare Tunnelで極めて楽にネットワークが構築できるようになり、さらにDockerを使えばソフト面の構築・運用も楽々。
まぁもちろん可用性の確保とかスケーラビリティとか考え出すと自宅サーバはキツいのだが、逆に言うとそこらへん適当でいいなら自宅サーバで全然OK。
で、こういう大量のデータを扱うコンテンツサーバは自宅サーバ向きの一つ。さらに言うと、最近のクラウドは検閲めいたことも平気でやるので、プライベートなデータを置いておくには不安で仕方ない。垢BAN気にしなくていいのは精神的にだいぶ楽。あと最近はAIが出てきたのもある。グラボも回したりベクトルデータ扱えるElasticsearchみたいなリッチなサーバもほしくなるが、このへんはクラウドでやると余裕で破産できるので、オンプレミスにも価値が出てきた。
そんなわけで、自宅サーバもアリなんじゃないかと思うようになってきた今日この頃である。
参考記事
ありがとうございました。
コメント