Ubuntu20.04で口径の電子ブックサーバーを作成する方法
著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
calibreは、クロスプラットフォームのデスクトップアプリケーションでよく知られている無料のオープンソースの電子書籍マネージャーです。 Calibreを使用して、単一のデバイスで電子書籍ライブラリを管理できますが、アプリケーションには強力なサーバーコンポーネントも含まれています。 電子書籍サーバーを設定すると、次のことが可能になります。
- 世界中のどこからでもあなたの本にアクセスできます
- 書籍をモバイルデバイスに簡単に転送
- 友達や家族と本を共有する
このチュートリアルでは、Ubuntu20.04でキャリバーコンテンツサーバーをセットアップして使用します。 具体的には、キャリバーサーバーをダウンロードしてインストールし、サーバーの再起動時に自動的に起動するようにキャリバーをサービスとして構成し、コマンドラインツールを使用してライブラリに書籍を追加します。 また、特定のディレクトリからライブラリに新しい本を自動的に追加するcronジョブを設定し、サーバーに認証を追加して自分だけがアクセスできるようにし、無料のSSL/TLS証明書を追加してライブラリにサービスを提供するオプションもあります。セキュリティを強化するためのHTTPS。
警告:すべてのクリエイティブコンテンツと同様に、他者が作成した素材に関連する著作権ライセンスを尊重することが重要です。 このチュートリアルでは、 ProjectGutenbergから合法的にダウンロードされたパブリックドメインの書籍を使用しています。この書籍には60,000冊以上の無料の電子書籍があります。
前提条件
- sudoユーザーとファイアウォールを備えたUbuntu20.04を実行しているサーバー。 手順については、初期サーバーセットアップガイドに従ってください。
- ステップ7には、SSL証明書を使用してキャリバーコンテンツサーバーを保護するオプションが含まれています。 これを行う場合は、利用可能なAレコードを持つドメイン名が必要になります。 DigitalOcean Droplet を使用している場合は、共通ドメインレジストラからDigitalOceanネームサーバーを指定する方法のガイドに従って手順を確認できます。
ステップ1— CalibreContentServerのダウンロードとインストール
キャリバーはUbuntuのソフトウェアリポジトリに存在しますが、そのバージョンは最新リリースよりも遅れていることがよくあります。 したがって、公式の口径のドキュメントでは、代わりに、サイトでホストされているバイナリからインストールすることを推奨しています。
まず、いくつかの必要な依存関係をインストールします。
- sudo apt update && sudo apt install -y libfontconfig libgl1-mesa-glx
次に、キャリバーサーバーをダウンロードしてインストールします。
- wget https://download.calibre-ebook.com/linux-installer.sh
スクリプトの内容を調べます。
- less linux-installer.sh
k
およびj
キーを使用して上下にスクロールし、q
を押して終了したらターミナルに戻ることができます。
次に、スクリプトを実行してcalibreをインストールします。
- sudo sh linux-installer.sh
caliberはデスクトップ環境を想定していますが、ヘッドレスサーバー上にデスクトップ環境が見つからないため、デスクトップ統合の失敗に関する警告が表示されます。 コマンドラインツールとWebインターフェイスを介してキャリバーを完全に制御するため、これらを無視しても安全です。
calibreをインストールしたので、その機能の調査を開始できます。
ステップ2—ライブラリを作成して最初の本を追加する
Calibreの機能を調べるために、.epub
または.mobi
の電子書籍をダウンロードしてみましょう。 例として、 ProjectGutenbergのCharlesDickensによるAChristmasCarolを使用します。 Project Gutenbergは、無料のパブリックドメインの文献の大規模なリポジトリを維持しており、電子書籍の優れたリソースです。
次のコマンドを実行して、この本をサーバーにダウンロードします。
- wget http://www.gutenberg.org/ebooks/46.kindle.noimages -O christmascarol.mobi
次に、calibreが電子書籍ライブラリとして使用できるディレクトリを作成します。
- mkdir calibre-library
そして、calibredb
コマンドを使用して、ダウンロードしたばかりの本を新しいライブラリに追加します。
- calibredb add *.mobi --with-library calibre-library/
次の出力が表示されます。
OutputAdded book ids: 1
ライブラリに本を追加すると、口径を開始してアプリケーションを探索できるようになります。
ステップ3— CalibreContentServerを実行してライブラリを表示する
Calibreをインストールし、本をダウンロードすると、アプリケーションのユーザーインターフェイスを探索する準備が整います。 ただし、Webブラウザでcalibre Contentサーバーにアクセスする前に、サーバーがcalibreのデフォルトポートであるポート8080
でトラフィックを受け入れることができることを確認する必要があります。 前提条件のセクションにあるサーバーの初期設定ガイドに従った場合は、ufw
またはUncomplicatedFirewallを有効にしました。 ここで、ポート8080
がファイアウォールを通過できるようにする必要があります。
次のコマンドを使用して、ポート8080
を開きます。
- sudo ufw allow 8080
ufw
のステータスをチェックして、ポートが開いていることを確認します。
- sudo ufw status
次のような出力が表示されます。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
8080 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
8080 (v6) ALLOW Anywhere (v6)
次に、次のコマンドを実行して、キャリバーコンテンツサーバーを起動します。
- calibre-server calibre-library
calibre-server
はサーバーを起動するために使用されるコマンドであり、calibre-library
は以前に作成し、calibreにライブラリとして使用するように指示したディレクトリの名前です。
次のような出力が表示されます。
calibre server listening on 0.0.0.0:8080
OPDS feeds advertised via BonJour at: your_server_ip port: 8080
ローカルマシンからyour_server_ip:8080
(サーバーのIPアドレスに置き換えてください)にアクセスすると、デフォルトの口径画面が表示されます。 calibre-library をクリックすると、前の手順で追加した本が表示されます。
Ctrl+C
を押して、開始した手動サーバープロセスを停止します。
キャリバーコンテンツサーバーを実行するこの方法はうまく機能しますが、サーバーへのSSH接続を閉じた後でも、ライブラリを常に機能させたい場合があります。 サーバーを再起動した後でも常に実行されるように、キャリバーコンテンツサーバーをサービスに変えましょう。
ステップ4—口径のコンテンツサーバー用のサービスを作成する
キャリバーコンテンツサーバーの使いやすさを向上させるために、手動サーバープロセスを起動時に開始するサービスに置き換えましょう。
まず、ディレクトリ/etc/sytemd/system/
にcalibre-server.service
というファイルを作成します。
- sudo nano /etc/systemd/system/calibre-server.service
次に、次の構成を追加します。これにより、起動時にcalibreContentサーバーが起動します。 強調表示されたテキストをユーザーとグループに置き換えてください。
## startup service
[Unit]
Description=calibre content server
After=network.target
[Service]
Type=simple
User=sammy
Group=sammy
ExecStart=/opt/calibre/calibre-server /home/sammy/calibre-library --enable-local-write
[Install]
WantedBy=multi-user.target
ここでは、サーバーの起動時に--enable-local-write
フラグを使用するようにサービスに指示します。 サーバーが稼働しているときは、 A Christmas Carol で直接行ったように、calibredb
コマンドを使用して本を追加することはできません。 代わりに、後で説明するように、実行中のサーバーを介してこれを実行する必要があります。これは、サーバーが新しいファイルをディスクに書き込むためのアクセス許可を必要とすることを意味します。 このフラグを使用すると、ローカルで要求を受信する限り、これを実行できます。
ファイルを保存して閉じます。
次に、サービスを有効にして開始します。
- sudo systemctl enable calibre-server
- sudo systemctl start calibre-server
サーバーを再起動します。
- sudo reboot
数分待ってから、ローカルWebブラウザでhttp://your_server_ip:8080
に再度アクセスして、口径のコンテンツサーバーが自動的に起動することを確認します。
次に、アプリケーションに認証を追加しましょう。
ステップ5—(オプション)ユーザー認証を口径のコンテンツサーバーに追加する
これで、どのデバイスからでもアクセスできる、完全に機能する口径のコンテンツサーバーができました。 ただし、現在、サーバーのIPアドレスを知っている人なら誰でも電子書籍にアクセスできます。 あなたはこれを望まないかもしれません。 代わりに、ユーザー名とパスワードを使用して訪問者に認証を強制できるように、calibreの組み込みユーザー管理システムを構成しましょう。
まず、SSHでサーバーに戻り、キャリバーを停止します。 これにより、calibreのデータベースを直接操作できるようになります。
- sudo systemctl stop calibre-server
次に、calibreのユーザー管理スクリプトを開始します。
- calibre-server --manage-users
プロンプトが表示されたら、新しいユーザーを追加することを選択します。 次に、ユーザー名と強力なパスワードを選択します。 次のような最終的な出力メッセージが表示されます。
OutputUser mycalibreuser added successfully!
次に、サービスに1つの小さな編集を加える必要があります。
calibre-server.service
を再度開きます:
- sudo nano /etc/systemd/system/calibre-server.service
認証を有効にするには、ExecStart
で始まる行の終わりに--enable-auth
フラグを追加します。 次のようになります。
. . .
ExecStart=/opt/calibre/calibre-server /home/sammy/calibre-library --enable-local-write --enable-auth
. . .
ファイルを保存して閉じます。
サービスデーモンを更新してサービスファイルを再スキャンし、次のコマンドでキャリバーサーバーを再起動します。
- sudo systemctl daemon-reload
- sudo systemctl start calibre-server
ライブラリに再度アクセスすると、ライブラリへのアクセスを許可する前に、ユーザー名とパスワードの入力を求められるようになりました。
Calibreコンテンツサーバーに機能を追加する方法は他にもあります。 次のステップでは、ダウンロードした本をキャリバーライブラリに自動的に追加するcronジョブを追加します。
ステップ6—(オプション)本をキャリバーライブラリに自動的に追加する
特定のディレクトリを監視し、見つかった本をキャリバーライブラリに追加するcronジョブを設定すると便利な場合があります。 このようにして、本をこのフォルダにダウンロードまたはアップロードでき、それらはcalibreWebインターフェイスを介して自動的に利用可能になります。
ホームディレクトリにbooks-to-add
というフォルダを作成し、次の場所に移動します。
- mkdir ~/books-to-add
- cd ~/books-to-add
このディレクトリに新しい本をダウンロードします。 次のコマンドを使用して、ProjectGutenbergからAlice inWonderlandをダウンロードします。
- wget https://www.gutenberg.org/ebooks/11.epub.images -o alice.epub
次に、crontabを開きます。
- crontab -e
ここでは、このディレクトリ内のすべてのファイルをcalibreに追加してから削除するスクリプトを設定します(本をcalibreに追加すると、ライブラリディレクトリにファイルのコピーが作成されるため、追加された元のファイルを削除できます)。
次のコンテンツを追加します。
*/5 * * * * calibredb add /home/sammy/books-to-add/ -r --with-library http://localhost:8080#calibre-library --username mycalibreuser --password StrongPassword! && rm -r /home/sammy/books-to-add/*
ファイルを保存して閉じます。
これは5分ごとに実行されるため、新しい本がWebインターフェイスに表示されるまで長く待つ必要はありません。 数分待ってから、ローカルWebブラウザにライブラリをリロードします。 新しい本がAChristmasCarolの横に表示されます。
ステップ7—(オプション)Apache2をインストールし、HTTPS経由でライブラリを提供する
ライブラリにアクセスするにはユーザー名とパスワードが必要ですが、HTTP経由でライブラリを提供し、認証するたびにユーザー名とパスワードを暗号化せずに送信するため、実際には安全ではありません。 より安全なオプションは、すべてのトラフィックがHTTPSを使用して暗号化されるようにすることです。 ドメイン名を所有している場合は、これをサーバーにポイントし、Let’sEncryptを使用して無料のSSL証明書をインストールできます。 (ebooks.your_domain
のようなサブドメインを使用することもできます。)
Apache2のインストールと設定
WebサーバーApache2をcalibreのリバースプロキシとして使用します。 以前は、ライブラリにアクセスしたときにポート番号:8080
を追加する必要がありました。これは、キャリバーが実行されるデフォルトのポートであるためです。 次に、ポート80
(HTTPトラフィックのデフォルトポート)でリクエストをリッスンし、:8080
でローカルに実行されているcalibreサーバーにリクエストをプロキシし、これらを最後まで処理するようにApache2を設定します。ユーザーは透過的に使用できるため、ポート番号の指定について心配する必要はありません。 次に、SSL証明書を使用してポート443
のすべてのトラフィックを保護します。
Apache2をインストールし、次のコマンドで必要なプロキシモジュールを有効にします。
- sudo apt install -y apache2
- sudo a2enmod proxy proxy_http
次に、サーバーがポート80
および443
でトラフィックを許可していることを確認します。 ポート8080
も閉じます。
- sudo ufw allow 'Apache Full'
- sudo ufw delete allow 8080
次に、/etc/apache2/sites-available/your_domain.conf
でファイルを作成して開きます。
- sudo nano /etc/apache2/sites-available/your_domain.conf
次の構成を追加します。これにより、ドメインがキャリバーサーバーにリンクされます。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ServerName your_domain
AllowEncodedSlashes On
ProxyPreserveHost On
ProxyPass "/" "http://localhost:8080/"
</VirtualHost>
最後に、この新しいサイト構成を有効にします。
- sudo a2ensite your_domain.conf
- systemctl reload apache2
ブラウザでhttp://your_domain
にアクセスして、キャリバーコンテンツサーバーがロードされていることを確認します。 Apacheがサイトにサービスを提供しています。
CertbotのインストールとSSL証明書の構成
最後のステップとして、Certbotを使用してすべてのトラフィックを保護しましょう。
まず、Certbotをインストールします。
- sudo snap install --classic certbot
次に、Certbotを実行します。
- sudo certbot --apache
Certbotプログラムは、証明書をインストールするための一連のプロンプトを表示します。
- プロンプトが表示されたらメールアドレスを入力します
A
と入力して、プロンプトが表示されたら利用規約に同意します- メールアドレスをEFFと共有するように求められたら、
Y
またはN
を選択します - 証明書が必要なドメインについてプロンプトが表示されたら、
1
を選択します(1つだけである必要があります)
完了すると、おめでとうメッセージが表示されます。
これで、https://yourdomain
でライブラリに安全にアクセスできます。
結論
このチュートリアルでは、口径の電子ブックサーバーをセットアップします。 サーバーの起動時に起動するようにサービスに変換し、新しい本を自動的に検索してライブラリに追加するcronジョブを追加し、認証とSSL証明書を設定してセキュリティを確保しました。
プロジェクトを拡張するには、個人のライブラリまたは Project Gutenberg 、 StandardEbooksなどから本を追加できます。 コンテンツライブラリに関連する著作権法を常に尊重することを忘れないでください。