📖

軽量Wiki「BookStack」を Docker+Nginx で構築する

に公開

🔖 はじめに

この記事では、Raspberry Pi 5(Bookworm)上にDockerでBookStackを構築し、Nginxをリバースプロキシとして設定して、http://book.lan からアクセスできるようする方法を紹介します。

BookStackとは

BookStackは、ドキュメントを「本・章・ページ」で整理できるオープンソースのWikiです。
シンプルな画面とWYSIWYG/Markdown対応エディタで、技術メモから社内Wikiまで手軽にまとめられるのが特徴です。

BookStackの編集画面
BookStackの編集画面

Wiki.jsとの違い

BookStackと似たような立ち位置で、Wiki.jsというオープンソースもあります。
おおまかな違いは次のとおりです。

  • 構造とUI

    • BookStack:本棚型の階層構造で、読み物として整理しやすい
    • Wiki.js:ページ中心+タグなどで柔軟に整理
  • 思想

    • BookStack:シンプル重視、迷わず使える
    • Wiki.js:多機能・高い拡張性(Git連携など)

筆者も最初にWiki.jsを試しましたが、画像の貼り付けや管理がやや煩雑で、
画像を気軽に扱いたい今回の用途には合わず、採用を見送りました。

そこで本記事では、軽量で扱いやすいBookStackを、Raspberry Pi上にDockerで構築していきます。

🔖 Docker 導入

1. インストール

sudo apt update
sudo apt install -y docker.io docker-compose

2. サービスの自動起動設定

sudo systemctl enable --now docker

状態確認:

sudo systemctl status docker --no-pager

3. root権限での動作確認

$ sudo docker --version
Docker version 20.10.24+dfsg1, build 297e128
$ sudo docker-compose --version
docker-compose version 1.29.2, build unknown

4. dockerグループに現ユーザーを追加

sudo usermod -aG docker $USER

SSHをいったん切断して再接続後に動作確認(動けばOK):

docker ps

5. 動作テスト(hello-world、sudo無し)

docker run --rm hello-world

🔖 BookStack コンテナの作成

使用するdockerイメージ

1. プロジェクトディレクトリの作成

mkdir -p ~/bookstack
cd ~/bookstack

2. APP_KEYの生成

docker-compose.ymlAPP_KEY に記載するアプリケーションキーを生成します。
下記コマンドを実行して、表示された base64:xxxxxxxxxx をメモしておいてください。

docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey

3. docker-compose.yml を作成

nano docker-compose.yml

注意事項:

  • APP_URLにはアクセス先となるアプリケーションURLを記載する
  • APP_KEYには2で作ったAPP_KEYを入力
  • your_strong_password1, 2は自分でパスワードを作って置き換える
  • bookstackのDB_PASSWORDと、mariadbのMYSQL_PASSWORDは同じ値にする

内容:

version: "3"
services:
  bookstack:
    image: lscr.io/linuxserver/bookstack:25.12.1
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
      - APP_URL=http://book.lan
      - APP_KEY=base64:xxxxxxxxxx
      - DB_HOST=mariadb
      - DB_PORT=3306
      - DB_USERNAME=bookstack
      - DB_PASSWORD=your_strong_password1
      - DB_DATABASE=bookstack
      - STORAGE_TYPE=local_secure_restricted
    ports:
      - 6875:80
    depends_on:
      - mariadb
    restart: unless-stopped
    volumes:
      - ./bookstack:/config

  mariadb:
    image: lscr.io/linuxserver/mariadb:11.4.8
    container_name: mariadb
    environment:
      - PUID=1000
      - PGID=1000
      - MYSQL_ROOT_PASSWORD=your_strong_password2
      - MYSQL_DATABASE=bookstack
      - MYSQL_USER=bookstack
      - MYSQL_PASSWORD=your_strong_password1
    volumes:
      - ./db:/config
    restart: unless-stopped

4. 起動

docker-compose up -d
docker-compose ps

🔖 Nginx 設定

1. 方針

ここでは hosts ファイルを編集して、サブドメイン方式http://book.lan/)でアクセスできるようにします。

2. hosts エントリに追加(Windows)

Windows の hosts ファイルは以下にあります(編集には管理者権限が必要です)。

  • C:\Windows\System32\drivers\etc\hosts

hosts ファイルに以下を追記します。

# book.lan の名前解決
192.168.xx.xx book.lan
  • book.lan は任意の名前でOKです
  • 192.168.xx.xx は BookStack を動かしているサーバ(PC)のIPアドレスにします(固定IP必須)

3. Nginx に bookstack 用の設定を追加

sudo nano /etc/nginx/sites-available/book.conf

設定内容:

server {
    listen 80;
    server_name book.lan;

    # Nginx側のアップロード上限
    client_max_body_size 50m;

    location / {
        proxy_pass http://127.0.0.1:6875;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket / Upgrade 対応
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

/etc/nginx/nginx.confhttp {} の中)に追記:

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

4. 設定を反映

# シンボリックリンクの作成(既に同名リンクがある場合は上書き)
sudo ln -sf /etc/nginx/sites-available/book.conf /etc/nginx/sites-enabled/book.conf

sudo nginx -t
sudo systemctl reload nginx

5. アクセス

ブラウザで http://book.lan/ にアクセスしてログイン画面が表示されればOKです。

ログイン画面

6. ログイン

ログインで使用する初期メールアドレスとパスワードは以下のようになっています。

  • メールアドレス: admin@admin.com
  • パスワード: password

ログイン後、パスワードを変更するなり、管理者ユーザーを追加して初期ユーザーアカウントを削除するなり、適宜設定を行って安全に運用してください。

7. データのバックアップ(参考)

BookStackのデータは、アプリ+DBの2つのボリュームを保護することが大事です。

  • ./bookstack … BookStack本体の設定・アップロードファイルなど
  • ./db … MariaDBのデータ(ページ内容・ユーザー情報など)

この2つを定期的にどこかへコピーしておけば、基本的には復元できるようになります。

7-1. 手動バックアップ例

コンテナを一時停止して、ディレクトリを丸ごとコピーします。

cd ~/bookstack

# 1. コンテナ停止
docker-compose down

# 2. バックアップ先ディレクトリ(例)
BACKUP_DIR=~/backup/bookstack-$(date +%F)
mkdir -p "$BACKUP_DIR"

# 3. データコピー
cp -a ./bookstack "$BACKUP_DIR"/
cp -a ./db "$BACKUP_DIR"/

# 4. コンテナ再起動
docker-compose up -d

バックアップフォルダ(~/backup/bookstack-YYYY-MM-DD)を
外付けディスクやNASに移しておくと、トラブル時も安心です。

7-2. 復元のイメージ

Raspberry Pi を入れ替えたり、OSを入れ直した場合は:

  1. 新しい環境に Docker と docker-compose を入れる
  2. 同じ docker-compose.yml を設置する
  3. そこへバックアップしておいた bookstack/db/ を上書きコピー
  4. docker-compose up -d で起動

これで、バックアップ時点の状態にほぼ戻せるはずです。

🔖 おわりに

Raspberry Pi 5 上に Docker+Nginx で BookStack を立てるところまでをまとめました。
いったんここまでできれば、「どこからでも同じURLで開ける自分専用Wiki」が手に入ります。

あとは実際に、

  • 日々の作業メモや手順書
  • サーバ設定の記録
  • 調べごとのまとめ

などを少しずつ書き溜めていくだけで、自分だけのナレッジベースになっていきます。
ここまで読んで、同じように「軽いWiki環境がほしいな」と感じた方の参考になればうれしいです。

それでは今回はこの辺で。
また違う記事でお会いしましょう😊

Discussion