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
ログイン後、即座に以下を行います。
- 管理者パスワードを変更
- 管理者メールアドレスを実際のものに変更
- 必要であれば新規ユーザーを作成し、共有アカウント運用を避ける
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;
}
.env の APP_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の不一致 |
.env の APP_URL を修正し再起動 |
| BookStackコンテナが繰り返し再起動する | DB起動前に接続を試みている |
depends_on の condition: service_healthy を確認 |
| ファイルアップロードで権限エラー |
PUID/PGID がホストのファイル所有者と不一致 |
.env の PUID/PGID をホストの id -u/id -g に合わせて再作成 |