お金をかけずにサーバーの勉強をしよう

Wiki.jsのバックアップ運用

2023年8月8日

メニューへ戻る

Wiki.jsのバックアップ運用をします。

Wiki.jsインストール」で最新トレンドデザインでできているローカルの Wikiサーバーを手に入れたわけです。

Wiki.jsが中々のスグレモノなので、お客サンの中にこれからドキュメント整備をしていきたいってリクエストがあって、かつこういうサーバーがないのであれば勧めようと思っています。

検証で環境を作ってイジるのと違って、運用ってことになるとサービスの継続性や障害対応ってものを考えないといけません。

コストさえかければ運用はいくらでも良くなりますが、適正なコストってものがありますから、どこにお客サンの丁度良い頃合いを置くかはそれぞれで違います。

OSSで構成する場合は「コストをかけずに試しにやってみようか」ってスモールスタートを切ることが多いと思いますから、運用にかけるコストもスモールスタートするでしょう。

運用で一番大事なところだけ、外せないものだけ、と言われたら、(システムが使えることは当たり前として)バックアップを挙げますね。


そういう訳でここでは Wiki.jsのバックアップをなるべくシンプルな方法でコストをかけずにやってみようと思います。

Wiki.jsにはバックアップ機能がありますのでそれを使って、Wiki.jsのインストールディレクトリではない、特定のディレクトリに対してバックアップをしてみます。


完全に把握はできていないのですが、Wiki.jsは対象のデータをデータベース(ここではPostgreSQLを使っています)に格納して稼働しているのだと思われ、バックアップはデータベースのバックアップ機能を使えばできるのだと思います。

一方で Wiki.jsのバックアップ機能というのは、データベース内のデータに加え Wiki.jsのインストールディレクトリをも指定したディレクトリ以下にファイルアウトするもののようで、こちらの方がバックアップとしては楽です。

なおネット上のオブジェクトストレージ(AWSの S3など)などもファイルアウト先に指定できるようになっています。


ここではローカルディスクのうち、Wiki.jsのインストール先とは関係のない [/wikijs_backup]ディレクトリをバックアップ先として作っておきます。
Wiki.jsを実行している OSユーザー [wikijs] が書き込めよう、同ユーザーをオーナーにしておきました。

subro@UbuntuServer2204-1:~$ sudo mkdir /wikijs_backup

subro@UbuntuServer2204-1:~$ sudo chown wikijs:wikijs /wikijs_backup


Wiki.jsにログインします。
私の環境ですと [http://UbuntuServer2204-1:3000] です。
Wiki.js画面 1

歯車マークアイコンをクリックして設定画面に入ります。
Wiki.js画面 2

右のメニューの下の方にある [ストレージ]を選択します。
Wiki.js画面 3

最初 [ターゲット]列はデフォルトで [Local File System]が選択されています。
この機能は無効になっているので、右上のスイッチをクリックして有効にします。
Wiki.js画面 4

そうすると上の方のメッセージが「有効」になり、入力項目のロックが解除されます。
[Path]に上で作ったバックアップ用のディレクトリを入力し、
[Create Daily Backup]のスイッチをクリックして有効にして、
画面右上にある適用を押します。
Wiki.js画面 5

先程の画面の下の方に以下のようなもの(字が小さいですが[アクション])がありますので、[Dump all content to disk]の実行を押します。
Wiki.js画面 6

完了したところで、バックアップ用ディレクトリ [/wikijs_backup] の内容を見てみました。

wikijs@UbuntuServer2204-1:/wiki_backup$ ls -l
合計 72
drwxr-xr-x 3 wikijs wikijs  4096  8月  8 11:54 home
-rw-r--r-- 1 wikijs wikijs   321  8月  8 12:08 home.md
-rw-r--r-- 1 wikijs wikijs 64810  8月  8 12:08 vmware_install_01.jpg

[/wikijs_backup/home]ディレクトリの下には [wiki]ディレクトリがあって、どうやらインストールディレクトリ以下全てか必須のものをコピーしてきているようです。

[home.md]と[vmware_install_01.jpg]ファイルは、トップページのドキュメントの中味そのものです。
PostgreSQLから引っ張り出してきたんでしょう。


ここまできて、どういう環境になったかというと、
データベースの内容を常にファイルにも同期している環境
となりました。

少なくともこれでデータベースがクラッシュしても、空のデータベースを用意すればファイルからサックリと戻せる状態になった、ということだと思います。


さて、GUI上の設定で [Create Daily Backup]のスイッチを有効にしていますので、何時か分かりませんが、日次バックアップが行われるのでしょう。

が、それを待っている訳にも行きませんので、手動でバックアップをやってみます。


[アクション]の所にある [Create Backup]の実行を押します。
Wiki.js画面 7

[Daily Backup]では、[/wikijs_backup/_daily]ディレクトリにバックアップが作られるはずですが、手動の場合は [/wikijs_backup/_manual]ディレクトリになります。
ファイルは [.tar.gz]形式の圧縮ファイルで、ファイル名に日時が含まれていて他と重複しないようになっています。
かつ、これが 1ヶ月保持されるようになっています。

wikijs@UbuntuServer2204-1:/wiki_backup$ ls -l
合計 84
drwxr-xr-x  4 wikijs wikijs  4096  8月  8 12:14 .
drwxr-xr-x 20 root   root    4096  8月  8 11:43 ..
drwxr-xr-x  2 wikijs wikijs  4096  8月  8 12:14 _manual
drwxr-xr-x  3 wikijs wikijs  4096  8月  8 12:14 home
-rw-r--r--  1 wikijs wikijs   321  8月  8 12:14 home.md
-rw-r--r--  1 wikijs wikijs 64810  8月  8 12:14 vmware_install_01.jpg

wikijs@UbuntuServer2204-1:/wiki_backup$ ls -lR _manual
_manual:
合計 79404
-rw-r--r-- 1 wikijs wikijs 81307403  8月  8 12:48 wiki-20230808-124817.tar.gz

で、このバックアップファイルの中味が何なのかなんですが、どうやらこんな仕組みのようなのです。
Wiki.js画面 8

簡単に言うと同期しているファイルのバックアップなんですね。

だから少なくとも 1回は上でやった [Dump all content to disk]を実行して同期状態を最新にしておかないとバックアップ足りえません。


ところで、バックアップはリストア/リカバリできてこそのものです。

よってここからは、障害からの復旧作業に供せるものなのか検証するため、バックアップファイルを他の所にコピーしておいてから OSを一度全部消します。

改めて Wiki.jsのサーバー環境を作り直して、バックアップからの復旧を試みてみます。

………

Ubuntu Server作って、PostgreSQL入れて、Node.js入れて、Wiki.js入れてって、サーバーを作った上で、このページの上の方でやっている、[Local File System]への同期設定のところまでやりました。

でもドキュメントは一切作っていない、空の状態です。


バックアップから戻す時の経路は逆にこんな風になります。
Wiki.js画面 10

Ubuntu Server には [wikijs]ユーザーでログインします。

上で保存しておいたバックアップファイルは以下の通り [/tmp]に持ってきてあります。

wikijs@UbuntuServer2204-1:~$ ls -l /tmp/*.gz
-rw-r--r-- 1 wikijs wikijs 81307403  8月  8 15:23 wiki-20230808-124817.tar.gz

バックアップファイルの圧縮を解きつつ、[/wiki_backup]ディレクトリに展開します。

wikijs@UbuntuServer2204-1:~$ tar xvf /tmp/wiki-20230808-124817.tar.gz -C /wiki_backup

〜〜〜 途中省略 〜〜〜

home/wikijs/wiki/node_modules/ssh2-promise/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src
home/wikijs/wiki/node_modules/ssh2-promise/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d

展開が終わって、[/wiki_backup]ディレクトリの下はこのようになりました。

wikijs@UbuntuServer2204-1:~$ ls -l /wiki_backup
合計 72
drwxr-xr-x 3 wikijs wikijs  4096  8月  8 15:30 home
-rw-r--r-- 1 wikijs wikijs   321  8月  8 12:14 home.md
-rw-r--r-- 1 wikijs wikijs 64810  8月  8 12:14 vmware_install_01.jpg


Wiki.jsに戻って、左のメニューの下の方にある [ストレージ]を選択します。
Wiki.js画面 3

[アクション]の [Import Everything]の実行を押します。
Wiki.js画面 9

ちょっと時間がかかりましたが、終了するとこのように OSを消す前に作ったドキュメントが戻っていました。
Wiki.js画面 11


これで一応の完了となるのですが、ドキュメントには詳細が書いていないので、まだまだ要確認だなぁと思うところはあります。

それからドキュメントが溜まってくるとノウハウや重要事項が記載されたデータが一番コストがかかっている高価な代物になりますので、火事なんかでも直ぐに外に持ち出せるようにしておきたいですね。

日次バックアップ先の [/wiki_backup/_daily]ディレクトリは、外付け USBディスクか NFSかでマウントしておきたい気もします。

そう考えると、確かにインターネット上のオブジェクトストレージというのも悪くない手かも知れません。