Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

bookstackは個別にファイル出力(エクスポート)する機能があります。でも、1つずつなんですよね。

これはこれで便利なんですけど、まとめてすべてを書き出したいじゃないですか。

探してみると、やり方はいくつかあって、私でもできそうな方法を試しました。

結論からいえば海外の人が作ったPythonプログラムで事足りたのですけど、Raspberry Pi で実行するのにbookwormから面倒なことになったpipでインストールするアプリだったんです。

そこだけが少しややこしく感じてしまいます。でも仕方ないですよね。

この記事では、公開されているアプリを使って、ラズパイ+Dockerで構築したbookstackの全エクスポートをしてみました。

bookstack-file-exporter

使ったのはこちらの「bookstack-file-exporter」です。arm64にも対応しています。

GitHub - homeylab/bookstack-file-exporter: This tool provides a way to export bookstack pages in a f…

Pythonでそのまま実行する方法と、Dockerで実行する方法がありました。今回はPythonで実行しました。

もしかしたら、もっと良いコードやアプリがあるかも知れません。これでも必要な出力はできます。

bookworm以降のpip

bookworm以降、pip installでエラーが出るようになっています。ルールが厳格化されたというのが簡単な説明で、仮想環境(env)を作成して使用することになります。

pipのエラーについて

先ずは仮想環境を作りenvに入る

コマンドで仮想環境を作成します。(例ではホームディレクトリに移動して実行しました)

cd ~/
python -m venv env

envの部分は、環境を作成するディレクトリ(ENV_DIR)を指定します。無ければ新規作成してくれます。よくあるenvという名前にしました。他でも構いません。

この仮想環境を有効にするコマンド

source env/bin/activate

プロンプトに(env)と表示されたのが分かります。

この後は、今まで通りにpipのコマンドを入力していくことになります。

今回の「bookstack-file-exporter」をインストールしてみます。(pipのバージョンはpip 23.0.1でした)

pip install bookstack-file-exporter

インストール後、リスト表示させるとインストールされていることが分かります。

pip list

Package                 Version
----------------------- --------
annotated-types         0.6.0
argon2-cffi             23.1.0
argon2-cffi-bindings    21.2.0
bookstack-file-exporter 1.1.0
certifi                 2024.2.2
cffi                    1.16.0
charset-normalizer      3.3.2
idna                    3.6
minio                   7.2.5
pip                     23.0.1
pycparser               2.21
pycryptodome            3.20.0
pydantic                2.6.4
pydantic_core           2.16.3
PyYAML                  6.0.1
requests                2.31.0
setuptools              66.1.1
typing_extensions       4.10.0
urllib3                 2.2.1

これで使用できるようになりました。

(env)から抜けるには、deactiveとタイプします。

#envの有効化
source env/bin/activate

#envの無効化
deactive

■Pi 5は8GBモデルがオススメ

使用方法

このexporterを使うのに私が行った方法をご紹介します。

最初に、稼働しているbookstackでAPIにアクセスするトークンIDとトークンシークレットを作成しておきます。

場所はメニューのマイアカウント内にあるアクセス&セキュリティ項目です。

トークンIDとトークンシークレットをコピーして使用します。トークンシークレットは一度しか表示されない点は注意が必要です。

config.ymlの作成

次にターミナルに戻り、適当な場所でバックアップ(エクスポート)させるディレクトリを作成し、config.ymlを作成、作成したディレクトリでアプリのコマンドを実行しました。

mkdir backup
cd backup
nano config.yml

config.ymlは、アプリのgitからコピーして使いました。内容はコメントアウト部分を省き羅列してみます。

変更箇所を上から説明すると次のようになります。

hostIPアドレスとポート番号
token_idbookstackで発行
token_secretbookstackで発行
formats出力するフォーマット デフォルトなら全ての形式。 必要無いなら削除するかコメントアウト。
export_images画像も出力するか
export_attachments添付ファイルも出力するか
modify_markdownmdファイル内のリンクをローカルにするか
export_metamdファイルのメタデータを出力するか
verify_sslssl認証をするか Dockerなのでhttpのためfalse
output_path出力するディレクトリ名をフルパス
keep_lastいくつまでバックアップファイルを残すか

いくつか注意点として挙げておきます。

  1. hostの指定はホスト名だと名前解決できませんでしたからIPアドレスにしました。
  2. modify_markdownをtrueにしておけばローカル表示できます。
  3. verify_sslはhttpとhttpsを自動判別しないので、httpなら忘れずにfalseにしておく。
  4. output_pathは~/は使えませんでした。フルパスなら確実です。
---
host: "http://192.168.0.29:6875"

credentials:
    token_id: "トークンID"
    token_secret: "トークンシークレット"

formats:
  - markdown
  - html
  - pdf
  - plaintext

assets:
  export_images: false
  export_attachments: false
  modify_markdown: false
  export_meta: false
  verify_ssl: false

output_path: "/home/raspida/backup"

keep_last: 5

オプションの細かい説明は、アプリのgithubで確認してください。

実行してみる

config.ymlを作成した場所で行いましたが、ちゃんとパスを指定してあげればどこでも構いません。

bookstack-file-exporter -c config.yml

成功すれば、次のようなメッセージ出力後、config.ymlで指定したディレクトリ(output_path)にtgzファイルが表示されると思います。

2024-03-21 14:45:55 [INFO] Beginning run
2024-03-21 14:45:55 [INFO] Building shelve/book/chapter/page relationships
2024-03-21 14:45:59 [INFO] Beginning archive
2024-03-21 14:45:59 [INFO] Exporting all bookstack page contents
2024-03-21 14:46:05 [INFO] Completed run
~/backup $ tree -L 2
.
├── bookstack_export_2024-03-21_14-45-59.tgz
└── config.yml

bookstack_export_日時.tgzといったtgzファイルが作成されます。中身は、エクスポートしたフォーマット形式のバックアップファイルが入っています。

あとはこのファイルを解凍すればエクスポートしたものを取り出せます。

別のマシンへ取り出して確認してみる

分かりやすいように、自分の使っているメインマシンにコピーしてみましょう。

scpやsambaなど方法はいくつかありますが、そのままターミナルで一時的なサーバを立ち上げて取り出すのが簡単です。

こんな感じで4つのフォーマットで取り出せました。

本棚とブックといったタイトルは、なるべく英語にした方が良いでしょう。ランダム?な文字がファイル名になっていました。これも2バイト文字に対応させていないからだと思われます。

他の形式は日本語もOKです。

PDFの2バイト文字は今後もサポートしないらしく、欧文だけみたいですね。

一気にバックアップできる安心感

これからbookstackをラズパイで構築して使っていこうと思っているなら、やはりバックアップはしたいですよね。

実質的にPDFは使えませんけど、私としては、mdファイルで取り出せれば御の字です。txtファイルでもイイですよね。

個別にはエクスポートできるbookstackですが、まとめてバックアップが図れると思うと、気軽に使えるのではないでしょうか。

bookstack自体でまとめてエクスポート機能が採用されると嬉しいですけどね。お試しあれ。