0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BookStackをDocker Composeで構築する手順(MariaDB + linuxserver.ioイメージ)

0
Posted at

BookStackをDocker Composeでゼロから構築するための、環境に依存しない一般的な手順です。

前提条件

  • Docker / Docker Compose (v2系) がインストール済みであること
  • 80番など任意の空きポートを1つ使えること

1. ディレクトリ構成の作成

mkdir -p bookstack/data/{db,app}
cd bookstack
bookstack/
├── .env
├── docker-compose.yaml
└── data/
    ├── db/      # MariaDBのデータ
    └── app/     # BookStackのアップロードファイル・設定

2. .env ファイルの作成

パスワードや公開URLなど環境固有の値は .env に分離します。

cat > .env <<'EOF'
MYSQL_ROOT_PASSWORD=change_me_root
MYSQL_PASSWORD=change_me_bookstack
APP_URL=http://localhost:6875
PUID=1000
PGID=1000
TZ=Asia/Tokyo
EOF
  • MYSQL_ROOT_PASSWORD / MYSQL_PASSWORD: 推測されにくい値に変更する
  • APP_URL: 実際にアクセスするURL(例: https://bookstack.example.com)と一致させる。ズレるとBookStack内のリンクや画像パスが壊れる
  • PUID / PGID: id -u / id -g で確認したホスト側ユーザーのUID/GIDを指定するとファイル権限周りのトラブルを避けられる

3. docker-compose.yaml の作成

MariaDB + BookStack(linuxserver.ioイメージ)の構成です。

services:
  db:
    image: lscr.io/linuxserver/mariadb:latest
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: bookstackapp
      MYSQL_USER: bookstack
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - ./data/db:/config
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 10

  bookstack:
    image: lscr.io/linuxserver/bookstack:latest
    depends_on:
      db:
        condition: service_healthy
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
      APP_URL: ${APP_URL}
      DB_HOST: db
      DB_PORT: "3306"
      DB_DATABASE: bookstackapp
      DB_USERNAME: bookstack
      DB_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - ./data/app:/config
    ports:
      - "6875:80"
    restart: unless-stopped

ポイント:

  • depends_on.db.condition: service_healthy により、DBの起動が完了してからBookStackコンテナが起動します(DB未起動での接続失敗を防ぐ)
  • 公開ポートの 6875:80 は左側(ホスト側)を任意の空きポートに変更してよい

4. 起動

docker compose up -d
docker compose logs -f bookstack

初回はDB初期化とマイグレーションが走るため1〜2分ほどかかります。ログに Ready to handle connections 等が出れば起動完了です。

5. 初回ログインとセキュリティ設定

ブラウザで http://localhost:6875(設定したポート)にアクセスします。

  • 初期メール: admin@admin.com
  • 初期パスワード: password

ログイン後、即座に以下を行います。

  1. 管理者パスワードを変更
  2. 管理者メールアドレスを実際のものに変更
  3. 必要であれば新規ユーザーを作成し、共有アカウント運用を避ける

6. リバースプロキシ配下で公開する場合

nginx等のリバースプロキシ配下に置く場合は、以下をプロキシ設定に含めます。

location / {
    proxy_pass http://127.0.0.1:6875;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

.envAPP_URL は公開ドメインのURL(https:// 込み)に必ず合わせます。変更後は docker compose up -d で再起動が必要です。

7. バックアップ

最低限、以下をバックアップ対象にします。

  • ./data/db(DBデータ)
  • ./data/app(アップロード画像・添付ファイル・設定)
  • .env

DBのみ論理バックアップしたい場合:

docker compose exec db mysqldump -u bookstack -p bookstackapp > backup_$(date +%Y%m%d).sql

8. アップデート

docker compose pull
docker compose up -d

イメージ更新時にDBマイグレーションが自動実行されます。更新前に上記バックアップを取ることを推奨します。

トラブルシューティング

症状 原因 対処
ページ内リンク・画像が壊れる APP_URL と実際のアクセスURLの不一致 .envAPP_URL を修正し再起動
BookStackコンテナが繰り返し再起動する DB起動前に接続を試みている depends_oncondition: service_healthy を確認
ファイルアップロードで権限エラー PUID/PGID がホストのファイル所有者と不一致 .envPUID/PGID をホストの id -u/id -g に合わせて再作成
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?